Imagify Image Optimizer - Version 1.10

Version Description

  • 2021/07/15 =
  • The plugin minimum compatible versions are now PHP 7.0 and WordPress 5.3
  • Enhancement: Correctly display WordPress cover blocks when WebP and picture tag replacement is enabled (#546)
  • Enhancement: Update our jQuery code to be compatible with the new jQuery version included in WordPress (#545)
  • 3rd party compatibility: Correctly display WooCommerce variable products images when WebP and picture tag replacement is enabled (#495)
  • Bugfix: Prevent nested picture tags when picture tag replacement is enabled (#537)
  • Bugfix: Prevent a fatal error related to get_current_screen() in some cases (#567)
  • Bugfix: Fixes some display issues related to the promotions in the checkout process (#556, #557)
  • Bugfix: Fixes some display issues on the settings & bulk optimization pages on mobile (#566)
  • Bugfix: Prevent PHP warning in some cases on the bulk optimization process (#565)
  • Bugfix: Prevent PHP notice in somes cases for the $images_count variable (#573)
Download this release

Release Info

Developer wp_media
Plugin Icon 128x128 Imagify Image Optimizer
Version 1.10
Comparing to
See all releases

Code changes from version 1.9.14 to 1.10

Files changed (89) hide show
  1. assets/css/admin.css +65 -1
  2. assets/css/admin.min.css +1 -1
  3. assets/css/bulk.css +231 -16
  4. assets/css/bulk.min.css +1 -1
  5. assets/css/notices.css +78 -16
  6. assets/css/notices.min.css +1 -1
  7. assets/css/options.css +37 -1
  8. assets/css/options.min.css +1 -1
  9. assets/css/pricing-modal.css +186 -0
  10. assets/css/pricing-modal.min.css +1 -1
  11. assets/js/admin.js +2 -2
  12. assets/js/admin.min.js +1 -1
  13. assets/js/bulk.js +5 -5
  14. assets/js/bulk.min.js +1 -1
  15. assets/js/es6-promise.auto.js +0 -1
  16. assets/js/options.js +14 -14
  17. assets/js/options.min.js +1 -1
  18. assets/js/pricing-modal.js +175 -50
  19. assets/js/pricing-modal.min.js +1 -1
  20. classes/Bulk/BulkInterface.php +2 -2
  21. classes/Bulk/CustomFolders.php +3 -3
  22. classes/Bulk/Noop.php +2 -2
  23. classes/Bulk/WP.php +3 -3
  24. classes/Job/MediaOptimization.php +1 -1
  25. classes/Optimization/Data/AbstractData.php +4 -4
  26. classes/Optimization/Data/CustomFolders.php +1 -1
  27. classes/Optimization/Data/DataInterface.php +2 -2
  28. classes/Optimization/Data/Noop.php +2 -2
  29. classes/Optimization/File.php +3 -3
  30. classes/Optimization/Process/AbstractProcess.php +55 -55
  31. classes/Optimization/Process/Noop.php +4 -4
  32. classes/Optimization/Process/ProcessInterface.php +5 -5
  33. classes/Stats/OptimizedMediaWithoutWebp.php +8 -8
  34. classes/Webp/Apache.php +1 -1
  35. classes/Webp/Display.php +5 -5
  36. classes/Webp/IIS.php +1 -1
  37. classes/Webp/Picture/Display.php +59 -13
  38. classes/Webp/RewriteRules/Apache.php +1 -1
  39. classes/Webp/RewriteRules/Display.php +5 -5
  40. classes/Webp/RewriteRules/IIS.php +1 -1
  41. classes/Webp/RewriteRules/Nginx.php +1 -1
  42. imagify.php +10 -6
  43. inc/3rd-party/3rd-party.php +1 -0
  44. inc/3rd-party/WooCommerce/class-woocommerce.php +95 -0
  45. inc/3rd-party/amazon-s3-and-cloudfront/classes/Main.php +13 -13
  46. inc/3rd-party/enable-media-replace/classes/Main.php +7 -7
  47. inc/3rd-party/nextgen-gallery/classes/Bulk/NGG.php +3 -3
  48. inc/3rd-party/nextgen-gallery/inc/common/attachments.php +9 -9
  49. inc/3rd-party/regenerate-thumbnails/classes/Main.php +2 -2
  50. inc/3rd-party/yoast-seo.php +3 -0
  51. inc/classes/class-imagify-abstract-cron.php +2 -2
  52. inc/classes/class-imagify-admin-ajax-post.php +7 -7
  53. inc/classes/class-imagify-cron-rating.php +1 -1
  54. inc/classes/class-imagify-custom-folders.php +5 -5
  55. inc/classes/class-imagify-files-list-table.php +3 -3
  56. inc/classes/class-imagify-notices.php +4 -1
  57. inc/classes/class-imagify-plugin.php +0 -1
  58. inc/classes/class-imagify-user.php +2 -0
  59. inc/classes/class-imagify.php +1 -1
  60. inc/common/attachments.php +3 -3
  61. inc/deprecated/classes/class-imagify-enable-media-replace-deprecated.php +1 -1
  62. inc/functions/admin-ui.php +4 -4
  63. inc/functions/common.php +3 -3
  64. inc/functions/compat.php +0 -545
  65. inc/functions/i18n.php +7 -4
  66. readme.txt +141 -84
  67. vendor/autoload.php +1 -1
  68. vendor/composer/autoload_classmap.php +0 -168
  69. vendor/composer/autoload_real.php +14 -5
  70. vendor/composer/autoload_static.php +4 -172
  71. vendor/composer/installed.json +8 -6
  72. vendor/composer/installers/composer.json +2 -0
  73. vendor/composer/installers/src/Composer/Installers/Installer.php +4 -1
  74. vendor/composer/installers/src/Composer/Installers/MauticInstaller.php +29 -6
  75. vendor/composer/installers/src/Composer/Installers/MiaoxingInstaller.php +10 -0
  76. vendor/composer/installers/src/Composer/Installers/OctoberInstaller.php +2 -1
  77. vendor/composer/installers/src/Composer/Installers/TastyIgniterInstaller.php +32 -0
  78. vendor/composer/installers/src/Composer/Installers/WinterInstaller.php +58 -0
  79. views/button/delete-webp.php +1 -1
  80. views/button/generate-webp.php +1 -1
  81. views/notice-almost-over-quota.php +3 -2
  82. views/notice-wp-rocket.php +0 -10
  83. views/page-bulk.php +5 -4
  84. views/page-settings.php +161 -160
  85. views/part-bulk-optimization-overquota-alert.php +1 -15
  86. views/part-discount-banner.php +4 -3
  87. views/part-settings-custom-folders.php +111 -103
  88. views/part-settings-library.php +66 -64
  89. views/part-settings-webp.php +6 -6
assets/css/admin.css CHANGED
@@ -279,7 +279,8 @@ body.imagify-modal-is-open {
279
  }
280
 
281
  /* Buttons */
282
- .imagify-settings .button,
 
283
  .imagify-welcome .button,
284
  .imagify-notice .button,
285
  .imagify-button.imagify-button,
@@ -1393,6 +1394,9 @@ ul.imagify-datas-details.imagify-datas-details {
1393
  box-shadow: 1px 1px 4px rgba(0,0,0,.7);
1394
  border-radius: 3px;
1395
  }
 
 
 
1396
  #imagify-visual-comparison .imagify-modal-content,
1397
  .imagify-visual-comparison .imagify-modal-content {
1398
  max-width: 1400px;
@@ -1437,6 +1441,7 @@ ul.imagify-datas-details.imagify-datas-details {
1437
  .js .imagify-modal .close-btn {
1438
  display: block;
1439
  visibility: visible;
 
1440
  }
1441
 
1442
  /* Attachments specifics */
@@ -1479,3 +1484,62 @@ ul.imagify-datas-details.imagify-datas-details {
1479
  background: #F4F7F9;
1480
  }
1481
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
279
  }
280
 
281
  /* Buttons */
282
+ .imagify-main-content .button,
283
+ .imagify-settings-section .button,
284
  .imagify-welcome .button,
285
  .imagify-notice .button,
286
  .imagify-button.imagify-button,
1394
  box-shadow: 1px 1px 4px rgba(0,0,0,.7);
1395
  border-radius: 3px;
1396
  }
1397
+ .imagify-modal-loading .imagify-modal-content{
1398
+ overflow: hidden;
1399
+ }
1400
  #imagify-visual-comparison .imagify-modal-content,
1401
  .imagify-visual-comparison .imagify-modal-content {
1402
  max-width: 1400px;
1441
  .js .imagify-modal .close-btn {
1442
  display: block;
1443
  visibility: visible;
1444
+ z-index: 12;
1445
  }
1446
 
1447
  /* Attachments specifics */
1484
  background: #F4F7F9;
1485
  }
1486
  }
1487
+ @media (max-width: 730px) {
1488
+ .imagify-settings .imagify-documentation-link-box{
1489
+ margin-top: 2em;
1490
+ }
1491
+ }
1492
+
1493
+ @media (max-width: 782px) {
1494
+ input[type="radio"], input[type="checkbox"] {
1495
+ height: 1.5625rem;
1496
+ width: 1.5625rem;
1497
+ margin: 1px;
1498
+ }
1499
+ [class*="imagify-"] .button-text{
1500
+ font-size: 13px;
1501
+ }
1502
+ .imagify-account-info-col .imagify-settings-section{
1503
+ padding: 0 10px;
1504
+ }
1505
+ .imagify-settings-section{
1506
+ padding: 10px;
1507
+ }
1508
+ .imagify-check-group.imagify-is-scrollable{
1509
+ margin: auto;
1510
+ }
1511
+ .imagify-settings-section .imagify-col,
1512
+ .imagify-col.imagify-col.imagify-shared-with-account-col,
1513
+ .imagify-media-lib-section .imagify-col,
1514
+ .imagify-custom-folders-section .imagify-col,
1515
+ .imagify-shared-with-account-col {
1516
+ width:100%;
1517
+ float: none;
1518
+ padding-right: 0;
1519
+ }
1520
+ .imagify-col.imagify-col.imagify-account-info-col,
1521
+ .imagify-media-lib-section .imagify-account-info-col,
1522
+ .imagify-custom-folders-section .imagify-account-info-col,
1523
+ .imagify-account-info-col{
1524
+ width: 100%;
1525
+ float: none;
1526
+ padding-left: 0;
1527
+ padding-right: 0;
1528
+ }
1529
+ .imagify-lb-text{
1530
+ font-size: 20px;
1531
+ }
1532
+ .imagify-vcenter{
1533
+ -webkit-flex-direction: column;
1534
+ -ms-flex-direction: column;
1535
+ flex-direction: column;
1536
+ -webkit-box-direction: normal;
1537
+ -webkit-box-orient: vertical;
1538
+ -moz-box-direction: normal;
1539
+ -moz-box-orient: vertical;
1540
+ align-items: center;
1541
+ }
1542
+ .imagify-pr2.imagify-pr2{
1543
+ padding-right: 0em;
1544
+ }
1545
+ }
assets/css/admin.min.css CHANGED
@@ -1 +1 @@
1
- .imagify-count-list li,.imagify-flex{display:-webkit-box;display:-ms-flexbox}.imagify-start,.wp_attachment_image .imagify-button-primary{float:left}.imagify-mt0.imagify-mt0,.imagify-section p:first-child{margin-top:0}.imagify-columns,.imagify-data-item,.imagify-datas-actions-links,.imagify-oh,body.imagify-modal-is-open{overflow:hidden}.imagify-flex{display:flex}.imagify-vcenter{-webkit-box-align:center;-ms-flex-align:center;align-items:center}.imagify-noshrink{-ms-flex-negative:0;flex-shrink:0}.imagify-nogrow{-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0}.imagify-wauto{width:auto}.imagify-hauto{height:auto}.imagify-full-width{width:100%}.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-mt2.imagify-mt2{margin-top:2em}.imagify-mt3.imagify-mt3{margin-top:3em}.imagify-mb0.imagify-mb0{margin-bottom:0}.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-pb0.imagify-pb0{padding-bottom:0}.imagify-pr1.imagify-pr1{padding-right:1em}.imagify-pr2.imagify-pr2{padding-right:2em}.imagify-clear{clear:both}.imagify-clearfix:after,.imagify-inline-options:after,.imagify-settings-main-content:after,.imagify-settings-section:after{content:"";display:table;width:100%;clear:both}.imagify-setting-optim-level .imagify-inline-options:after{display:none}.imagify-divider{height:1px;margin:20px 0;background:#D2D3D6}.imagify-pipe{display:inline-block;margin:0 .75em;vertical-align:middle;height:15px;width:1px;background:#979797}.imagify-cell,.imagify-cell.va-top,.imagify-logo,.va-top .imagify-cell{vertical-align:top}.imagify-h3-like.imagify-h3-like.imagify-h3-like{margin-bottom:0;font-size:19px;font-weight:500;color:#1F2332}.imagify-h4-like.imagify-h4-like.imagify-h4-like{font-size:14px;font-weight:700;color:#2E3243}.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-count-list{counter-reset:listcount}.imagify-count-list li{display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.imagify-count-list li+li{margin-top:.5em}.imagify-count-list li:before{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-preferred-size:24px;flex-basis:24px;-ms-flex-negative:0;flex-shrink:0;-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;margin-right:16px;border:2px solid #40b1d0;width:24px;height:24px;counter-increment:listcount 1;content:counter(listcount);color:#40b1d0;border-radius:50%}.imagify-table{display:table;width:100%}.imagify-cell{display:table-cell;padding:10px}.imagify-bulk-submit .imagify-cell{padding-top:0}.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}.imagify-primary.imagify-primary.imagify-primary{color:#40b1d0}.imagify-secondary.imagify-secondary.imagify-secondary,.imagify-valid{color:#8BC34A}.misc-pub-section.misc-pub-imagify h4{font-size:14px;margin-top:5px;margin-bottom:0}.imagify-chart{position:relative;top:1px;display:inline-block;vertical-align:middle}.imagify-chart-container{position:relative;display:inline-block;margin-right:5px}.imagify-chart-container canvas{display:block}.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-settings,.imagify-settings p,.imagify-settings th{color:#5F758E}.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:11px 22px;border:0;font-size:14px;font-weight:600;text-transform:uppercase;letter-spacing:.01em;word-spacing:.01em;-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}.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}[class*=imagify-] .button .dashicons{margin-right:5px;vertical-align:middle}.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-block-secondary .imagify-button-light.imagify-button-light{color:#6F9C3B}.imagify-button-light.imagify-button-light:focus,.imagify-button-light.imagify-button-light:hover{color:#FFF;background:rgba(0,0,0,.2)}.button.imagify-button-clean,.imagify-button-clean{padding:0;background:0 0;-webkit-box-shadow:none;box-shadow:none}.imagify-button-clean .dashicons-plus{width:32px;height:25px}.imagify-button-clean .dashicons-plus:before{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;width:25px;height:22px;margin-left:2px;padding-top:3px;font-size:17px;background:#40B1D0;color:#FFF;-webkit-transition:all .275s;-o-transition:all .275s;transition:all .275s}.button.imagify-button-clean:active,.button.imagify-button-clean:focus,.button.imagify-button-clean:hover,.button.imagify-button-clean[disabled]{background:0 0!important;color:#343A49;-webkit-box-shadow:none;box-shadow:none}.button.imagify-button-clean:focus .dashicons-plus:before,.button.imagify-button-clean:hover .dashicons-plus:before{background:#343A49}button.imagify-link-like{border:0;padding:0;color:inherit;text-decoration:underline;font-size:13px;-webkit-box-shadow:none;box-shadow:none;background:0 0;cursor:pointer}.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-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}[class*=imagify-] .button-text{display:inline-block;vertical-align:middle}.media-frame-content .imagify-button-primary,.wp_attachment_image .imagify-button-primary{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-title.imagify-title{position:relative;padding:10px 30px;font-size:23px;background:#1F2332;color:#FFF}.imagify-welcome .imagify-logo{opacity:1}.imagify-welcome .imagify-title{display:-webkit-box;display:-ms-flexbox;display:flex;padding:20px 30px}.imagify-settings .imagify-title{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}.imagify-settings .imagify-logo-block{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-ms-flex-negative:0;flex-shrink:0;-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;padding:0;margin-right:35px;color:inherit}.imagify-logo-block sup{color:#1F2332}.imagify-settings .imagify-title+.imagify-notice{margin:0;border-right:1px solid #D9D9D9;padding-top:15px;padding-bottom:15px}.imagify-title .title-text{font-size:28px;font-weight:700;color:#FFF}.imagify-lb-icon{padding-right:18px}.imagify-lb-text img{margin-bottom:.15em}.imagify-lb-text{font-size:23px;font-weight:700;color:#FFF}.imagify-logo{display:block;opacity:.4}.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:last-child{margin-bottom:0}.imagify-settings .imagify-documentation-link-box{display:-webkit-box;display:-ms-flexbox;display:flex;padding:12px 13px 14px;border:1px solid #40b1d0;color:#E5EBEF;border-radius:3px}.imagify-documentation-link-icon{width:23px;height:31px;font-size:2.6em;margin-right:15px;line-height:1.3}.imagify-documentation-link-box span{font-size:12px}.imagify-documentation-link-box a{font-weight:700}@media (max-width:1120px){.imagify-settings .imagify-title{-ms-flex-wrap:wrap;flex-wrap:wrap}}.imagify-settings-section{padding:10px 20px}.imagify-account-info-col .imagify-settings-section{padding-right:0}.imagify-settings-main-content,.imagify-welcome .imagify-settings-section{border:1px solid #D9D9D9;border-top-width:0;background:#FFF}.imagify-settings-main-content{padding-bottom:20px}.imagify-settings-main-content .imagify-setting-line,.imagify-settings-main-content p{font-size:14px;line-height:1.5}.imagify-settings-main-content .code{max-height:10em;padding:3px 5px 2px;overflow:auto;background:#EAEAEA;background:rgba(0,0,0,.07)}.imagify-settings-main-content+.imagify-settings-main-content{margin-top:20px;border-top-width:1px}.imagify-br{line-height:2}p.imagify-section-title.imagify-section-title{font-size:20px;margin-top:-.3em;margin-bottom:-.6em}.imagify-rate-us.imagify-rate-us{text-align:right;margin:-1em -2.4em -1em 0;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-important{color:#F5A623}.imagify-settings .imagify-success,.imagify-success{color:#8BC34A}.imagify-info,.imagify-info a{color:#7A8996;font-size:12px}.imagify-info{position:relative;display:inline-block;padding-left:25px}.imagify-info .dashicons{position:absolute;left:0;top:0;color:#40B1D0}.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){position:absolute;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;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;min-height:24px;padding-left:40px;cursor:pointer;font-size:14px;font-weight:700;color:#2E3243}.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:22px;height:22px;border:2px solid #8BA6B4;background:#FFF;border-radius:3px}.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:-2px;left:4.5px;color:#8BA6B4;font-weight:400;-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)}.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:-.5px}.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-check-group{padding-left:2px;margin-bottom:0}.imagify-check-group.imagify-is-scrollable{height:15em;overflow-y:auto;padding:8px;margin:1.5em 0 0 -8px;background:#F4F7F9;border:1px solid #D2D3D6;border-radius:3px}.imagify-is-scrollable legend+p{margin-top:0}.imagify-is-scrollable [type=checkbox]:checked+label:before,.imagify-is-scrollable [type=checkbox]:not(:checked)+label:before{background:#F4F7F9}.imagify-settings .imagify-check-group.imagify-check-group label{color:#338EA6;font-weight:500}.imagify-inline-options{position:relative;display:table;width:100%;max-width:600px;border-collapse:collapse}.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;-webkit-box-shadow:0 -3px 0 rgba(0,0,0,.1) inset;box-shadow:0 -3px 0 rgba(0,0,0,.1) inset;z-index:2;-webkit-transition:all .275s;-o-transition:all .275s;transition:all .275s}.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-inline-options .imagify-info{margin-top:15px}.imagify-account-info-col,.imagify-col.imagify-col.imagify-account-info-col{width:380px;max-width:100%;padding:0 20px 0 0}.imagify-col.imagify-col.imagify-shared-with-account-col,.imagify-shared-with-account-col{width:calc(100% - 380px);padding:0}.imagify-account-info-col .imagify-options-title{padding:24px 26px;color:#FFF;background:#1F2332}.imagify-block-secondary{padding:26px 26px 35px;border:1px solid #75A345;background:#8BC34A;border-radius:3px;color:#FFF}.imagify-account-info-col .imagify-block-secondary.imagify-block-secondary h3,.imagify-block-secondary.imagify-block-secondary p{color:inherit}.imagify-account-info-col .imagify-col-content h3:first-child{margin-top:0}.imagify-account-info-col .imagify-col-content h3{font-size:19px}.imagify-account-info-col .imagify-col-content p{margin:1.5em 0}.imagify-account-info-col .imagify-col-content p:first-child{margin-top:0}.imagify-user-plan-label{float:right;margin-top:-4px;padding:2px 10px;border:2px solid #40B1D0;font-size:14px;text-transform:uppercase;letter-spacing:.02em;color:#40B1D0;border-radius:3px}.imagify-modal .h2,.imagify-modal .h3{letter-spacing:.075em;text-align:center;font-weight:400}.imagify-user-plan-label:empty{display:none}.imagify-columns{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}@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}}.column-imagify_optimized_file.column-imagify_optimized_file{width:300px;text-align:center;vertical-align:middle}.column-imagify_optimized_file>*{max-width:21em;margin:0 auto}@media (min-width:1151px) and (max-width:1800px){.column-imagify_optimized_file.column-imagify_optimized_file{width:21em}}@media (min-width:783px) and (max-width:1150px){.column-imagify_optimized_file.column-imagify_optimized_file{width:13em}table.media .column-title .has-media-icon~.row-actions.row-actions{margin-left:0}}@media (max-width:782px){table.media .column-imagify_optimized_file.column-imagify_optimized_file{text-align:left}table.media .imagify-datas-actions-links,table.media .imagify-datas-more-action{text-align:center}table.media .column-imagify_optimized_file .imagify-datas-actions-links a,table.media .column-imagify_optimized_file>*{max-width:100%;margin-left:0}}@media (min-width:783px) and (max-width:1150px),(max-width:360px){table.media .imagify-hide-if-small{position:absolute;margin:-1px;padding:0;height:1px;width:1px;overflow:hidden;clip:rect(0 0 0 0);border:0;word-wrap:normal!important}}.compat-field-imagify .label{vertical-align:top}.compat-field-imagify ul.imagify-datas-list{margin-top:7px;font-size:11px}ul.imagify-datas-list.imagify-datas-list{margin:0 auto;color:#555}ul.imagify-datas-list .big{font-size:12px;color:#40B1D0}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:38%;-webkit-box-sizing:border-box;box-sizing:border-box}ul.imagify-datas-list .imagify-data-item span.data{width:62%;padding-right:5px;text-align:left}.compat-field-imagify .imagify-datas-list .imagify-data-item .data{width:130px;text-align:left;font-weight:700}ul.imagify-datas-list .imagify-data-item strong{text-align:left;padding-left:5px}.media-sidebar .imagify-datas-list .imagify-data-item .data{width:auto;float:none}.media-sidebar .imagify-datas-list .imagify-data-item strong{display:inline-block;width:auto;float:none}.media-sidebar .imagify-datas-list .imagify-data-item .imagify-chart{float:left}.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;text-transform:uppercase;font-size:9px;font-weight:700;line-height:1.9;text-decoration:none}.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 a .dashicons:before{vertical-align:middle;line-height:20px}.imagify-datas-more-action .the-text{display:inline-block;vertical-align:middle;height:auto;line-height:inherit}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{border-top:2px solid transparent;padding-top:5px;font-size:11px}.nggform .imagify-datas-actions-links{position:relative;z-index:2}.nggform .row-actions{z-index:1}.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}.column-imagify_optimized_file .imagify-datas-actions-links a{margin:0 .7em;padding-left:15px}.compat-field-imagify .imagify-datas-actions-links a,.misc-pub-imagify .imagify-datas-actions-links a{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}.media-sidebar .compat-field-imagify .imagify-datas-actions-links br,.submitbox .misc-pub-imagify .imagify-datas-actions-links br{display:none}.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-account,.imagify-account-link{padding-right:15px}.imagify-meteo-icon{display:inline-block;height:38px;vertical-align:middle;margin-right:10px}.imagify-user-plan{color:#40b1d0}.imagify-meteo-title.imagify-meteo-title{color:#FFF;font-size:17px}.imagify-space-left>p{color:#FFF}[class^=imagify-bar-]{position:relative;height:8px;width:100%;background:#60758D;color:#FFF;font-size:10px}.imagify-progress{height:8px;-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-primary .imagify-progress{background:#40B1D0}.imagify-bar-primary .imagify-barnb{color:#40B1D0}.imagify-bar-negative .imagify-progress{background:#D2D3D6}.imagify-bar-negative .imagify-barnb{color:#7A8996}.imagify-bar-neutral .imagify-progress{background:#F5A623}.imagify-space-left .imagify-bar-negative .imagify-progress{background:#C51162}.imagify-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}.imagify-btn-ghost:focus,.imagify-btn-ghost:hover{background:#FFF;color:#888}.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}.imagify-warning{background:#f5a623;color:#FFF;text-shadow:0 0 2px rgba(0,0,0,.2)}.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}.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}.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-col{float:left;width:50%;-webkit-box-sizing:border-box;box-sizing:border-box;-ms-flex-preferred-size:50%;flex-basis:50%;padding-right:20px}.imagify-col+.imagify-col{padding-right:0;padding-left:20px}.imagify-col:target{-webkit-animation:hello 1s 3 linear backwards;animation:hello 1s 3 linear backwards}@-webkit-keyframes hello{0%,100%{background:#FFF}50%{background:#F4F7F9}}@keyframes hello{0%,100%{background:#FFF}50%{background:#F4F7F9}}
1
+ .imagify-start,.wp_attachment_image .imagify-button-primary{float:left}.imagify-mt0.imagify-mt0,.imagify-section p:first-child{margin-top:0}.imagify-columns,.imagify-data-item,.imagify-datas-actions-links,.imagify-oh,body.imagify-modal-is-open{overflow:hidden}.imagify-flex{display:-webkit-box;display:-ms-flexbox;display:flex}.imagify-vcenter{-webkit-box-align:center;-ms-flex-align:center;align-items:center}.imagify-noshrink{-ms-flex-negative:0;flex-shrink:0}.imagify-nogrow{-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0}.imagify-wauto{width:auto}.imagify-hauto{height:auto}.imagify-full-width{width:100%}.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-mt2.imagify-mt2{margin-top:2em}.imagify-mt3.imagify-mt3{margin-top:3em}.imagify-mb0.imagify-mb0{margin-bottom:0}.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-pb0.imagify-pb0{padding-bottom:0}.imagify-pr1.imagify-pr1{padding-right:1em}.imagify-pr2.imagify-pr2{padding-right:2em}.imagify-clear{clear:both}.imagify-clearfix:after,.imagify-inline-options:after,.imagify-settings-main-content:after,.imagify-settings-section:after{content:"";display:table;width:100%;clear:both}.imagify-setting-optim-level .imagify-inline-options:after{display:none}.imagify-divider{height:1px;margin:20px 0;background:#D2D3D6}.imagify-pipe{display:inline-block;margin:0 .75em;vertical-align:middle;height:15px;width:1px;background:#979797}.imagify-h3-like.imagify-h3-like.imagify-h3-like{margin-bottom:0;font-size:19px;font-weight:500;color:#1F2332}.imagify-h4-like.imagify-h4-like.imagify-h4-like{font-size:14px;font-weight:700;color:#2E3243}.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-count-list{counter-reset:listcount}.imagify-count-list li{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.imagify-count-list li+li{margin-top:.5em}.imagify-count-list li:before{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-preferred-size:24px;flex-basis:24px;-ms-flex-negative:0;flex-shrink:0;-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;margin-right:16px;border:2px solid #40b1d0;width:24px;height:24px;counter-increment:listcount 1;content:counter(listcount);color:#40b1d0;border-radius:50%}.imagify-table{display:table;width:100%}.imagify-cell{display:table-cell;padding:10px;vertical-align:top}.imagify-cell.va-top,.va-top .imagify-cell{vertical-align:top}.imagify-bulk-submit .imagify-cell{padding-top:0}.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}.imagify-primary.imagify-primary.imagify-primary{color:#40b1d0}.imagify-secondary.imagify-secondary.imagify-secondary,.imagify-valid{color:#8BC34A}.misc-pub-section.misc-pub-imagify h4{font-size:14px;margin-top:5px;margin-bottom:0}.imagify-chart{position:relative;top:1px;display:inline-block;vertical-align:middle}.imagify-chart-container{position:relative;display:inline-block;margin-right:5px}.imagify-chart-container canvas{display:block}.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-settings,.imagify-settings p,.imagify-settings th{color:#5F758E}.imagify-button-primary.imagify-button-primary,.imagify-button-secondary.imagify-button-secondary,.imagify-button.imagify-button,.imagify-main-content .button,.imagify-notice .button,.imagify-settings-section .button,.imagify-welcome .button{height:auto;padding:11px 22px;border:0;font-size:14px;font-weight:600;text-transform:uppercase;letter-spacing:.01em;word-spacing:.01em;-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}.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}[class*=imagify-] .button .dashicons{margin-right:5px;vertical-align:middle}.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-block-secondary .imagify-button-light.imagify-button-light{color:#6F9C3B}.imagify-button-light.imagify-button-light:focus,.imagify-button-light.imagify-button-light:hover{color:#FFF;background:rgba(0,0,0,.2)}.button.imagify-button-clean,.imagify-button-clean{padding:0;background:0 0;-webkit-box-shadow:none;box-shadow:none}.imagify-button-clean .dashicons-plus{width:32px;height:25px}.imagify-button-clean .dashicons-plus:before{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;width:25px;height:22px;margin-left:2px;padding-top:3px;font-size:17px;background:#40B1D0;color:#FFF;-webkit-transition:all .275s;-o-transition:all .275s;transition:all .275s}.button.imagify-button-clean:active,.button.imagify-button-clean:focus,.button.imagify-button-clean:hover,.button.imagify-button-clean[disabled]{background:0 0!important;color:#343A49;-webkit-box-shadow:none;box-shadow:none}.button.imagify-button-clean:focus .dashicons-plus:before,.button.imagify-button-clean:hover .dashicons-plus:before{background:#343A49}button.imagify-link-like{border:0;padding:0;color:inherit;text-decoration:underline;font-size:13px;-webkit-box-shadow:none;box-shadow:none;background:0 0;cursor:pointer}.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-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}[class*=imagify-] .button-text{display:inline-block;vertical-align:middle}.media-frame-content .imagify-button-primary,.wp_attachment_image .imagify-button-primary{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-title.imagify-title{position:relative;padding:10px 30px;font-size:23px;background:#1F2332;color:#FFF}.imagify-welcome .imagify-logo{opacity:1}.imagify-welcome .imagify-title{display:-webkit-box;display:-ms-flexbox;display:flex;padding:20px 30px}.imagify-settings .imagify-title{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}.imagify-settings .imagify-logo-block{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-ms-flex-negative:0;flex-shrink:0;-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;padding:0;margin-right:35px;color:inherit}.imagify-logo-block sup{color:#1F2332}.imagify-settings .imagify-title+.imagify-notice{margin:0;border-right:1px solid #D9D9D9;padding-top:15px;padding-bottom:15px}.imagify-title .title-text{font-size:28px;font-weight:700;color:#FFF}.imagify-lb-icon{padding-right:18px}.imagify-lb-text img{margin-bottom:.15em}.imagify-lb-text{font-size:23px;font-weight:700;color:#FFF}.imagify-logo{display:block;vertical-align:top;opacity:.4}.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:last-child{margin-bottom:0}.imagify-settings .imagify-documentation-link-box{display:-webkit-box;display:-ms-flexbox;display:flex;padding:12px 13px 14px;border:1px solid #40b1d0;color:#E5EBEF;border-radius:3px}.imagify-documentation-link-icon{width:23px;height:31px;font-size:2.6em;margin-right:15px;line-height:1.3}.imagify-documentation-link-box span{font-size:12px}.imagify-documentation-link-box a{font-weight:700}@media (max-width:1120px){.imagify-settings .imagify-title{-ms-flex-wrap:wrap;flex-wrap:wrap}}.imagify-settings-section{padding:10px 20px}.imagify-account-info-col .imagify-settings-section{padding-right:0}.imagify-settings-main-content,.imagify-welcome .imagify-settings-section{border:1px solid #D9D9D9;border-top-width:0;background:#FFF}.imagify-settings-main-content{padding-bottom:20px}.imagify-settings-main-content .imagify-setting-line,.imagify-settings-main-content p{font-size:14px;line-height:1.5}.imagify-settings-main-content .code{max-height:10em;padding:3px 5px 2px;overflow:auto;background:#EAEAEA;background:rgba(0,0,0,.07)}.imagify-settings-main-content+.imagify-settings-main-content{margin-top:20px;border-top-width:1px}.imagify-br{line-height:2}p.imagify-section-title.imagify-section-title{font-size:20px;margin-top:-.3em;margin-bottom:-.6em}.imagify-rate-us.imagify-rate-us{text-align:right;margin:-1em -2.4em -1em 0;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-important{color:#F5A623}.imagify-settings .imagify-success,.imagify-success{color:#8BC34A}.imagify-info,.imagify-info a{color:#7A8996;font-size:12px}.imagify-info{position:relative;display:inline-block;padding-left:25px}.imagify-info .dashicons{position:absolute;left:0;top:0;color:#40B1D0}.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){position:absolute;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;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;min-height:24px;padding-left:40px;cursor:pointer;font-size:14px;font-weight:700;color:#2E3243}.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:22px;height:22px;border:2px solid #8BA6B4;background:#FFF;border-radius:3px}.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:-2px;left:4.5px;color:#8BA6B4;font-weight:400;-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)}.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:-.5px}.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-check-group{padding-left:2px;margin-bottom:0}.imagify-check-group.imagify-is-scrollable{height:15em;overflow-y:auto;padding:8px;margin:1.5em 0 0 -8px;background:#F4F7F9;border:1px solid #D2D3D6;border-radius:3px}.imagify-is-scrollable legend+p{margin-top:0}.imagify-is-scrollable [type=checkbox]:checked+label:before,.imagify-is-scrollable [type=checkbox]:not(:checked)+label:before{background:#F4F7F9}.imagify-settings .imagify-check-group.imagify-check-group label{color:#338EA6;font-weight:500}.imagify-inline-options{position:relative;display:table;width:100%;max-width:600px;border-collapse:collapse}.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;-webkit-box-shadow:0 -3px 0 rgba(0,0,0,.1) inset;box-shadow:0 -3px 0 rgba(0,0,0,.1) inset;z-index:2;-webkit-transition:all .275s;-o-transition:all .275s;transition:all .275s}.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-inline-options .imagify-info{margin-top:15px}.imagify-account-info-col,.imagify-col.imagify-col.imagify-account-info-col{width:380px;max-width:100%;padding:0 20px 0 0}.imagify-col.imagify-col.imagify-shared-with-account-col,.imagify-shared-with-account-col{width:calc(100% - 380px);padding:0}.imagify-account-info-col .imagify-options-title{padding:24px 26px;color:#FFF;background:#1F2332}.imagify-block-secondary{padding:26px 26px 35px;border:1px solid #75A345;background:#8BC34A;border-radius:3px;color:#FFF}.imagify-account-info-col .imagify-block-secondary.imagify-block-secondary h3,.imagify-block-secondary.imagify-block-secondary p{color:inherit}.imagify-account-info-col .imagify-col-content h3:first-child{margin-top:0}.imagify-account-info-col .imagify-col-content h3{font-size:19px}.imagify-account-info-col .imagify-col-content p{margin:1.5em 0}.imagify-account-info-col .imagify-col-content p:first-child{margin-top:0}.imagify-user-plan-label{float:right;margin-top:-4px;padding:2px 10px;border:2px solid #40B1D0;font-size:14px;text-transform:uppercase;letter-spacing:.02em;color:#40B1D0;border-radius:3px}.imagify-user-plan-label:empty{display:none}.imagify-columns{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}@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}}.column-imagify_optimized_file.column-imagify_optimized_file{width:300px;text-align:center;vertical-align:middle}.column-imagify_optimized_file>*{max-width:21em;margin:0 auto}@media (min-width:1151px) and (max-width:1800px){.column-imagify_optimized_file.column-imagify_optimized_file{width:21em}}@media (min-width:783px) and (max-width:1150px){.column-imagify_optimized_file.column-imagify_optimized_file{width:13em}table.media .column-title .has-media-icon~.row-actions.row-actions{margin-left:0}}@media (max-width:782px){table.media .column-imagify_optimized_file.column-imagify_optimized_file{text-align:left}table.media .imagify-datas-actions-links,table.media .imagify-datas-more-action{text-align:center}table.media .column-imagify_optimized_file .imagify-datas-actions-links a,table.media .column-imagify_optimized_file>*{max-width:100%;margin-left:0}}@media (min-width:783px) and (max-width:1150px),(max-width:360px){table.media .imagify-hide-if-small{position:absolute;margin:-1px;padding:0;height:1px;width:1px;overflow:hidden;clip:rect(0 0 0 0);border:0;word-wrap:normal!important}}.compat-field-imagify .label{vertical-align:top}.compat-field-imagify ul.imagify-datas-list{margin-top:7px;font-size:11px}ul.imagify-datas-list.imagify-datas-list{margin:0 auto;color:#555}ul.imagify-datas-list .big{font-size:12px;color:#40B1D0}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:38%;-webkit-box-sizing:border-box;box-sizing:border-box}ul.imagify-datas-list .imagify-data-item span.data{width:62%;padding-right:5px;text-align:left}.compat-field-imagify .imagify-datas-list .imagify-data-item .data{width:130px;text-align:left;font-weight:700}ul.imagify-datas-list .imagify-data-item strong{text-align:left;padding-left:5px}.media-sidebar .imagify-datas-list .imagify-data-item .data{width:auto;float:none}.media-sidebar .imagify-datas-list .imagify-data-item strong{display:inline-block;width:auto;float:none}.media-sidebar .imagify-datas-list .imagify-data-item .imagify-chart{float:left}.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;text-transform:uppercase;font-size:9px;font-weight:700;line-height:1.9;text-decoration:none}.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 a .dashicons:before{vertical-align:middle;line-height:20px}.imagify-datas-more-action .the-text{display:inline-block;vertical-align:middle;height:auto;line-height:inherit}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{border-top:2px solid transparent;padding-top:5px;font-size:11px}.nggform .imagify-datas-actions-links{position:relative;z-index:2}.nggform .row-actions{z-index:1}.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}.column-imagify_optimized_file .imagify-datas-actions-links a{margin:0 .7em;padding-left:15px}.compat-field-imagify .imagify-datas-actions-links a,.misc-pub-imagify .imagify-datas-actions-links a{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}.media-sidebar .compat-field-imagify .imagify-datas-actions-links br,.submitbox .misc-pub-imagify .imagify-datas-actions-links br{display:none}.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-account,.imagify-account-link{padding-right:15px}.imagify-meteo-icon{display:inline-block;height:38px;vertical-align:middle;margin-right:10px}.imagify-user-plan{color:#40b1d0}.imagify-meteo-title.imagify-meteo-title{color:#FFF;font-size:17px}.imagify-space-left>p{color:#FFF}[class^=imagify-bar-]{position:relative;height:8px;width:100%;background:#60758D;color:#FFF;font-size:10px}.imagify-progress{height:8px;-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-primary .imagify-progress{background:#40B1D0}.imagify-bar-primary .imagify-barnb{color:#40B1D0}.imagify-bar-negative .imagify-progress{background:#D2D3D6}.imagify-bar-negative .imagify-barnb{color:#7A8996}.imagify-bar-neutral .imagify-progress{background:#F5A623}.imagify-space-left .imagify-bar-negative .imagify-progress{background:#C51162}.imagify-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}.imagify-btn-ghost:focus,.imagify-btn-ghost:hover{background:#FFF;color:#888}.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}.imagify-warning{background:#f5a623;color:#FFF;text-shadow:0 0 2px rgba(0,0,0,.2)}.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-modal-loading .imagify-modal-content{overflow:hidden}#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-weight:400;font-size:24px;letter-spacing:.075em;text-align:center}.imagify-modal .h3{color:#40b1d0;font-weight:400;font-size:18px;letter-spacing:.075em;text-align:center}.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;z-index:12}.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-col{float:left;width:50%;-webkit-box-sizing:border-box;box-sizing:border-box;-ms-flex-preferred-size:50%;flex-basis:50%;padding-right:20px}.imagify-col+.imagify-col{padding-right:0;padding-left:20px}.imagify-col:target{-webkit-animation:hello 1s 3 linear backwards;animation:hello 1s 3 linear backwards}@-webkit-keyframes hello{0%,100%{background:#FFF}50%{background:#F4F7F9}}@keyframes hello{0%,100%{background:#FFF}50%{background:#F4F7F9}}@media (max-width:730px){.imagify-settings .imagify-documentation-link-box{margin-top:2em}}@media (max-width:782px){input[type=checkbox],input[type=radio]{height:1.5625rem;width:1.5625rem;margin:1px}[class*=imagify-] .button-text{font-size:13px}.imagify-account-info-col .imagify-settings-section{padding:0 10px}.imagify-settings-section{padding:10px}.imagify-check-group.imagify-is-scrollable{margin:auto}.imagify-col.imagify-col.imagify-shared-with-account-col,.imagify-custom-folders-section .imagify-col,.imagify-media-lib-section .imagify-col,.imagify-settings-section .imagify-col,.imagify-shared-with-account-col{width:100%;float:none;padding-right:0}.imagify-account-info-col,.imagify-col.imagify-col.imagify-account-info-col,.imagify-custom-folders-section .imagify-account-info-col,.imagify-media-lib-section .imagify-account-info-col{width:100%;float:none;padding-left:0;padding-right:0}.imagify-lb-text{font-size:20px}.imagify-vcenter{-ms-flex-direction:column;flex-direction:column;-webkit-box-direction:normal;-webkit-box-orient:vertical;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.imagify-pr2.imagify-pr2{padding-right:0}}
assets/css/bulk.css CHANGED
@@ -26,7 +26,8 @@
26
  .imagify-doughnut-legend li span {
27
  display: block;
28
  position: absolute;
29
- left: 0; top: 0;
 
30
  width: 25px;
31
  height: 25px;
32
  border-radius: 50%;
@@ -47,9 +48,11 @@
47
  float: left;
48
  margin-right: 20px;
49
  }
 
50
  .imagify-chart-percent {
51
  position: absolute;
52
- left: 0; right: 0;
 
53
  top: 50%;
54
  margin-top: -.5em;
55
  line-height: 1;
@@ -58,6 +61,7 @@
58
  font-weight: bold;
59
  color: #46B1CE;
60
  }
 
61
  .imagify-chart-percent span {
62
  font-size: 20px;
63
  vertical-align: super;
@@ -100,6 +104,7 @@ body[class*="_imagify-ngg-bulk-optimization"] .media-item .progress,
100
  body[class*="_imagify-ngg-bulk-optimization"] .media-item .percent {
101
  text-align: right;
102
  }
 
103
  .media_page_imagify-bulk-optimization .media-item .progress .bar,
104
  body[class*="_imagify-ngg-bulk-optimization"] .media-item .progress .bar {
105
  position: relative;
@@ -121,9 +126,11 @@ body[class*="_imagify-ngg-bulk-optimization"] .media-item .progress .bar {
121
  width: calc(100% - 465px);
122
  padding-left: 20px;
123
  }
 
124
  .imagify-columns .col-statistics.col-statistics {
125
  width: 60%;
126
  }
 
127
  .imagify-columns .col-chart.col-chart {
128
  width: 40%;
129
  }
@@ -140,9 +147,11 @@ body[class*="_imagify-ngg-bulk-optimization"] .media-item .progress .bar {
140
  float: none;
141
  margin-right: 0;
142
  }
 
143
  .imagify-doughnut-legend {
144
  margin-top: 18px;
145
  }
 
146
  .imagify-global-optim-phrase {
147
  padding-top: 0;
148
  width: auto;
@@ -156,6 +165,7 @@ body[class*="_imagify-ngg-bulk-optimization"] .media-item .progress .bar {
156
  float: none;
157
  padding: 0;
158
  }
 
159
  .imagify-columns .col-chart.col-chart {
160
  margin-top: 3em;
161
  }
@@ -166,6 +176,7 @@ body[class*="_imagify-ngg-bulk-optimization"] .media-item .progress .bar {
166
  width: 1px;
167
  background: rgba(255, 255, 255, .2);
168
  }
 
169
  .base-transparent {
170
  background: transparent;
171
  }
@@ -175,6 +186,7 @@ body[class*="_imagify-ngg-bulk-optimization"] .media-item .progress .bar {
175
  box-sizing: border-box;
176
  padding-right: 4.5em;
177
  }
 
178
  .right-outside-number .imagify-barnb {
179
  display: block;
180
  margin-right: -5.25em;
@@ -191,6 +203,7 @@ body[class*="_imagify-ngg-bulk-optimization"] .media-item .progress .bar {
191
  color: #000;
192
  font-weight: bold;
193
  }
 
194
  .imagify-h2-like .dashicons,
195
  .imagify-h2-like .dashicons:before {
196
  font-size: 38px;
@@ -200,6 +213,7 @@ body[class*="_imagify-ngg-bulk-optimization"] .media-item .progress .bar {
200
  vertical-align: -5px;
201
  color: #40B1D0;
202
  }
 
203
  .imagify-info-block {
204
  position: relative;
205
  padding: 10px;
@@ -208,10 +222,12 @@ body[class*="_imagify-ngg-bulk-optimization"] .media-item .progress .bar {
208
  border-radius: 4px;
209
  line-height: 1.6;
210
  }
 
211
  .imagify-list-infos {
212
  margin: 0;
213
  padding: 0;
214
  }
 
215
  .imagify-list-infos li {
216
  display: flex;
217
  align-items: center;
@@ -221,12 +237,15 @@ body[class*="_imagify-ngg-bulk-optimization"] .media-item .progress .bar {
221
  line-height: 1.5;
222
  color: #626E7B;
223
  }
 
224
  .imagify-list-infos li:first-child {
225
  padding-top: 5px;
226
  }
 
227
  .imagify-list-infos li:last-child {
228
  padding-bottom: 5px;
229
  }
 
230
  .imagify-list-infos li + li {
231
  border-top: 1px solid #E9EFF2;
232
  }
@@ -235,6 +254,7 @@ body[class*="_imagify-ngg-bulk-optimization"] .media-item .progress .bar {
235
  flex-grow: 0;
236
  flex-basis: 50px;
237
  }
 
238
  .imagify-info-icon + span {
239
  padding-left: 20px;
240
  }
@@ -251,11 +271,13 @@ body[class*="_imagify-ngg-bulk-optimization"] .media-item .progress .bar {
251
  background: #FFF;
252
  color: #4A4A4A;
253
  }
 
254
  .imagify-bulk p,
255
  .imagify-bulk li,
256
  .imagify-bulk h3 {
257
  color: #4A4A4A;
258
  }
 
259
  .imagify-bulk .imagify-settings-section h3 {
260
  margin-bottom: 2em;
261
  }
@@ -265,12 +287,14 @@ body[class*="_imagify-ngg-bulk-optimization"] .media-item .progress .bar {
265
  display: flex;
266
  align-items: center;
267
  }
 
268
  .imagify-account-info-col p.imagify-meteo-title {
269
  margin: 0;
270
  font-size: 24px;
271
  font-weight: bold;
272
  color: #FFF;
273
  }
 
274
  .imagify-account-info-col .imagify-options-title > a {
275
  flex-basis: 100px;
276
  margin-left: auto;
@@ -278,6 +302,7 @@ body[class*="_imagify-ngg-bulk-optimization"] .media-item .progress .bar {
278
  text-decoration: underline;
279
  font-size: 12px;
280
  }
 
281
  .imagify-account-info-col .imagify-meteo-title .dashicons,
282
  .imagify-account-info-col .imagify-meteo-title .dashicons:before {
283
  font-size: 38px;
@@ -286,28 +311,34 @@ body[class*="_imagify-ngg-bulk-optimization"] .media-item .progress .bar {
286
  margin-right: 4px;
287
  color: #40B1D0;
288
  }
 
289
  .imagify-col-content {
290
  background: #F4F7F9;
291
  border-left: 1px solid #ddd;
292
  border-right: 1px solid #ddd;
293
  }
 
294
  .imagify-col-content .imagify-block-secondary {
295
  margin-left: -1px;
296
  margin-right: -1px;
297
  }
 
298
  .imagify-col-content .imagify-space-left {
299
  margin: 15px 30px 15px 0;
300
  }
 
301
  .imagify-col-content .imagify-space-left p {
302
  margin: 0 0 10px 0;
303
  font-size: 19px;
304
  font-weight: 500;
305
  color: #343A49;
306
  }
 
307
  .imagify-col-content .imagify-meteo-icon {
308
  height: 64px;
309
  margin: 15px 15px 15px 20px;
310
  }
 
311
  .imagify-col-content .imagify-section-title + p {
312
  margin-top: 10px;
313
  }
@@ -322,6 +353,7 @@ body[class*="_imagify-ngg-bulk-optimization"] .media-item .progress .bar {
322
  top: 100%;
323
  left: 0;
324
  }
 
325
  .imagify-tooltips .icon-round {
326
  float: left;
327
  display: inline-block;
@@ -337,6 +369,7 @@ body[class*="_imagify-ngg-bulk-optimization"] .media-item .progress .bar {
337
  text-align: center;
338
  border-radius: 50%;
339
  }
 
340
  .imagify-tooltips .tooltip-content {
341
  display: block;
342
  position: relative;
@@ -347,38 +380,48 @@ body[class*="_imagify-ngg-bulk-optimization"] .media-item .progress .bar {
347
  font-size: 10px;
348
  border-radius: 3px;
349
  }
 
350
  .imagify-tooltips.right .tooltip-content {
351
  margin-left: 12px;
352
  }
 
353
  .imagify-tooltips.bottom .tooltip-content {
354
  margin-top: 4px;
355
  }
 
356
  .imagify-inline-options label .tooltip-content {
357
  position: absolute;
358
- left: 0; right: 0;
 
359
  top: 100%;
360
  text-transform: none;
361
  font-size: 10px;
362
  letter-spacing: 0;
363
  text-align: center;
364
  }
 
365
  .imagify-tooltips .tooltip-content:after {
366
  content: "";
367
  position: absolute;
368
  }
 
369
  .imagify-tooltips.right .tooltip-content:after {
370
- top: 16px; left: -6px;
 
371
  border-right: 8px solid #2e3242;
372
  border-top: 6px solid transparent;
373
  border-bottom: 6px solid transparent;
374
  }
 
375
  .imagify-tooltips.bottom .tooltip-content:after {
376
- top: -5px; left: 50%;
 
377
  margin-left: -3px;
378
  border-bottom: 6px solid #2e3242;
379
  border-left: 6px solid transparent;
380
  border-right: 6px solid transparent;
381
  }
 
382
  .imagify-space-tooltips .tooltip-content {
383
  max-width: 280px;
384
  margin-top: 20px;
@@ -388,6 +431,7 @@ body[class*="_imagify-ngg-bulk-optimization"] .media-item .progress .bar {
388
  background: #40B1D0;
389
  box-shadow: 0 3px 0 #338EA6;
390
  }
 
391
  .imagify-space-tooltips .tooltip-content:after {
392
  top: -14px;
393
  left: 50%;
@@ -397,31 +441,39 @@ body[class*="_imagify-ngg-bulk-optimization"] .media-item .progress .bar {
397
  border-left: 15px solid transparent;
398
  border-right: 15px solid transparent;
399
  }
 
400
  .tooltip-content.tooltip-table {
401
  display: table;
402
  width: 100%;
403
  }
 
404
  .tooltip-content.tooltip-table > * {
405
  display: table-cell;
406
  vertical-align: middle;
407
  }
 
408
  .tooltip-content .cell-icon {
409
  width: 28px;
410
  }
 
411
  .tooltip-content .cell-icon .icon {
412
  margin-bottom: 0;
413
  }
 
414
  .tooltip-content .cell-text {
415
  padding: 5px 10px 5px 0;
416
  line-height: 1.3;
417
  }
 
418
  .tooltip-content .cell-sep {
419
  width: 1px;
420
  background: rgba(255, 255, 255, .4);
421
  }
 
422
  .tooltip-content .cell-cta {
423
  padding-left: 10px;
424
  }
 
425
  .tooltip-content .cell-cta a {
426
  display: block;
427
  color: #FFF;
@@ -435,6 +487,7 @@ body[class*="_imagify-ngg-bulk-optimization"] .media-item .progress .bar {
435
  margin-bottom: 1.35em;
436
  overflow: hidden;
437
  }
 
438
  .imagify-number-you-optimized .number {
439
  display: table-cell;
440
  padding-right: 15px;
@@ -445,9 +498,11 @@ body[class*="_imagify-ngg-bulk-optimization"] .media-item .progress .bar {
445
  white-space: nowrap;
446
  color: #000;
447
  }
 
448
  .imagify-number-you-optimized [id="imagify-total-optimized-attachments-pct"] {
449
  color: #40B1D0;
450
  }
 
451
  .imagify-number-you-optimized .text {
452
  display: table-cell;
453
  vertical-align: middle;
@@ -455,6 +510,7 @@ body[class*="_imagify-ngg-bulk-optimization"] .media-item .progress .bar {
455
  font-size: 12px;
456
  color: #626E7B;
457
  }
 
458
  .imagify-number-you-optimized > p {
459
  display: table;
460
  }
@@ -463,14 +519,17 @@ body[class*="_imagify-ngg-bulk-optimization"] .media-item .progress .bar {
463
  .imagify-bars {
464
  padding-right: 15px;
465
  }
 
466
  .imagify-bars p {
467
  font-size: 12px;
468
  margin-bottom: 5px;
469
  }
 
470
  .imagify-bars + .imagify-number-you-optimized {
471
  border-bottom: 0;
472
  padding-top: 0.85em;
473
  }
 
474
  .imagify-bars + .imagify-number-you-optimized p {
475
  color: #46b1ce;
476
  }
@@ -486,11 +545,13 @@ body[class*="_imagify-ngg-bulk-optimization"] .media-item .progress .bar {
486
  background: #343A49;
487
  color: #FFF;
488
  }
 
489
  .imagify-newbie {
490
  margin-top: 4em;
491
  position: relative;
492
  overflow: visible;
493
  }
 
494
  .imagify-newbie .imagify-new-feature.imagify-new-feature {
495
  position: absolute;
496
  top: 0;
@@ -505,11 +566,13 @@ body[class*="_imagify-ngg-bulk-optimization"] .media-item .progress .bar {
505
  color: #FFF;
506
  background: #8BC34A;
507
  }
 
508
  .imagify-newbie .imagify-table-header {
509
  padding: 30px 25px;
510
  border: 2px solid #8BC34A;
511
  background: #F3F9EC;
512
  }
 
513
  .imagify-th-titles .dashicons,
514
  .imagify-th-titles .dashicons:before {
515
  width: 38px;
@@ -518,31 +581,38 @@ body[class*="_imagify-ngg-bulk-optimization"] .media-item .progress .bar {
518
  font-size: 38px;
519
  color: #40B1D0;
520
  }
 
521
  .imagify-newbie .imagify-th-titles .dashicons:before {
522
  color: #8BC34A;
523
  }
 
524
  .imagify-th-title.imagify-th-title.imagify-th-title {
525
  margin: 0;
526
  font-size: 24px;
527
  font-weight: 500;
528
  color: #FFF;
529
  }
 
530
  .imagify-newbie .imagify-th-title.imagify-th-title {
531
  color: #343A49;
532
  }
 
533
  .imagify-th-subtitle.imagify-th-subtitle.imagify-th-subtitle {
534
  margin: 0 0 5px;
535
  font-size: 14px;
536
  color: #7A8996;
537
  font-weight: 500;
538
  }
 
539
  .imagify-th-action .imagify-button-clean {
540
  font-size: 12px;
541
  color: #7A8996;
542
  }
 
543
  .imagify-th-action .imagify-is-active {
544
  color: #FFF;
545
  }
 
546
  .imagify-th-action .button:hover,
547
  .imagify-th-action .button:focus {
548
  color: #FFF;
@@ -553,16 +623,20 @@ body[class*="_imagify-ngg-bulk-optimization"] .media-item .progress .bar {
553
  border-spacing: 0;
554
  border-collapse: collapse;
555
  }
 
556
  .imagify-bulk-table td {
557
  padding: 20px;
558
  }
 
559
  .imagify-bulk-table-details {
560
  border-bottom: 2px solid #E5EBEF;
561
  }
 
562
  .imagify-bulk-table-details thead tr,
563
  .imagify-bulk-table-details thead th {
564
  background: #4A5362;
565
  }
 
566
  .imagify-bulk-table-details thead th {
567
  padding: 12px 20px;
568
  text-align: left;
@@ -570,13 +644,16 @@ body[class*="_imagify-ngg-bulk-optimization"] .media-item .progress .bar {
570
  color: #E5EBEF;
571
  font-size: 12px;
572
  }
 
573
  .imagify-bulk-table-details tbody tr:nth-child(odd) td {
574
  background: #F2F5F7;
575
  }
 
576
  .imagify-bulk-table-content {
577
  border: 1px solid #D3D3D3;
578
  border-top: 0;
579
  }
 
580
  .imagify-bulk-table-footer {
581
  padding: 20px;
582
  color: #626E7B;
@@ -586,6 +663,7 @@ body[class*="_imagify-ngg-bulk-optimization"] .media-item .progress .bar {
586
  .imagify-bulk-table tbody tr + tr {
587
  border-top: 3px solid #F2F5F7;
588
  }
 
589
  .imagify-bulk-table tbody tr,
590
  .imagify-bulk-table tbody td {
591
  background: #FFF;
@@ -599,6 +677,7 @@ body[class*="_imagify-ngg-bulk-optimization"] .media-item .progress .bar {
599
  height: 8px;
600
  padding: 0;
601
  }
 
602
  .imagify-bulk-table .imagify-no-uploaded-yet td {
603
  height: 200px;
604
  font-size: 17px;
@@ -616,6 +695,7 @@ body[class*="_imagify-ngg-bulk-optimization"] .media-item .progress .bar {
616
  .imagify-selector {
617
  position: relative;
618
  }
 
619
  .imagify-selector-list {
620
  background: #FFF;
621
  border: 1px solid #F4F7F9;
@@ -625,26 +705,33 @@ body[class*="_imagify-ngg-bulk-optimization"] .media-item .progress .bar {
625
  text-transform: uppercase;
626
  letter-spacing: .02em;
627
  }
 
628
  .imagify-selector-list li:first-child label {
629
  border-radius: 3px 3px 0 0;
630
  }
 
631
  .imagify-selector-list li:last-child label {
632
  border-radius: 0 0 3px 3px;
633
  }
 
634
  .imagify-selector-list li {
635
  margin: 0;
636
  }
 
637
  .imagify-selector-list li + li {
638
  border-top: 1px solid #F4F7F9;
639
  }
 
640
  .imagify-selector-list svg {
641
  margin-right: 5px;
642
  }
 
643
  .imagify-selector-list input:checked + label,
644
  .imagify-selector-list .imagify-selector-current-value label {
645
  background: #343A49;
646
  color: #FFF;
647
  }
 
648
  .imagify-selector-list input:checked + label:hover,
649
  .imagify-selector-list .imagify-selector-current-value label:hover,
650
  .imagify-selector-list label:hover,
@@ -653,6 +740,7 @@ body[class*="_imagify-ngg-bulk-optimization"] .media-item .progress .bar {
653
  background: #40B1D0;
654
  color: #F4F7F9;
655
  }
 
656
  .imagify-selector-list input:checked + label:hover polygon,
657
  .imagify-selector-list .imagify-selector-current-value label:hover polygon,
658
  .imagify-selector-list label:hover polygon,
@@ -660,6 +748,7 @@ body[class*="_imagify-ngg-bulk-optimization"] .media-item .progress .bar {
660
  .imagify-selector-list .imagify-selector-current-value input:focus + label polygon {
661
  fill: #FFF;
662
  }
 
663
  .imagify-selector-list input:checked + label:hover polygon[fill="#CCD1D6"],
664
  .imagify-selector-list .imagify-selector-current-value label:hover polygon[fill="#CCD1D6"],
665
  .imagify-selector-list label:hover polygon[fill="#CCD1D6"],
@@ -667,14 +756,17 @@ body[class*="_imagify-ngg-bulk-optimization"] .media-item .progress .bar {
667
  .imagify-selector-list .imagify-selector-current-value input:focus + label polygon[fill="#CCD1D6"] {
668
  fill: #3694AE;
669
  }
 
670
  .imagify-selector-list li label {
671
  display: block;
672
  padding: 10px;
673
  transition: all .275s;
674
  }
 
675
  .imagify-selector-list polygon {
676
  transition: all .275s;
677
  }
 
678
  .imagify-selector-list {
679
  position: absolute;
680
  top: 0;
@@ -683,20 +775,24 @@ body[class*="_imagify-ngg-bulk-optimization"] .media-item .progress .bar {
683
  transition: all .275s;
684
  transform: translateY(-50%);
685
  }
 
686
  .imagify-selector-list[aria-hidden="true"] {
687
  opacity: 0;
688
  visibility: hidden;
689
  transform: translateY(-50%) scale(0);
690
  }
 
691
  .imagify-selector-list[aria-hidden="false"] {
692
  opacity: 1;
693
  visibility: visible;
694
  transform: translateY(-50%) scale(1);
695
  }
 
696
  .button .imagify-selector-current-value-info {
697
  position: relative;
698
  padding-right: 20px;
699
  }
 
700
  .button .imagify-selector-current-value-info:after {
701
  content: '';
702
  position: absolute;
@@ -708,18 +804,19 @@ body[class*="_imagify-ngg-bulk-optimization"] .media-item .progress .bar {
708
  border-right: 6px solid transparent;
709
  }
710
 
711
-
712
  /* Complete row / success */
713
  .imagify-row-complete {
714
  padding: 35px 20px;
715
  margin-top: 2em;
716
  background: #8BC34A;
717
  color: #FFF;
718
- text-shadow: 0 0 2px rgba(0,0,0,.1);
719
  }
 
720
  .imagify-row-complete .imagify-ac-chart {
721
  margin-top: 3px;
722
  }
 
723
  .imagify-row-complete.imagify-row-complete p {
724
  color: #FFF;
725
  margin: 0;
@@ -727,17 +824,17 @@ body[class*="_imagify-ngg-bulk-optimization"] .media-item .progress .bar {
727
 
728
  @-webkit-keyframes congrate {
729
  0% {
730
- opacity: 0;
731
  -webkit-transform: scale(1);
732
  }
733
  50% {
734
  -webkit-transform: scale(1.05);
735
  opacity: 1;
736
  }
737
- 100% {
738
  -webkit-transform: scale(1);
739
  opacity: 1;
740
- }
741
  }
742
 
743
  @keyframes congrate {
@@ -755,7 +852,6 @@ body[class*="_imagify-ngg-bulk-optimization"] .media-item .progress .bar {
755
  }
756
  }
757
 
758
-
759
  .imagify-row-complete.done {
760
  -webkit-animation: congrate 500ms ease-in-out;
761
  animation: congrate 500ms ease-in-out;
@@ -764,26 +860,32 @@ body[class*="_imagify-ngg-bulk-optimization"] .media-item .progress .bar {
764
  .imagify-all-complete {
765
  margin: 1.5em 0;
766
  }
 
767
  .imagify-all-complete > div {
768
  display: inline-block;
769
  vertical-align: middle;
770
  }
 
771
  .imagify-ac-report {
772
  min-width: 310px;
773
  margin-right: 20px;
774
  }
 
775
  .imagify-ac-chart {
776
  width: 46px;
777
  height: 46px;
778
  float: left;
779
  margin: 0 20px 0 10px;
780
  }
 
781
  .imagify-ac-report-text {
782
  overflow: hidden;
783
  }
 
784
  .imagify-ac-report-text p {
785
  line-height: 1.3;
786
  }
 
787
  .imagify-ac-rt-big {
788
  font-weight: bold;
789
  font-size: 24px;
@@ -791,28 +893,35 @@ body[class*="_imagify-ngg-bulk-optimization"] .media-item .progress .bar {
791
  word-spacing: 0.15em;
792
  text-transform: uppercase;
793
  }
 
794
  .imagify-ac-share {
795
  text-align: right;
796
  }
 
797
  .imagify-ac-share-content {
798
  display: inline-block;
799
  padding: 10px 15px;
800
- background: rgba(255,255,255,.2);
801
  }
 
802
  .imagify-ac-share-content > * {
803
  display: inline-block;
804
  vertical-align: middle;
805
  }
 
806
  .imagify-bulk-table .imagify-ac-share-content p {
807
  margin-right: 5px;
808
  }
 
809
  .imagify-share-networks,
810
  .imagify-share-networks li {
811
  margin: 0;
812
  }
 
813
  .imagify-share-networks li {
814
  display: inline-block;
815
  }
 
816
  .imagify-share-networks a {
817
  display: inline-block;
818
  vertical-align: -7px;
@@ -825,9 +934,11 @@ body[class*="_imagify-ngg-bulk-optimization"] .media-item .progress .bar {
825
  .imagify-cell-checkbox {
826
  width: 35px;
827
  }
 
828
  .imagify-cell-checkbox p {
829
  margin: 0;
830
  }
 
831
  .imagify-cell-checkbox-loader {
832
  display: block;
833
  width: 27px;
@@ -835,6 +946,7 @@ body[class*="_imagify-ngg-bulk-optimization"] .media-item .progress .bar {
835
  line-height: 0;
836
  animation: loading 4s infinite linear;
837
  }
 
838
  @keyframes loading {
839
  0% {
840
  transform: rotate(0);
@@ -843,10 +955,12 @@ body[class*="_imagify-ngg-bulk-optimization"] .media-item .progress .bar {
843
  transform: rotate(360deg);
844
  }
845
  }
 
846
  .imagify-cell-checkbox-loader.hidden {
847
  display: none;
848
  animation: none;
849
  }
 
850
  .imagify-cell-title label,
851
  .imagify-cell-label {
852
  font-size: 14px;
@@ -854,55 +968,68 @@ body[class*="_imagify-ngg-bulk-optimization"] .media-item .progress .bar {
854
  letter-spacing: .02em;
855
  font-weight: bold;
856
  }
 
857
  .imagify-cell-label {
858
  margin-right: 10px;
859
  }
 
860
  .imagify-cell-value {
861
  font-size: 12px;
862
  font-weight: 500;
863
  color: #7A8996;
864
  }
 
865
  td.imagify-cell-title {
866
  padding-left: 0;
867
  }
 
868
  .imagify-cell-title label,
869
  .imagify-cell-original-size .imagify-cell-label {
870
  color: #1F2332;
871
  }
 
872
  .imagify-cell-optimized-size,
873
  .imagify-cell-original-size {
874
  font-weight: 500;
875
  color: #7A8996;
876
  font-size: 12px;
877
  }
 
878
  .imagify-cell-optimized-size .imagify-cell-label {
879
  color: #338EA6;
880
  }
 
881
  .imagify-cell-count-optimized {
882
  font-size: 14px;
883
  font-weight: bold;
884
  color: #338EA6;
885
  }
 
886
  .imagify-cell-count-errors {
887
  color: #C51162;
888
  font-weight: bold;
889
  font-size: 14px;
890
  }
 
891
  .imagify-cell-count-errors a {
892
  margin-left: 5px;
893
  color: #7A8996;
894
  font-weight: normal;
895
  font-size: 12px;
896
  }
 
897
  .imagify-cell-filename {
898
  max-width: 200px;
899
  }
 
900
  .imagify-cell-status {
901
  max-width: 145px;
902
  }
 
903
  .imagify-cell-status .dashicons-warning {
904
  margin-right: 2px;
905
  }
 
906
  .imagify-cell-thumbnails {
907
  max-width: 120px;
908
  }
@@ -912,31 +1039,38 @@ td.imagify-cell-filename {
912
  white-space: nowrap;
913
  overflow: hidden;
914
  }
 
915
  .imagify-bulk-table .imagify-cell-thumbnails {
916
  text-align: center;
917
  }
 
918
  .imagify-cell-percentage,
919
  .imagify-cell-savings {
920
  color: #46B1CE;
921
  font-weight: bold;
922
  }
 
923
  .imagify-bulk-table td.imagify-cell-totaloriginal {
924
  padding-right: 78px;
925
  }
 
926
  .imagify-cell-totaloriginal {
927
  text-align: right;
928
  }
 
929
  .imagify-cell-level {
930
  width: 145px;
931
  }
 
932
  .imagify-selector-button.imagify-selector-button {
933
  border: 1px solid #FFF;
934
  padding: 2px 10px;
935
  }
 
936
  .imagify-selector-button.imagify-selector-button:hover,
937
  .imagify-selector-button.imagify-selector-button:focus {
938
  border-color: #EEE;
939
- box-shadow: 0 4px 8px rgba(0,0,0,.1);
940
  }
941
 
942
  .imagiuploaded,
@@ -947,9 +1081,11 @@ td.imagify-cell-filename {
947
  color: #626E7B;
948
  font-weight: 500;
949
  }
 
950
  .imagifilename {
951
  font-size: 12px;
952
  }
 
953
  .imagiuploaded {
954
  width: 33px;
955
  height: 33px;
@@ -959,6 +1095,7 @@ td.imagify-cell-filename {
959
  background: url(../images/upload-image.png) 0 0 no-repeat;
960
  background-size: cover;
961
  }
 
962
  .imagiuploaded img {
963
  max-width: 100%;
964
  height: auto;
@@ -969,18 +1106,23 @@ td.imagify-cell-filename {
969
  text-transform: uppercase;
970
  font-weight: bold;
971
  }
 
972
  .imagistatus .dashicons {
973
  margin-right: 5px;
974
  }
 
975
  .status-compressing {
976
  color: #46B1CE;
977
  }
 
978
  .status-error {
979
  color: #CE0B24;
980
  }
 
981
  .status-warning {
982
  color: #f5a623;
983
  }
 
984
  .status-complete {
985
  color: #8CC152;
986
  }
@@ -991,9 +1133,9 @@ td.imagify-cell-filename {
991
  }
992
 
993
  .imagify-settings .button-primary.button-primary[disabled] {
994
- color: #4A4A4A!important;
995
- background: #D9E4EB!important;
996
- text-shadow: none!important;
997
  cursor: not-allowed;
998
  }
999
 
@@ -1002,6 +1144,7 @@ td.imagify-cell-filename {
1002
  -webkit-animation: icon-rotate 2.6s infinite linear;
1003
  animation: icon-rotate 2.6s infinite linear;
1004
  }
 
1005
  .imagify-cell-status .dashicons-admin-generic {
1006
  transform-origin: 48.75% 51.75%;
1007
  }
@@ -1016,6 +1159,7 @@ td.imagify-cell-filename {
1016
  transform: rotate(360deg);
1017
  }
1018
  }
 
1019
  @keyframes icon-rotate {
1020
  from {
1021
  transform: rotate(0deg);
@@ -1035,6 +1179,7 @@ td.imagify-cell-filename {
1035
  max-width: none;
1036
  float: none;
1037
  }
 
1038
  .imagify-columns .col-overview.col-overview {
1039
  float: none;
1040
  width: auto;
@@ -1054,25 +1199,31 @@ td.imagify-cell-filename {
1054
  .imagify-bulk-table-container tr {
1055
  text-align: left;
1056
  }
 
1057
  .imagify-bulk-table-container tbody,
1058
  .imagify-bulk-table-container tbody tr,
1059
  .imagify-bulk-table-container tbody td {
1060
  display: block;
1061
  }
 
1062
  .imagify-bulk-table-container tbody td {
1063
  padding: 20px;
1064
  }
 
1065
  .imagify-cell-checkbox,
1066
  .imagify-cell-title {
1067
  float: left;
1068
  }
 
1069
  .imagify-cell-checkbox {
1070
  width: 26px;
1071
  }
 
1072
  .imagify-bulk-table-container .imagify-cell-title {
1073
  padding-left: 10px;
1074
  width: calc(100% - 96px);
1075
  }
 
1076
  .imagify-cell-title:after,
1077
  .imagify-cell-count-optimized:before {
1078
  content: '';
@@ -1080,6 +1231,7 @@ td.imagify-cell-filename {
1080
  clear: both;
1081
  width: 100%;
1082
  }
 
1083
  .imagify-cell-count-optimized {
1084
  clear: both;
1085
  }
@@ -1097,6 +1249,7 @@ td.imagify-cell-filename {
1097
  .imagify-settings .imagify-title {
1098
  display: block;
1099
  }
 
1100
  .imagify-settings .imagify-documentation-link-box {
1101
  display: inline-flex;
1102
  }
@@ -1105,3 +1258,65 @@ td.imagify-cell-filename {
1105
  .hidden {
1106
  display: none;
1107
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
26
  .imagify-doughnut-legend li span {
27
  display: block;
28
  position: absolute;
29
+ left: 0;
30
+ top: 0;
31
  width: 25px;
32
  height: 25px;
33
  border-radius: 50%;
48
  float: left;
49
  margin-right: 20px;
50
  }
51
+
52
  .imagify-chart-percent {
53
  position: absolute;
54
+ left: 0;
55
+ right: 0;
56
  top: 50%;
57
  margin-top: -.5em;
58
  line-height: 1;
61
  font-weight: bold;
62
  color: #46B1CE;
63
  }
64
+
65
  .imagify-chart-percent span {
66
  font-size: 20px;
67
  vertical-align: super;
104
  body[class*="_imagify-ngg-bulk-optimization"] .media-item .percent {
105
  text-align: right;
106
  }
107
+
108
  .media_page_imagify-bulk-optimization .media-item .progress .bar,
109
  body[class*="_imagify-ngg-bulk-optimization"] .media-item .progress .bar {
110
  position: relative;
126
  width: calc(100% - 465px);
127
  padding-left: 20px;
128
  }
129
+
130
  .imagify-columns .col-statistics.col-statistics {
131
  width: 60%;
132
  }
133
+
134
  .imagify-columns .col-chart.col-chart {
135
  width: 40%;
136
  }
147
  float: none;
148
  margin-right: 0;
149
  }
150
+
151
  .imagify-doughnut-legend {
152
  margin-top: 18px;
153
  }
154
+
155
  .imagify-global-optim-phrase {
156
  padding-top: 0;
157
  width: auto;
165
  float: none;
166
  padding: 0;
167
  }
168
+
169
  .imagify-columns .col-chart.col-chart {
170
  margin-top: 3em;
171
  }
176
  width: 1px;
177
  background: rgba(255, 255, 255, .2);
178
  }
179
+
180
  .base-transparent {
181
  background: transparent;
182
  }
186
  box-sizing: border-box;
187
  padding-right: 4.5em;
188
  }
189
+
190
  .right-outside-number .imagify-barnb {
191
  display: block;
192
  margin-right: -5.25em;
203
  color: #000;
204
  font-weight: bold;
205
  }
206
+
207
  .imagify-h2-like .dashicons,
208
  .imagify-h2-like .dashicons:before {
209
  font-size: 38px;
213
  vertical-align: -5px;
214
  color: #40B1D0;
215
  }
216
+
217
  .imagify-info-block {
218
  position: relative;
219
  padding: 10px;
222
  border-radius: 4px;
223
  line-height: 1.6;
224
  }
225
+
226
  .imagify-list-infos {
227
  margin: 0;
228
  padding: 0;
229
  }
230
+
231
  .imagify-list-infos li {
232
  display: flex;
233
  align-items: center;
237
  line-height: 1.5;
238
  color: #626E7B;
239
  }
240
+
241
  .imagify-list-infos li:first-child {
242
  padding-top: 5px;
243
  }
244
+
245
  .imagify-list-infos li:last-child {
246
  padding-bottom: 5px;
247
  }
248
+
249
  .imagify-list-infos li + li {
250
  border-top: 1px solid #E9EFF2;
251
  }
254
  flex-grow: 0;
255
  flex-basis: 50px;
256
  }
257
+
258
  .imagify-info-icon + span {
259
  padding-left: 20px;
260
  }
271
  background: #FFF;
272
  color: #4A4A4A;
273
  }
274
+
275
  .imagify-bulk p,
276
  .imagify-bulk li,
277
  .imagify-bulk h3 {
278
  color: #4A4A4A;
279
  }
280
+
281
  .imagify-bulk .imagify-settings-section h3 {
282
  margin-bottom: 2em;
283
  }
287
  display: flex;
288
  align-items: center;
289
  }
290
+
291
  .imagify-account-info-col p.imagify-meteo-title {
292
  margin: 0;
293
  font-size: 24px;
294
  font-weight: bold;
295
  color: #FFF;
296
  }
297
+
298
  .imagify-account-info-col .imagify-options-title > a {
299
  flex-basis: 100px;
300
  margin-left: auto;
302
  text-decoration: underline;
303
  font-size: 12px;
304
  }
305
+
306
  .imagify-account-info-col .imagify-meteo-title .dashicons,
307
  .imagify-account-info-col .imagify-meteo-title .dashicons:before {
308
  font-size: 38px;
311
  margin-right: 4px;
312
  color: #40B1D0;
313
  }
314
+
315
  .imagify-col-content {
316
  background: #F4F7F9;
317
  border-left: 1px solid #ddd;
318
  border-right: 1px solid #ddd;
319
  }
320
+
321
  .imagify-col-content .imagify-block-secondary {
322
  margin-left: -1px;
323
  margin-right: -1px;
324
  }
325
+
326
  .imagify-col-content .imagify-space-left {
327
  margin: 15px 30px 15px 0;
328
  }
329
+
330
  .imagify-col-content .imagify-space-left p {
331
  margin: 0 0 10px 0;
332
  font-size: 19px;
333
  font-weight: 500;
334
  color: #343A49;
335
  }
336
+
337
  .imagify-col-content .imagify-meteo-icon {
338
  height: 64px;
339
  margin: 15px 15px 15px 20px;
340
  }
341
+
342
  .imagify-col-content .imagify-section-title + p {
343
  margin-top: 10px;
344
  }
353
  top: 100%;
354
  left: 0;
355
  }
356
+
357
  .imagify-tooltips .icon-round {
358
  float: left;
359
  display: inline-block;
369
  text-align: center;
370
  border-radius: 50%;
371
  }
372
+
373
  .imagify-tooltips .tooltip-content {
374
  display: block;
375
  position: relative;
380
  font-size: 10px;
381
  border-radius: 3px;
382
  }
383
+
384
  .imagify-tooltips.right .tooltip-content {
385
  margin-left: 12px;
386
  }
387
+
388
  .imagify-tooltips.bottom .tooltip-content {
389
  margin-top: 4px;
390
  }
391
+
392
  .imagify-inline-options label .tooltip-content {
393
  position: absolute;
394
+ left: 0;
395
+ right: 0;
396
  top: 100%;
397
  text-transform: none;
398
  font-size: 10px;
399
  letter-spacing: 0;
400
  text-align: center;
401
  }
402
+
403
  .imagify-tooltips .tooltip-content:after {
404
  content: "";
405
  position: absolute;
406
  }
407
+
408
  .imagify-tooltips.right .tooltip-content:after {
409
+ top: 16px;
410
+ left: -6px;
411
  border-right: 8px solid #2e3242;
412
  border-top: 6px solid transparent;
413
  border-bottom: 6px solid transparent;
414
  }
415
+
416
  .imagify-tooltips.bottom .tooltip-content:after {
417
+ top: -5px;
418
+ left: 50%;
419
  margin-left: -3px;
420
  border-bottom: 6px solid #2e3242;
421
  border-left: 6px solid transparent;
422
  border-right: 6px solid transparent;
423
  }
424
+
425
  .imagify-space-tooltips .tooltip-content {
426
  max-width: 280px;
427
  margin-top: 20px;
431
  background: #40B1D0;
432
  box-shadow: 0 3px 0 #338EA6;
433
  }
434
+
435
  .imagify-space-tooltips .tooltip-content:after {
436
  top: -14px;
437
  left: 50%;
441
  border-left: 15px solid transparent;
442
  border-right: 15px solid transparent;
443
  }
444
+
445
  .tooltip-content.tooltip-table {
446
  display: table;
447
  width: 100%;
448
  }
449
+
450
  .tooltip-content.tooltip-table > * {
451
  display: table-cell;
452
  vertical-align: middle;
453
  }
454
+
455
  .tooltip-content .cell-icon {
456
  width: 28px;
457
  }
458
+
459
  .tooltip-content .cell-icon .icon {
460
  margin-bottom: 0;
461
  }
462
+
463
  .tooltip-content .cell-text {
464
  padding: 5px 10px 5px 0;
465
  line-height: 1.3;
466
  }
467
+
468
  .tooltip-content .cell-sep {
469
  width: 1px;
470
  background: rgba(255, 255, 255, .4);
471
  }
472
+
473
  .tooltip-content .cell-cta {
474
  padding-left: 10px;
475
  }
476
+
477
  .tooltip-content .cell-cta a {
478
  display: block;
479
  color: #FFF;
487
  margin-bottom: 1.35em;
488
  overflow: hidden;
489
  }
490
+
491
  .imagify-number-you-optimized .number {
492
  display: table-cell;
493
  padding-right: 15px;
498
  white-space: nowrap;
499
  color: #000;
500
  }
501
+
502
  .imagify-number-you-optimized [id="imagify-total-optimized-attachments-pct"] {
503
  color: #40B1D0;
504
  }
505
+
506
  .imagify-number-you-optimized .text {
507
  display: table-cell;
508
  vertical-align: middle;
510
  font-size: 12px;
511
  color: #626E7B;
512
  }
513
+
514
  .imagify-number-you-optimized > p {
515
  display: table;
516
  }
519
  .imagify-bars {
520
  padding-right: 15px;
521
  }
522
+
523
  .imagify-bars p {
524
  font-size: 12px;
525
  margin-bottom: 5px;
526
  }
527
+
528
  .imagify-bars + .imagify-number-you-optimized {
529
  border-bottom: 0;
530
  padding-top: 0.85em;
531
  }
532
+
533
  .imagify-bars + .imagify-number-you-optimized p {
534
  color: #46b1ce;
535
  }
545
  background: #343A49;
546
  color: #FFF;
547
  }
548
+
549
  .imagify-newbie {
550
  margin-top: 4em;
551
  position: relative;
552
  overflow: visible;
553
  }
554
+
555
  .imagify-newbie .imagify-new-feature.imagify-new-feature {
556
  position: absolute;
557
  top: 0;
566
  color: #FFF;
567
  background: #8BC34A;
568
  }
569
+
570
  .imagify-newbie .imagify-table-header {
571
  padding: 30px 25px;
572
  border: 2px solid #8BC34A;
573
  background: #F3F9EC;
574
  }
575
+
576
  .imagify-th-titles .dashicons,
577
  .imagify-th-titles .dashicons:before {
578
  width: 38px;
581
  font-size: 38px;
582
  color: #40B1D0;
583
  }
584
+
585
  .imagify-newbie .imagify-th-titles .dashicons:before {
586
  color: #8BC34A;
587
  }
588
+
589
  .imagify-th-title.imagify-th-title.imagify-th-title {
590
  margin: 0;
591
  font-size: 24px;
592
  font-weight: 500;
593
  color: #FFF;
594
  }
595
+
596
  .imagify-newbie .imagify-th-title.imagify-th-title {
597
  color: #343A49;
598
  }
599
+
600
  .imagify-th-subtitle.imagify-th-subtitle.imagify-th-subtitle {
601
  margin: 0 0 5px;
602
  font-size: 14px;
603
  color: #7A8996;
604
  font-weight: 500;
605
  }
606
+
607
  .imagify-th-action .imagify-button-clean {
608
  font-size: 12px;
609
  color: #7A8996;
610
  }
611
+
612
  .imagify-th-action .imagify-is-active {
613
  color: #FFF;
614
  }
615
+
616
  .imagify-th-action .button:hover,
617
  .imagify-th-action .button:focus {
618
  color: #FFF;
623
  border-spacing: 0;
624
  border-collapse: collapse;
625
  }
626
+
627
  .imagify-bulk-table td {
628
  padding: 20px;
629
  }
630
+
631
  .imagify-bulk-table-details {
632
  border-bottom: 2px solid #E5EBEF;
633
  }
634
+
635
  .imagify-bulk-table-details thead tr,
636
  .imagify-bulk-table-details thead th {
637
  background: #4A5362;
638
  }
639
+
640
  .imagify-bulk-table-details thead th {
641
  padding: 12px 20px;
642
  text-align: left;
644
  color: #E5EBEF;
645
  font-size: 12px;
646
  }
647
+
648
  .imagify-bulk-table-details tbody tr:nth-child(odd) td {
649
  background: #F2F5F7;
650
  }
651
+
652
  .imagify-bulk-table-content {
653
  border: 1px solid #D3D3D3;
654
  border-top: 0;
655
  }
656
+
657
  .imagify-bulk-table-footer {
658
  padding: 20px;
659
  color: #626E7B;
663
  .imagify-bulk-table tbody tr + tr {
664
  border-top: 3px solid #F2F5F7;
665
  }
666
+
667
  .imagify-bulk-table tbody tr,
668
  .imagify-bulk-table tbody td {
669
  background: #FFF;
677
  height: 8px;
678
  padding: 0;
679
  }
680
+
681
  .imagify-bulk-table .imagify-no-uploaded-yet td {
682
  height: 200px;
683
  font-size: 17px;
695
  .imagify-selector {
696
  position: relative;
697
  }
698
+
699
  .imagify-selector-list {
700
  background: #FFF;
701
  border: 1px solid #F4F7F9;
705
  text-transform: uppercase;
706
  letter-spacing: .02em;
707
  }
708
+
709
  .imagify-selector-list li:first-child label {
710
  border-radius: 3px 3px 0 0;
711
  }
712
+
713
  .imagify-selector-list li:last-child label {
714
  border-radius: 0 0 3px 3px;
715
  }
716
+
717
  .imagify-selector-list li {
718
  margin: 0;
719
  }
720
+
721
  .imagify-selector-list li + li {
722
  border-top: 1px solid #F4F7F9;
723
  }
724
+
725
  .imagify-selector-list svg {
726
  margin-right: 5px;
727
  }
728
+
729
  .imagify-selector-list input:checked + label,
730
  .imagify-selector-list .imagify-selector-current-value label {
731
  background: #343A49;
732
  color: #FFF;
733
  }
734
+
735
  .imagify-selector-list input:checked + label:hover,
736
  .imagify-selector-list .imagify-selector-current-value label:hover,
737
  .imagify-selector-list label:hover,
740
  background: #40B1D0;
741
  color: #F4F7F9;
742
  }
743
+
744
  .imagify-selector-list input:checked + label:hover polygon,
745
  .imagify-selector-list .imagify-selector-current-value label:hover polygon,
746
  .imagify-selector-list label:hover polygon,
748
  .imagify-selector-list .imagify-selector-current-value input:focus + label polygon {
749
  fill: #FFF;
750
  }
751
+
752
  .imagify-selector-list input:checked + label:hover polygon[fill="#CCD1D6"],
753
  .imagify-selector-list .imagify-selector-current-value label:hover polygon[fill="#CCD1D6"],
754
  .imagify-selector-list label:hover polygon[fill="#CCD1D6"],
756
  .imagify-selector-list .imagify-selector-current-value input:focus + label polygon[fill="#CCD1D6"] {
757
  fill: #3694AE;
758
  }
759
+
760
  .imagify-selector-list li label {
761
  display: block;
762
  padding: 10px;
763
  transition: all .275s;
764
  }
765
+
766
  .imagify-selector-list polygon {
767
  transition: all .275s;
768
  }
769
+
770
  .imagify-selector-list {
771
  position: absolute;
772
  top: 0;
775
  transition: all .275s;
776
  transform: translateY(-50%);
777
  }
778
+
779
  .imagify-selector-list[aria-hidden="true"] {
780
  opacity: 0;
781
  visibility: hidden;
782
  transform: translateY(-50%) scale(0);
783
  }
784
+
785
  .imagify-selector-list[aria-hidden="false"] {
786
  opacity: 1;
787
  visibility: visible;
788
  transform: translateY(-50%) scale(1);
789
  }
790
+
791
  .button .imagify-selector-current-value-info {
792
  position: relative;
793
  padding-right: 20px;
794
  }
795
+
796
  .button .imagify-selector-current-value-info:after {
797
  content: '';
798
  position: absolute;
804
  border-right: 6px solid transparent;
805
  }
806
 
 
807
  /* Complete row / success */
808
  .imagify-row-complete {
809
  padding: 35px 20px;
810
  margin-top: 2em;
811
  background: #8BC34A;
812
  color: #FFF;
813
+ text-shadow: 0 0 2px rgba(0, 0, 0, .1);
814
  }
815
+
816
  .imagify-row-complete .imagify-ac-chart {
817
  margin-top: 3px;
818
  }
819
+
820
  .imagify-row-complete.imagify-row-complete p {
821
  color: #FFF;
822
  margin: 0;
824
 
825
  @-webkit-keyframes congrate {
826
  0% {
827
+ opacity: 0;
828
  -webkit-transform: scale(1);
829
  }
830
  50% {
831
  -webkit-transform: scale(1.05);
832
  opacity: 1;
833
  }
834
+ 100% {
835
  -webkit-transform: scale(1);
836
  opacity: 1;
837
+ }
838
  }
839
 
840
  @keyframes congrate {
852
  }
853
  }
854
 
 
855
  .imagify-row-complete.done {
856
  -webkit-animation: congrate 500ms ease-in-out;
857
  animation: congrate 500ms ease-in-out;
860
  .imagify-all-complete {
861
  margin: 1.5em 0;
862
  }
863
+
864
  .imagify-all-complete > div {
865
  display: inline-block;
866
  vertical-align: middle;
867
  }
868
+
869
  .imagify-ac-report {
870
  min-width: 310px;
871
  margin-right: 20px;
872
  }
873
+
874
  .imagify-ac-chart {
875
  width: 46px;
876
  height: 46px;
877
  float: left;
878
  margin: 0 20px 0 10px;
879
  }
880
+
881
  .imagify-ac-report-text {
882
  overflow: hidden;
883
  }
884
+
885
  .imagify-ac-report-text p {
886
  line-height: 1.3;
887
  }
888
+
889
  .imagify-ac-rt-big {
890
  font-weight: bold;
891
  font-size: 24px;
893
  word-spacing: 0.15em;
894
  text-transform: uppercase;
895
  }
896
+
897
  .imagify-ac-share {
898
  text-align: right;
899
  }
900
+
901
  .imagify-ac-share-content {
902
  display: inline-block;
903
  padding: 10px 15px;
904
+ background: rgba(255, 255, 255, .2);
905
  }
906
+
907
  .imagify-ac-share-content > * {
908
  display: inline-block;
909
  vertical-align: middle;
910
  }
911
+
912
  .imagify-bulk-table .imagify-ac-share-content p {
913
  margin-right: 5px;
914
  }
915
+
916
  .imagify-share-networks,
917
  .imagify-share-networks li {
918
  margin: 0;
919
  }
920
+
921
  .imagify-share-networks li {
922
  display: inline-block;
923
  }
924
+
925
  .imagify-share-networks a {
926
  display: inline-block;
927
  vertical-align: -7px;
934
  .imagify-cell-checkbox {
935
  width: 35px;
936
  }
937
+
938
  .imagify-cell-checkbox p {
939
  margin: 0;
940
  }
941
+
942
  .imagify-cell-checkbox-loader {
943
  display: block;
944
  width: 27px;
946
  line-height: 0;
947
  animation: loading 4s infinite linear;
948
  }
949
+
950
  @keyframes loading {
951
  0% {
952
  transform: rotate(0);
955
  transform: rotate(360deg);
956
  }
957
  }
958
+
959
  .imagify-cell-checkbox-loader.hidden {
960
  display: none;
961
  animation: none;
962
  }
963
+
964
  .imagify-cell-title label,
965
  .imagify-cell-label {
966
  font-size: 14px;
968
  letter-spacing: .02em;
969
  font-weight: bold;
970
  }
971
+
972
  .imagify-cell-label {
973
  margin-right: 10px;
974
  }
975
+
976
  .imagify-cell-value {
977
  font-size: 12px;
978
  font-weight: 500;
979
  color: #7A8996;
980
  }
981
+
982
  td.imagify-cell-title {
983
  padding-left: 0;
984
  }
985
+
986
  .imagify-cell-title label,
987
  .imagify-cell-original-size .imagify-cell-label {
988
  color: #1F2332;
989
  }
990
+
991
  .imagify-cell-optimized-size,
992
  .imagify-cell-original-size {
993
  font-weight: 500;
994
  color: #7A8996;
995
  font-size: 12px;
996
  }
997
+
998
  .imagify-cell-optimized-size .imagify-cell-label {
999
  color: #338EA6;
1000
  }
1001
+
1002
  .imagify-cell-count-optimized {
1003
  font-size: 14px;
1004
  font-weight: bold;
1005
  color: #338EA6;
1006
  }
1007
+
1008
  .imagify-cell-count-errors {
1009
  color: #C51162;
1010
  font-weight: bold;
1011
  font-size: 14px;
1012
  }
1013
+
1014
  .imagify-cell-count-errors a {
1015
  margin-left: 5px;
1016
  color: #7A8996;
1017
  font-weight: normal;
1018
  font-size: 12px;
1019
  }
1020
+
1021
  .imagify-cell-filename {
1022
  max-width: 200px;
1023
  }
1024
+
1025
  .imagify-cell-status {
1026
  max-width: 145px;
1027
  }
1028
+
1029
  .imagify-cell-status .dashicons-warning {
1030
  margin-right: 2px;
1031
  }
1032
+
1033
  .imagify-cell-thumbnails {
1034
  max-width: 120px;
1035
  }
1039
  white-space: nowrap;
1040
  overflow: hidden;
1041
  }
1042
+
1043
  .imagify-bulk-table .imagify-cell-thumbnails {
1044
  text-align: center;
1045
  }
1046
+
1047
  .imagify-cell-percentage,
1048
  .imagify-cell-savings {
1049
  color: #46B1CE;
1050
  font-weight: bold;
1051
  }
1052
+
1053
  .imagify-bulk-table td.imagify-cell-totaloriginal {
1054
  padding-right: 78px;
1055
  }
1056
+
1057
  .imagify-cell-totaloriginal {
1058
  text-align: right;
1059
  }
1060
+
1061
  .imagify-cell-level {
1062
  width: 145px;
1063
  }
1064
+
1065
  .imagify-selector-button.imagify-selector-button {
1066
  border: 1px solid #FFF;
1067
  padding: 2px 10px;
1068
  }
1069
+
1070
  .imagify-selector-button.imagify-selector-button:hover,
1071
  .imagify-selector-button.imagify-selector-button:focus {
1072
  border-color: #EEE;
1073
+ box-shadow: 0 4px 8px rgba(0, 0, 0, .1);
1074
  }
1075
 
1076
  .imagiuploaded,
1081
  color: #626E7B;
1082
  font-weight: 500;
1083
  }
1084
+
1085
  .imagifilename {
1086
  font-size: 12px;
1087
  }
1088
+
1089
  .imagiuploaded {
1090
  width: 33px;
1091
  height: 33px;
1095
  background: url(../images/upload-image.png) 0 0 no-repeat;
1096
  background-size: cover;
1097
  }
1098
+
1099
  .imagiuploaded img {
1100
  max-width: 100%;
1101
  height: auto;
1106
  text-transform: uppercase;
1107
  font-weight: bold;
1108
  }
1109
+
1110
  .imagistatus .dashicons {
1111
  margin-right: 5px;
1112
  }
1113
+
1114
  .status-compressing {
1115
  color: #46B1CE;
1116
  }
1117
+
1118
  .status-error {
1119
  color: #CE0B24;
1120
  }
1121
+
1122
  .status-warning {
1123
  color: #f5a623;
1124
  }
1125
+
1126
  .status-complete {
1127
  color: #8CC152;
1128
  }
1133
  }
1134
 
1135
  .imagify-settings .button-primary.button-primary[disabled] {
1136
+ color: #4A4A4A !important;
1137
+ background: #D9E4EB !important;
1138
+ text-shadow: none !important;
1139
  cursor: not-allowed;
1140
  }
1141
 
1144
  -webkit-animation: icon-rotate 2.6s infinite linear;
1145
  animation: icon-rotate 2.6s infinite linear;
1146
  }
1147
+
1148
  .imagify-cell-status .dashicons-admin-generic {
1149
  transform-origin: 48.75% 51.75%;
1150
  }
1159
  transform: rotate(360deg);
1160
  }
1161
  }
1162
+
1163
  @keyframes icon-rotate {
1164
  from {
1165
  transform: rotate(0deg);
1179
  max-width: none;
1180
  float: none;
1181
  }
1182
+
1183
  .imagify-columns .col-overview.col-overview {
1184
  float: none;
1185
  width: auto;
1199
  .imagify-bulk-table-container tr {
1200
  text-align: left;
1201
  }
1202
+
1203
  .imagify-bulk-table-container tbody,
1204
  .imagify-bulk-table-container tbody tr,
1205
  .imagify-bulk-table-container tbody td {
1206
  display: block;
1207
  }
1208
+
1209
  .imagify-bulk-table-container tbody td {
1210
  padding: 20px;
1211
  }
1212
+
1213
  .imagify-cell-checkbox,
1214
  .imagify-cell-title {
1215
  float: left;
1216
  }
1217
+
1218
  .imagify-cell-checkbox {
1219
  width: 26px;
1220
  }
1221
+
1222
  .imagify-bulk-table-container .imagify-cell-title {
1223
  padding-left: 10px;
1224
  width: calc(100% - 96px);
1225
  }
1226
+
1227
  .imagify-cell-title:after,
1228
  .imagify-cell-count-optimized:before {
1229
  content: '';
1231
  clear: both;
1232
  width: 100%;
1233
  }
1234
+
1235
  .imagify-cell-count-optimized {
1236
  clear: both;
1237
  }
1249
  .imagify-settings .imagify-title {
1250
  display: block;
1251
  }
1252
+
1253
  .imagify-settings .imagify-documentation-link-box {
1254
  display: inline-flex;
1255
  }
1258
  .hidden {
1259
  display: none;
1260
  }
1261
+
1262
+ @media (max-width: 782px) {
1263
+ .imagify-table-header,
1264
+ .imagify-newbie .imagify-table-header,
1265
+ .imagify-account-info-col .imagify-options-title{
1266
+ -webkit-flex-direction: column;
1267
+ -ms-flex-direction: column;
1268
+ flex-direction: column;
1269
+ -webkit-box-direction: normal;
1270
+ -webkit-box-orient: vertical;
1271
+ -moz-box-direction: normal;
1272
+ -moz-box-orient: vertical;
1273
+ align-items: center;
1274
+ }
1275
+ .imagify-newbie .imagify-th-titles{
1276
+ width: 100%;
1277
+ }
1278
+ .imagify-newbie .imagify-th-title.imagify-th-title {
1279
+ color: #343A49;
1280
+ font-size: 16px;
1281
+ padding-bottom: 20px;
1282
+ }
1283
+ .imagify-newbie .imagify-th-titles .dashicons,
1284
+ .imagify-newbie .imagify-th-titles .dashicons:before{
1285
+ margin: 0px;
1286
+ }
1287
+ .imagify-newbie .imagify-th-action{
1288
+ display: flex;
1289
+ max-width: 100%;
1290
+ }
1291
+ .imagify-newbie .imagify-th-action a{
1292
+ max-width: 100%;
1293
+ font-size: 11px;
1294
+ padding: 11px 12px;
1295
+ }
1296
+ .imagify-columns .col-chart.col-chart{
1297
+ text-align: center;
1298
+ }
1299
+ .imagify-doughnut-legend{
1300
+ margin-top: 18px;
1301
+ width: 60%;
1302
+ margin: 10px auto;
1303
+ }
1304
+ .imagify-account-info-col .imagify-options-title > a{
1305
+ flex-basis: unset;
1306
+ margin: auto;
1307
+ }
1308
+ .imagify-th-title.imagify-th-title.imagify-th-title{
1309
+ font-size: 20px;
1310
+ }
1311
+ .imagify-account-info-col p.imagify-meteo-title{
1312
+ font-size: 20px;
1313
+ }
1314
+ .imagify-bulk-table-container tbody td{
1315
+ padding: 10px;
1316
+ }
1317
+ .imagify-col-content .imagify-space-left{
1318
+ width: auto;
1319
+ margin: 0 0 15px 0;
1320
+ }
1321
+ }
1322
+
assets/css/bulk.min.css CHANGED
@@ -1 +1 @@
1
- #imagify-overview-chart-legend{overflow:hidden}.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:13px;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%}.imagify-global-optim-phrase{width:180px;padding-top:20px;font-size:14px;text-align:center}.imagify-total-percent{color:#46b1ce}.imagify-overview-chart-container{float:left;margin-right:20px}.imagify-chart-percent{position:absolute;left:0;right:0;top:50%;margin-top:-.5em;line-height:1;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 .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%;height:8px;margin:0;overflow:visible;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{position:absolute;top:6px;right:0;text-shadow:none;width:auto;padding:0 5px;line-height:1.85;font-size:14px;font-weight:700;color:#40B1D0}.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{position:relative;width:1px;height:8px;margin-top:0;background:#46B1CE;border-radius:0;-webkit-transition:width .5s;-o-transition:width .5s;transition:width .5s}#imagify-bulk-action{padding:11px 20px}.imagify-columns .col-overview.col-overview{width:calc(100% - 465px);padding-left:20px}.imagify-columns .col-statistics.col-statistics{width:60%}.imagify-columns .col-chart.col-chart{width:40%}@media (max-width:1520px) and (min-width:1381px),(max-width:1086px){.imagify-columns .col-chart.col-chart,.imagify-columns .col-statistics.col-statistics{width:50%}}@media (max-width:1380px) and (min-width:1246px),(max-width:380px){.imagify-overview-chart-container{float:none;margin-right:0}.imagify-doughnut-legend{margin-top:18px}.imagify-global-optim-phrase{padding-top:0;width:auto}}@media (max-width:808px){.imagify-columns .col-chart.col-chart,.imagify-columns .col-statistics.col-statistics{width:auto;float:none;padding:0}.imagify-columns .col-chart.col-chart{margin-top:3em}}.imagify-sep-v{width:1px;background:rgba(255,255,255,.2)}.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:-5.25em;text-align:right;font-weight:700;line-height:.8}.imagify-h2-like{margin:0 0 .5em;padding-bottom:.5em;border-bottom:1px solid #E9EFF2;font-size:24px;color:#000;font-weight:700}.imagify-h2-like .dashicons,.imagify-h2-like .dashicons:before{font-size:38px;height:38px;width:38px;margin-right:12px;vertical-align:-5px;color:#40B1D0}.imagify-info-block{position:relative;padding:10px;padding-left:42px;background:#D9E4EB;border-radius:4px;line-height:1.6}.imagify-list-infos{margin:0;padding:0}.imagify-list-infos li{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;padding:15px 5px;text-align:left;font-size:14px;line-height:1.5;color:#626E7B}.imagify-list-infos li:first-child{padding-top:5px}.imagify-list-infos li:last-child{padding-bottom:5px}.imagify-list-infos li+li{border-top:1px solid #E9EFF2}.imagify-info-icon{-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;-ms-flex-preferred-size:50px;flex-basis:50px}.imagify-info-icon+span{padding-left:20px}.imagify-list-infos a:before{content:'';display:block}.imagify-bulk .imagify-settings-section{border:1px solid #D9D9D9;border-top:0;background:#FFF;color:#4A4A4A}.imagify-bulk h3,.imagify-bulk li,.imagify-bulk p{color:#4A4A4A}.imagify-bulk .imagify-settings-section h3{margin-bottom:2em}.imagify-account-info-col .imagify-options-title{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.imagify-account-info-col p.imagify-meteo-title{margin:0;font-size:24px;font-weight:700;color:#FFF}.imagify-account-info-col .imagify-options-title>a{-ms-flex-preferred-size:100px;flex-basis:100px;margin-left:auto;margin-right:10px;text-decoration:underline;font-size:12px}.imagify-account-info-col .imagify-meteo-title .dashicons,.imagify-account-info-col .imagify-meteo-title .dashicons:before{font-size:38px;width:38px;height:38px;margin-right:4px;color:#40B1D0}.imagify-col-content{background:#F4F7F9;border-left:1px solid #ddd;border-right:1px solid #ddd}.imagify-col-content .imagify-block-secondary{margin-left:-1px;margin-right:-1px}.imagify-col-content .imagify-space-left{margin:15px 30px 15px 0}.imagify-col-content .imagify-space-left p{margin:0 0 10px;font-size:19px;font-weight:500;color:#343A49}.imagify-col-content .imagify-meteo-icon{height:64px;margin:15px 15px 15px 20px}.imagify-col-content .imagify-section-title+p{margin-top:10px}.imagify-account-info-col .imagify-h3-like.imagify-h3-like{color:inherit}.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-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{margin-bottom:1.35em;overflow:hidden}.imagify-number-you-optimized .number{display:table-cell;padding-right:15px;font-size:48px;font-weight:700;line-height:1;vertical-align:middle;white-space:nowrap;color:#000}.imagify-number-you-optimized [id=imagify-total-optimized-attachments-pct]{color:#40B1D0}.imagify-number-you-optimized .text{display:table-cell;vertical-align:middle;overflow:hidden;font-size:12px;color:#626E7B}.imagify-number-you-optimized>p{display:table}.imagify-bars{padding-right:15px}.imagify-bars p{font-size:12px;margin-bottom:5px}.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}.imagify-table-header{-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;padding:15px 25px;background:#343A49;color:#FFF}.imagify-newbie{margin-top:4em;position:relative;overflow:visible}.imagify-newbie .imagify-new-feature.imagify-new-feature{position:absolute;top:0;left:25px;-webkit-transform:translateY(-50%);-ms-transform:translateY(-50%);transform:translateY(-50%);margin:0;padding:8px 20px;font-size:14px;letter-spacing:.02em;text-transform:uppercase;font-weight:700;color:#FFF;background:#8BC34A}.imagify-newbie .imagify-table-header{padding:30px 25px;border:2px solid #8BC34A;background:#F3F9EC}.imagify-th-titles .dashicons,.imagify-th-titles .dashicons:before{width:38px;height:38px;margin-right:20px;font-size:38px;color:#40B1D0}.imagify-newbie .imagify-th-titles .dashicons:before{color:#8BC34A}.imagify-th-title.imagify-th-title.imagify-th-title{margin:0;font-size:24px;font-weight:500;color:#FFF}.imagify-newbie .imagify-th-title.imagify-th-title{color:#343A49}.imagify-th-subtitle.imagify-th-subtitle.imagify-th-subtitle{margin:0 0 5px;font-size:14px;color:#7A8996;font-weight:500}.imagify-th-action .imagify-button-clean{font-size:12px;color:#7A8996}.imagify-th-action .button:focus,.imagify-th-action .button:hover,.imagify-th-action .imagify-is-active{color:#FFF}.imagify-bulk-table table{width:100%;border-spacing:0;border-collapse:collapse}.imagify-bulk-table td{padding:20px}.imagify-bulk-table-details{border-bottom:2px solid #E5EBEF}.imagify-bulk-table-details thead th,.imagify-bulk-table-details thead tr{background:#4A5362}.imagify-bulk-table-details thead th{padding:12px 20px;text-align:left;font-weight:700;color:#E5EBEF;font-size:12px}.imagify-bulk-table-details tbody tr:nth-child(odd) td{background:#F2F5F7}.imagify-bulk-table-content{border:1px solid #D3D3D3;border-top:0}.imagify-bulk-table-footer{padding:20px;color:#626E7B;background:#F2F5F7}.imagify-bulk-table tbody tr+tr{border-top:3px solid #F2F5F7}.imagify-bulk-table tbody td,.imagify-bulk-table tbody tr{background:#FFF}.imagify-bulk-table .imagify-row-progress{display:none;height:8px;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-selector{position:relative}.imagify-selector-list{background:#FFF;border:1px solid #F4F7F9;-webkit-box-shadow:0 6px 12px rgba(0,0,0,.1);box-shadow:0 6px 12px rgba(0,0,0,.1);border-radius:3px;font-weight:700;text-transform:uppercase;letter-spacing:.02em}.imagify-selector-list li:first-child label{border-radius:3px 3px 0 0}.imagify-selector-list li:last-child label{border-radius:0 0 3px 3px}.imagify-selector-list li{margin:0}.imagify-selector-list li+li{border-top:1px solid #F4F7F9}.imagify-selector-list svg{margin-right:5px}.imagify-selector-list .imagify-selector-current-value label,.imagify-selector-list input:checked+label{background:#343A49;color:#FFF}.imagify-selector-list .imagify-selector-current-value input:focus+label,.imagify-selector-list .imagify-selector-current-value label:hover,.imagify-selector-list input:checked+label:hover,.imagify-selector-list input:focus+label,.imagify-selector-list label:hover{background:#40B1D0;color:#F4F7F9}.imagify-selector-list .imagify-selector-current-value input:focus+label polygon,.imagify-selector-list .imagify-selector-current-value label:hover polygon,.imagify-selector-list input:checked+label:hover polygon,.imagify-selector-list input:focus+label polygon,.imagify-selector-list label:hover polygon{fill:#FFF}.imagify-selector-list .imagify-selector-current-value input:focus+label polygon[fill="#CCD1D6"],.imagify-selector-list .imagify-selector-current-value label:hover polygon[fill="#CCD1D6"],.imagify-selector-list input:checked+label:hover polygon[fill="#CCD1D6"],.imagify-selector-list input:focus+label polygon[fill="#CCD1D6"],.imagify-selector-list label:hover polygon[fill="#CCD1D6"]{fill:#3694AE}.imagify-selector-list li label{display:block;padding:10px;-webkit-transition:all .275s;-o-transition:all .275s;transition:all .275s}.imagify-selector-list polygon{-webkit-transition:all .275s;-o-transition:all .275s;transition:all .275s}.imagify-selector-list{position:absolute;top:0;left:0;right:0;-webkit-transition:all .275s;-o-transition:all .275s;transition:all .275s;-webkit-transform:translateY(-50%);-ms-transform:translateY(-50%);transform:translateY(-50%)}.imagify-selector-list[aria-hidden=true]{opacity:0;visibility:hidden;-webkit-transform:translateY(-50%) scale(0);-ms-transform:translateY(-50%) scale(0);transform:translateY(-50%) scale(0)}.imagify-selector-list[aria-hidden=false]{opacity:1;visibility:visible;-webkit-transform:translateY(-50%) scale(1);-ms-transform:translateY(-50%) scale(1);transform:translateY(-50%) scale(1)}.button .imagify-selector-current-value-info{position:relative;padding-right:20px}.button .imagify-selector-current-value-info:after{content:'';position:absolute;right:0;top:50%;margin-top:-3px;border-top:6px solid #7A8996;border-left:6px solid transparent;border-right:6px solid transparent}.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.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;margin-right:20px}.imagify-ac-chart{width:46px;height:46px;float:left;margin:0 20px 0 10px}.imagify-ac-report-text{overflow:hidden}.imagify-ac-report-text p{line-height:1.3}.imagify-ac-rt-big{font-weight:700;font-size:24px;letter-spacing:.15em;word-spacing:.15em;text-transform:uppercase}.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-checkbox{width:35px}.imagify-cell-checkbox p{margin:0}.imagify-cell-checkbox-loader{display:block;width:27px;height:28px;line-height:0;-webkit-animation:loading 4s infinite linear;animation:loading 4s infinite linear}@-webkit-keyframes loading{0%{-webkit-transform:rotate(0);transform:rotate(0)}100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@keyframes loading{0%{-webkit-transform:rotate(0);transform:rotate(0)}100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}.imagify-cell-checkbox-loader.hidden{display:none;-webkit-animation:none;animation:none}.imagify-cell-label,.imagify-cell-title label{font-size:14px;text-transform:uppercase;letter-spacing:.02em;font-weight:700}.imagify-cell-label{margin-right:10px}.imagify-cell-value{font-size:12px;font-weight:500;color:#7A8996}td.imagify-cell-title{padding-left:0}.imagify-cell-original-size .imagify-cell-label,.imagify-cell-title label{color:#1F2332}.imagify-cell-optimized-size,.imagify-cell-original-size{font-weight:500;color:#7A8996;font-size:12px}.imagify-cell-optimized-size .imagify-cell-label{color:#338EA6}.imagify-cell-count-optimized{font-size:14px;font-weight:700;color:#338EA6}.imagify-cell-count-errors{color:#C51162;font-weight:700;font-size:14px}.imagify-cell-count-errors a{margin-left:5px;color:#7A8996;font-weight:400;font-size:12px}.imagify-cell-filename{max-width:200px}.imagify-cell-status{max-width:145px}.imagify-cell-status .dashicons-warning{margin-right:2px}.imagistatus .dashicons,.imagiuploaded{margin-right:5px}.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 .imagify-cell-thumbnails{text-align:center}.imagify-cell-percentage,.imagify-cell-savings{color:#46B1CE;font-weight:700}.imagify-bulk-table td.imagify-cell-totaloriginal{padding-right:78px}.imagify-cell-totaloriginal{text-align:right}.imagify-cell-level{width:145px}.imagify-selector-button.imagify-selector-button{border:1px solid #FFF;padding:2px 10px}.imagify-selector-button.imagify-selector-button:focus,.imagify-selector-button.imagify-selector-button:hover{border-color:#EEE;-webkit-box-shadow:0 4px 8px rgba(0,0,0,.1);box-shadow:0 4px 8px rgba(0,0,0,.1)}.imagifilename,.imagiuploaded{display:inline-block;vertical-align:middle;margin-left:5px;color:#626E7B;font-weight:500}.imagifilename{font-size:12px}.imagiuploaded{width:33px;height:33px;margin-left:-8px;overflow:hidden;background:url(../images/upload-image.png) no-repeat;background-size:cover}.imagiuploaded img{max-width:100%;height:auto}.imagistatus{color:#8CA6B3;text-transform:uppercase;font-weight:700}.status-compressing{color:#46B1CE}.status-error{color:#CE0B24}.status-warning{color:#f5a623}.status-complete{color:#8CC152}.imagify-bulk-submit{padding:15px 0 8px}.imagify-settings .button-primary.button-primary[disabled]{color:#4A4A4A!important;background:#D9E4EB!important;text-shadow:none!important;cursor:not-allowed}.dashicons.rotate{-webkit-animation:icon-rotate 2.6s infinite linear;animation:icon-rotate 2.6s infinite linear}.imagify-cell-status .dashicons-admin-generic{-webkit-transform-origin:48.75% 51.75%;-ms-transform-origin:48.75% 51.75%;transform-origin:48.75% 51.75%}@-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-col.imagify-col.imagify-account-info-col{width:465px}@media (max-width:1245px){.imagify-col.imagify-col.imagify-account-info-col{width:auto;max-width:none;float:none}.imagify-columns .col-overview.col-overview{float:none;width:auto;padding-left:0;padding-right:0}}@media (max-width:1200px){.imagify-settings .imagify-title .imagify-logo{display:none}}@media (max-width:940px){.imagify-bulk-table-container tbody,.imagify-bulk-table-container tr{text-align:left}.imagify-bulk-table-container tbody,.imagify-bulk-table-container tbody td,.imagify-bulk-table-container tbody tr{display:block}.imagify-bulk-table-container tbody td{padding:20px}.imagify-cell-checkbox,.imagify-cell-title{float:left}.imagify-cell-checkbox{width:26px}.imagify-bulk-table-container .imagify-cell-title{padding-left:10px;width:calc(100% - 96px)}.imagify-cell-count-optimized:before,.imagify-cell-title:after{content:'';display:table;clear:both;width:100%}.imagify-cell-count-optimized{clear:both}.imagify-bulk-table-container .imagify-cell-title~td{display:inline-block}.imagify-bulk-table-container td.imagify-cell-level{display:block}}@media (max-width:918px){.imagify-settings .imagify-title{display:block}.imagify-settings .imagify-documentation-link-box{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex}}.hidden{display:none}
1
+ #imagify-overview-chart-legend{overflow:hidden}.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:13px;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%}.imagify-global-optim-phrase{width:180px;padding-top:20px;font-size:14px;text-align:center}.imagify-total-percent{color:#46b1ce}.imagify-overview-chart-container{float:left;margin-right:20px}.imagify-chart-percent{position:absolute;left:0;right:0;top:50%;margin-top:-.5em;line-height:1;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 .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%;height:8px;margin:0;overflow:visible;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{position:absolute;top:6px;right:0;text-shadow:none;width:auto;padding:0 5px;line-height:1.85;font-size:14px;font-weight:700;color:#40B1D0}.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{position:relative;width:1px;height:8px;margin-top:0;background:#46B1CE;border-radius:0;-webkit-transition:width .5s;-o-transition:width .5s;transition:width .5s}#imagify-bulk-action{padding:11px 20px}.imagify-columns .col-overview.col-overview{width:calc(100% - 465px);padding-left:20px}.imagify-columns .col-statistics.col-statistics{width:60%}.imagify-columns .col-chart.col-chart{width:40%}@media (max-width:1520px) and (min-width:1381px),(max-width:1086px){.imagify-columns .col-chart.col-chart,.imagify-columns .col-statistics.col-statistics{width:50%}}@media (max-width:1380px) and (min-width:1246px),(max-width:380px){.imagify-overview-chart-container{float:none;margin-right:0}.imagify-doughnut-legend{margin-top:18px}.imagify-global-optim-phrase{padding-top:0;width:auto}}@media (max-width:808px){.imagify-columns .col-chart.col-chart,.imagify-columns .col-statistics.col-statistics{width:auto;float:none;padding:0}.imagify-columns .col-chart.col-chart{margin-top:3em}}.imagify-sep-v{width:1px;background:rgba(255,255,255,.2)}.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:-5.25em;text-align:right;font-weight:700;line-height:.8}.imagify-h2-like{margin:0 0 .5em;padding-bottom:.5em;border-bottom:1px solid #E9EFF2;font-size:24px;color:#000;font-weight:700}.imagify-h2-like .dashicons,.imagify-h2-like .dashicons:before{font-size:38px;height:38px;width:38px;margin-right:12px;vertical-align:-5px;color:#40B1D0}.imagify-info-block{position:relative;padding:10px;padding-left:42px;background:#D9E4EB;border-radius:4px;line-height:1.6}.imagify-list-infos{margin:0;padding:0}.imagify-list-infos li{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;padding:15px 5px;text-align:left;font-size:14px;line-height:1.5;color:#626E7B}.imagify-list-infos li:first-child{padding-top:5px}.imagify-list-infos li:last-child{padding-bottom:5px}.imagify-list-infos li+li{border-top:1px solid #E9EFF2}.imagify-info-icon{-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;-ms-flex-preferred-size:50px;flex-basis:50px}.imagify-info-icon+span{padding-left:20px}.imagify-list-infos a:before{content:'';display:block}.imagify-bulk .imagify-settings-section{border:1px solid #D9D9D9;border-top:0;background:#FFF;color:#4A4A4A}.imagify-bulk h3,.imagify-bulk li,.imagify-bulk p{color:#4A4A4A}.imagify-bulk .imagify-settings-section h3{margin-bottom:2em}.imagify-account-info-col .imagify-options-title{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.imagify-account-info-col p.imagify-meteo-title{margin:0;font-size:24px;font-weight:700;color:#FFF}.imagify-account-info-col .imagify-options-title>a{-ms-flex-preferred-size:100px;flex-basis:100px;margin-left:auto;margin-right:10px;text-decoration:underline;font-size:12px}.imagify-account-info-col .imagify-meteo-title .dashicons,.imagify-account-info-col .imagify-meteo-title .dashicons:before{font-size:38px;width:38px;height:38px;margin-right:4px;color:#40B1D0}.imagify-col-content{background:#F4F7F9;border-left:1px solid #ddd;border-right:1px solid #ddd}.imagify-col-content .imagify-block-secondary{margin-left:-1px;margin-right:-1px}.imagify-col-content .imagify-space-left{margin:15px 30px 15px 0}.imagify-col-content .imagify-space-left p{margin:0 0 10px;font-size:19px;font-weight:500;color:#343A49}.imagify-col-content .imagify-meteo-icon{height:64px;margin:15px 15px 15px 20px}.imagify-col-content .imagify-section-title+p{margin-top:10px}.imagify-account-info-col .imagify-h3-like.imagify-h3-like{color:inherit}.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-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{margin-bottom:1.35em;overflow:hidden}.imagify-number-you-optimized .number{display:table-cell;padding-right:15px;font-size:48px;font-weight:700;line-height:1;vertical-align:middle;white-space:nowrap;color:#000}.imagify-number-you-optimized [id=imagify-total-optimized-attachments-pct]{color:#40B1D0}.imagify-number-you-optimized .text{display:table-cell;vertical-align:middle;overflow:hidden;font-size:12px;color:#626E7B}.imagify-number-you-optimized>p{display:table}.imagify-bars{padding-right:15px}.imagify-bars p{font-size:12px;margin-bottom:5px}.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}.imagify-table-header{-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;padding:15px 25px;background:#343A49;color:#FFF}.imagify-newbie{margin-top:4em;position:relative;overflow:visible}.imagify-newbie .imagify-new-feature.imagify-new-feature{position:absolute;top:0;left:25px;-webkit-transform:translateY(-50%);-ms-transform:translateY(-50%);transform:translateY(-50%);margin:0;padding:8px 20px;font-size:14px;letter-spacing:.02em;text-transform:uppercase;font-weight:700;color:#FFF;background:#8BC34A}.imagify-newbie .imagify-table-header{padding:30px 25px;border:2px solid #8BC34A;background:#F3F9EC}.imagify-th-titles .dashicons,.imagify-th-titles .dashicons:before{width:38px;height:38px;margin-right:20px;font-size:38px;color:#40B1D0}.imagify-newbie .imagify-th-titles .dashicons:before{color:#8BC34A}.imagify-th-title.imagify-th-title.imagify-th-title{margin:0;font-size:24px;font-weight:500;color:#FFF}.imagify-newbie .imagify-th-title.imagify-th-title{color:#343A49}.imagify-th-subtitle.imagify-th-subtitle.imagify-th-subtitle{margin:0 0 5px;font-size:14px;color:#7A8996;font-weight:500}.imagify-th-action .imagify-button-clean{font-size:12px;color:#7A8996}.imagify-th-action .button:focus,.imagify-th-action .button:hover,.imagify-th-action .imagify-is-active{color:#FFF}.imagify-bulk-table table{width:100%;border-spacing:0;border-collapse:collapse}.imagify-bulk-table td{padding:20px}.imagify-bulk-table-details{border-bottom:2px solid #E5EBEF}.imagify-bulk-table-details thead th,.imagify-bulk-table-details thead tr{background:#4A5362}.imagify-bulk-table-details thead th{padding:12px 20px;text-align:left;font-weight:700;color:#E5EBEF;font-size:12px}.imagify-bulk-table-details tbody tr:nth-child(odd) td{background:#F2F5F7}.imagify-bulk-table-content{border:1px solid #D3D3D3;border-top:0}.imagify-bulk-table-footer{padding:20px;color:#626E7B;background:#F2F5F7}.imagify-bulk-table tbody tr+tr{border-top:3px solid #F2F5F7}.imagify-bulk-table tbody td,.imagify-bulk-table tbody tr{background:#FFF}.imagify-bulk-table .imagify-row-progress{display:none;height:8px;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-selector{position:relative}.imagify-selector-list{background:#FFF;border:1px solid #F4F7F9;-webkit-box-shadow:0 6px 12px rgba(0,0,0,.1);box-shadow:0 6px 12px rgba(0,0,0,.1);border-radius:3px;font-weight:700;text-transform:uppercase;letter-spacing:.02em}.imagify-selector-list li:first-child label{border-radius:3px 3px 0 0}.imagify-selector-list li:last-child label{border-radius:0 0 3px 3px}.imagify-selector-list li{margin:0}.imagify-selector-list li+li{border-top:1px solid #F4F7F9}.imagify-selector-list svg{margin-right:5px}.imagify-selector-list .imagify-selector-current-value label,.imagify-selector-list input:checked+label{background:#343A49;color:#FFF}.imagify-selector-list .imagify-selector-current-value input:focus+label,.imagify-selector-list .imagify-selector-current-value label:hover,.imagify-selector-list input:checked+label:hover,.imagify-selector-list input:focus+label,.imagify-selector-list label:hover{background:#40B1D0;color:#F4F7F9}.imagify-selector-list .imagify-selector-current-value input:focus+label polygon,.imagify-selector-list .imagify-selector-current-value label:hover polygon,.imagify-selector-list input:checked+label:hover polygon,.imagify-selector-list input:focus+label polygon,.imagify-selector-list label:hover polygon{fill:#FFF}.imagify-selector-list .imagify-selector-current-value input:focus+label polygon[fill="#CCD1D6"],.imagify-selector-list .imagify-selector-current-value label:hover polygon[fill="#CCD1D6"],.imagify-selector-list input:checked+label:hover polygon[fill="#CCD1D6"],.imagify-selector-list input:focus+label polygon[fill="#CCD1D6"],.imagify-selector-list label:hover polygon[fill="#CCD1D6"]{fill:#3694AE}.imagify-selector-list li label{display:block;padding:10px;-webkit-transition:all .275s;-o-transition:all .275s;transition:all .275s}.imagify-selector-list polygon{-webkit-transition:all .275s;-o-transition:all .275s;transition:all .275s}.imagify-selector-list{position:absolute;top:0;left:0;right:0;-webkit-transition:all .275s;-o-transition:all .275s;transition:all .275s;-webkit-transform:translateY(-50%);-ms-transform:translateY(-50%);transform:translateY(-50%)}.imagify-selector-list[aria-hidden=true]{opacity:0;visibility:hidden;-webkit-transform:translateY(-50%) scale(0);-ms-transform:translateY(-50%) scale(0);transform:translateY(-50%) scale(0)}.imagify-selector-list[aria-hidden=false]{opacity:1;visibility:visible;-webkit-transform:translateY(-50%) scale(1);-ms-transform:translateY(-50%) scale(1);transform:translateY(-50%) scale(1)}.button .imagify-selector-current-value-info{position:relative;padding-right:20px}.button .imagify-selector-current-value-info:after{content:'';position:absolute;right:0;top:50%;margin-top:-3px;border-top:6px solid #7A8996;border-left:6px solid transparent;border-right:6px solid transparent}.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.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;margin-right:20px}.imagify-ac-chart{width:46px;height:46px;float:left;margin:0 20px 0 10px}.imagify-ac-report-text{overflow:hidden}.imagify-ac-report-text p{line-height:1.3}.imagify-ac-rt-big{font-weight:700;font-size:24px;letter-spacing:.15em;word-spacing:.15em;text-transform:uppercase}.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-checkbox{width:35px}.imagify-cell-checkbox p{margin:0}.imagify-cell-checkbox-loader{display:block;width:27px;height:28px;line-height:0;-webkit-animation:loading 4s infinite linear;animation:loading 4s infinite linear}@-webkit-keyframes loading{0%{-webkit-transform:rotate(0);transform:rotate(0)}100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@keyframes loading{0%{-webkit-transform:rotate(0);transform:rotate(0)}100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}.imagify-cell-checkbox-loader.hidden{display:none;-webkit-animation:none;animation:none}.imagify-cell-label,.imagify-cell-title label{font-size:14px;text-transform:uppercase;letter-spacing:.02em;font-weight:700}.imagify-cell-label{margin-right:10px}.imagify-cell-value{font-size:12px;font-weight:500;color:#7A8996}td.imagify-cell-title{padding-left:0}.imagify-cell-original-size .imagify-cell-label,.imagify-cell-title label{color:#1F2332}.imagify-cell-optimized-size,.imagify-cell-original-size{font-weight:500;color:#7A8996;font-size:12px}.imagify-cell-optimized-size .imagify-cell-label{color:#338EA6}.imagify-cell-count-optimized{font-size:14px;font-weight:700;color:#338EA6}.imagify-cell-count-errors{color:#C51162;font-weight:700;font-size:14px}.imagify-cell-count-errors a{margin-left:5px;color:#7A8996;font-weight:400;font-size:12px}.imagify-cell-filename{max-width:200px}.imagify-cell-status{max-width:145px}.imagify-cell-status .dashicons-warning{margin-right:2px}.imagistatus .dashicons,.imagiuploaded{margin-right:5px}.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 .imagify-cell-thumbnails{text-align:center}.imagify-cell-percentage,.imagify-cell-savings{color:#46B1CE;font-weight:700}.imagify-bulk-table td.imagify-cell-totaloriginal{padding-right:78px}.imagify-cell-totaloriginal{text-align:right}.imagify-cell-level{width:145px}.imagify-selector-button.imagify-selector-button{border:1px solid #FFF;padding:2px 10px}.imagify-selector-button.imagify-selector-button:focus,.imagify-selector-button.imagify-selector-button:hover{border-color:#EEE;-webkit-box-shadow:0 4px 8px rgba(0,0,0,.1);box-shadow:0 4px 8px rgba(0,0,0,.1)}.imagifilename,.imagiuploaded{display:inline-block;vertical-align:middle;margin-left:5px;color:#626E7B;font-weight:500}.imagifilename{font-size:12px}.imagiuploaded{width:33px;height:33px;margin-left:-8px;overflow:hidden;background:url(../images/upload-image.png) no-repeat;background-size:cover}.imagiuploaded img{max-width:100%;height:auto}.imagistatus{color:#8CA6B3;text-transform:uppercase;font-weight:700}.status-compressing{color:#46B1CE}.status-error{color:#CE0B24}.status-warning{color:#f5a623}.status-complete{color:#8CC152}.imagify-bulk-submit{padding:15px 0 8px}.imagify-settings .button-primary.button-primary[disabled]{color:#4A4A4A!important;background:#D9E4EB!important;text-shadow:none!important;cursor:not-allowed}.dashicons.rotate{-webkit-animation:icon-rotate 2.6s infinite linear;animation:icon-rotate 2.6s infinite linear}.imagify-cell-status .dashicons-admin-generic{-webkit-transform-origin:48.75% 51.75%;-ms-transform-origin:48.75% 51.75%;transform-origin:48.75% 51.75%}@-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-col.imagify-col.imagify-account-info-col{width:465px}@media (max-width:1245px){.imagify-col.imagify-col.imagify-account-info-col{width:auto;max-width:none;float:none}.imagify-columns .col-overview.col-overview{float:none;width:auto;padding-left:0;padding-right:0}}@media (max-width:1200px){.imagify-settings .imagify-title .imagify-logo{display:none}}@media (max-width:940px){.imagify-bulk-table-container tbody,.imagify-bulk-table-container tr{text-align:left}.imagify-bulk-table-container tbody,.imagify-bulk-table-container tbody td,.imagify-bulk-table-container tbody tr{display:block}.imagify-bulk-table-container tbody td{padding:20px}.imagify-cell-checkbox,.imagify-cell-title{float:left}.imagify-cell-checkbox{width:26px}.imagify-bulk-table-container .imagify-cell-title{padding-left:10px;width:calc(100% - 96px)}.imagify-cell-count-optimized:before,.imagify-cell-title:after{content:'';display:table;clear:both;width:100%}.imagify-cell-count-optimized{clear:both}.imagify-bulk-table-container .imagify-cell-title~td{display:inline-block}.imagify-bulk-table-container td.imagify-cell-level{display:block}}@media (max-width:918px){.imagify-settings .imagify-title{display:block}.imagify-settings .imagify-documentation-link-box{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex}}.hidden{display:none}@media (max-width:782px){.imagify-account-info-col .imagify-options-title,.imagify-newbie .imagify-table-header,.imagify-table-header{-ms-flex-direction:column;flex-direction:column;-webkit-box-direction:normal;-webkit-box-orient:vertical;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.imagify-newbie .imagify-th-titles{width:100%}.imagify-newbie .imagify-th-title.imagify-th-title{color:#343A49;font-size:16px;padding-bottom:20px}.imagify-newbie .imagify-th-titles .dashicons,.imagify-newbie .imagify-th-titles .dashicons:before{margin:0}.imagify-newbie .imagify-th-action{display:-webkit-box;display:-ms-flexbox;display:flex;max-width:100%}.imagify-newbie .imagify-th-action a{max-width:100%;font-size:11px;padding:11px 12px}.imagify-columns .col-chart.col-chart{text-align:center}.imagify-doughnut-legend{margin-top:18px;width:60%;margin:10px auto}.imagify-account-info-col .imagify-options-title>a{-ms-flex-preferred-size:unset;flex-basis:unset;margin:auto}.imagify-account-info-col p.imagify-meteo-title,.imagify-th-title.imagify-th-title.imagify-th-title{font-size:20px}.imagify-bulk-table-container tbody td{padding:10px}.imagify-col-content .imagify-space-left{width:auto;margin:0 0 15px}}
assets/css/notices.css CHANGED
@@ -4,10 +4,12 @@
4
  padding-left: 20px;
5
  list-style-type: disc
6
  }
 
7
  .imagify-plugins-error li {
8
- width:300px;
9
- line-height:30px
10
  }
 
11
  @media (max-width: 570px) {
12
  .imagify-plugins-error li {
13
  width: auto;
@@ -45,39 +47,47 @@ body[class*="_imagify-ngg-bulk-optimization"] .notice,
45
  box-shadow: none;
46
  color: #FFF;
47
  }
48
- @media (max-width:782px) {
 
49
  .imagify-notice.imagify-notice,
50
  .imagify-welcome {
51
  margin-right: 12px;
52
  }
53
  }
 
54
  @media (max-width: 450px) {
55
  .imagify-notice.imagify-notice {
56
  -webkit-box-orient: vertical;
57
  -webkit-box-direction: normal;
58
  -webkit-flex-direction: column;
59
- -ms-flex-direction: column;
60
- flex-direction: column;
61
  }
62
  }
 
63
  .wrap .imagify-notice {
64
  margin: 5px 15px 2px;
65
  position: relative;
66
  }
 
67
  .imagify-notice-logo {
68
  padding: 18px 23px;
69
  background: #40B1D0;
70
  }
 
71
  .imagify-notice-logo .imagify-logo {
72
  opacity: 1;
73
  }
 
74
  .imagify-flex-notice-content .imagify-notice-logo {
75
  display: flex;
76
  align-items: center;
77
  }
 
78
  .updated .imagify-notice-logo {
79
  background: #8BC34A;
80
  }
 
81
  .error .imagify-notice-logo {
82
  background: #C51162;
83
  }
@@ -89,35 +99,44 @@ body[class*="_imagify-ngg-bulk-optimization"] .notice,
89
  .imagify-notice-content {
90
  padding: 5px 23px;
91
  }
 
92
  .imagify-notice-content.imagify-notice-content p {
93
  margin: 0.65em 0;
94
  }
 
95
  .imagify-flex-notice-content .imagify-notice-content {
96
  display: flex;
97
  flex-wrap: wrap;
98
  padding: 0;
99
  }
 
100
  .imagify-flex-notice-content .imagify-notice-content > * {
101
  padding: 10px 20px;
102
  }
 
103
  .imagify-flex-notice-content .imagify-meteo-icon img {
104
  height: 100%;
105
  margin-top: 6px;
106
  }
 
107
  .imagify-notice-quota [class^="imagify-bar-"] {
108
  background: #1F2332;
109
  }
 
110
  .imagify-notice-quota .imagify-space-left p {
111
  margin: 0;
112
  }
 
113
  .imagify-flex-notice-content .imagify-notice-content .imagify-notice-quota {
114
  padding-right: 24px;
115
  padding-left: 8px;
116
  background: #343A49;
117
  }
 
118
  .imagify-notice a {
119
  color: #40B1D0;
120
  }
 
121
  .imagify-notice a:hover,
122
  .imagify-notice a:focus {
123
  color: #FEE102;
@@ -141,38 +160,47 @@ body[class*="_imagify-ngg-bulk-optimization"] .notice,
141
  .imagify-welcome {
142
  margin: 30px 20px 0 0;
143
  }
 
144
  .imagify-welcome .baseline {
145
  display: inline-block;
146
  margin: .2em 0 0 2em;
147
  font-size: 17px;
148
  }
 
149
  .imagify-welcome .imagify-logo {
150
  vertical-align: middle;
151
  }
 
152
  .imagify-welcome-remove {
153
  position: absolute;
154
- top: 50%; right: 15px;
 
155
  margin-top: -8px;
156
  color: #FFF;
157
  text-decoration: none;
158
  }
 
159
  /* Welcome columns */
160
  .imagify-columns [class^="col-"] img {
161
  float: left;
162
  margin-right: 18px;
163
  }
 
164
  .imagify-col-content {
165
  overflow: hidden;
166
  }
 
167
  .imagify-col-title {
168
  margin: 0 0 15px 0;
169
  font-size: 23px;
170
  }
 
171
  .counter .imagify-col-title:before {
172
  counter-increment: cols;
173
  content: counter(cols) ". ";
174
  color: #40B1D0;
175
  }
 
176
  .imagify-col-desc {
177
  color: #5F758E;
178
  margin-bottom: 2em;
@@ -196,39 +224,49 @@ body[class*="_imagify-ngg-bulk-optimization"] .notice,
196
  color: #FFF;
197
  background: #1F2332;
198
  }
 
199
  .media_page_imagify-bulk-optimization .imagify-rkt-notice {
200
  margin-left: 2px;
201
  margin-right: 20px;
202
  }
 
203
  @media (max-width: 782px) {
204
  .media_page_imagify-bulk-optimization .imagify-rkt-notice {
205
  margin-left: 0;
206
  margin-right: 12px;
207
  }
208
  }
 
209
  .imagify-rkt-notice .imagify-cross {
210
  position: absolute;
211
- right: 8px; top: 50%;
212
- width: 22px; height: 22px;
 
 
213
  padding: 0;
214
  margin-top: -11px;
215
  background: transparent;
216
- color: rgba(255,255,255,.5);
217
  text-decoration: none;
218
  border-radius: 50%;
219
  transition: all .275s;
220
  }
 
221
  .imagify-rkt-notice .imagify-cross .dashicons {
222
  position: relative;
223
- top: 2px; left: 1px;
 
224
  transition: all .275s;
225
  }
 
226
  .imagify-rkt-notice .imagify-cross:hover {
227
  background: #FFF;
228
  }
 
229
  .imagify-rkt-notice .imagify-cross:hover .dashicons {
230
  color: #412355;
231
  }
 
232
  .imagify-rkt-notice .imagify-rkt-cta,
233
  .imagify-rkt-notice .imagify-rkt-logo,
234
  .imagify-rkt-notice .imagify-rkt-coupon {
@@ -236,23 +274,27 @@ body[class*="_imagify-ngg-bulk-optimization"] .notice,
236
  -ms-flex-negative: 0;
237
  flex-shrink: 0;
238
  }
 
239
  .imagify-rkt-notice .imagify-rkt-logo {
240
- width: 150px!important; /* !important because of a dirtugly WP Engine code */
241
  text-align: center;
242
  padding: 0 25px 0 30px;
243
  line-height: 0.8;
244
  }
 
245
  .imagify-rkt-notice .imagify-rkt-msg {
246
- width: 100%!important; /* !important because of a dirtugly WP Engine code */
247
  color: #FFF;
248
  padding: 0 15px;
249
  font-size: 14px;
250
  line-height: 1.6;
251
  }
 
252
  .imagify-rkt-notice .imagify-rkt-coupon {
253
- width: 150px!important; /* !important because of a dirtugly WP Engine code */
254
  padding: 0 15px;
255
  }
 
256
  .imagify-rkt-notice .imagify-rkt-coupon-code {
257
  padding: 5px 10px;
258
  font-size: 23px;
@@ -260,8 +302,9 @@ body[class*="_imagify-ngg-bulk-optimization"] .notice,
260
  border: 1px dashed #F56640;
261
  color: #F56640;
262
  }
 
263
  .imagify-rkt-notice .imagify-rkt-cta {
264
- width: 250px!important; /* !important because of a dirtugly WP Engine code */
265
  -webkit-box-flex: 1;
266
  -webkit-flex-grow: 1;
267
  -ms-flex-positive: 1;
@@ -270,6 +313,7 @@ body[class*="_imagify-ngg-bulk-optimization"] .notice,
270
  -ms-flex-preferred-size: 200px;
271
  flex-basis: 200px;
272
  }
 
273
  .imagify-rkt-notice .button.button {
274
  position: relative;
275
  top: -1px;
@@ -280,25 +324,43 @@ body[class*="_imagify-ngg-bulk-optimization"] .notice,
280
  padding: 9px 18px 9px;
281
  background: #F56640;
282
  box-shadow: none;
283
- text-shadow: none!important;
284
  }
 
285
  @media (max-width: 880px) {
286
  .imagify-rkt-notice {
287
  -webkit-flex-wrap: wrap;
288
  -ms-flex-wrap: wrap;
289
  flex-wrap: wrap;
290
  }
 
291
  .imagify-rkt-notice .imagify-rkt-msg,
292
  .imagify-rkt-notice .imagify-rkt-cta,
293
  .imagify-rkt-notice .imagify-rkt-logo {
294
  text-align: left;
295
  padding: 5px 15px;
296
  }
 
297
  .imagify-cross.imagify-cross {
298
  top: 8px;
299
  margin-top: 0;
300
  }
 
301
  .imagify-rkt-notice .imagify-cross .dashicons {
302
  top: 1px;
303
  }
304
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
4
  padding-left: 20px;
5
  list-style-type: disc
6
  }
7
+
8
  .imagify-plugins-error li {
9
+ width: 300px;
10
+ line-height: 30px
11
  }
12
+
13
  @media (max-width: 570px) {
14
  .imagify-plugins-error li {
15
  width: auto;
47
  box-shadow: none;
48
  color: #FFF;
49
  }
50
+
51
+ @media (max-width: 782px) {
52
  .imagify-notice.imagify-notice,
53
  .imagify-welcome {
54
  margin-right: 12px;
55
  }
56
  }
57
+
58
  @media (max-width: 450px) {
59
  .imagify-notice.imagify-notice {
60
  -webkit-box-orient: vertical;
61
  -webkit-box-direction: normal;
62
  -webkit-flex-direction: column;
63
+ -ms-flex-direction: column;
64
+ flex-direction: column;
65
  }
66
  }
67
+
68
  .wrap .imagify-notice {
69
  margin: 5px 15px 2px;
70
  position: relative;
71
  }
72
+
73
  .imagify-notice-logo {
74
  padding: 18px 23px;
75
  background: #40B1D0;
76
  }
77
+
78
  .imagify-notice-logo .imagify-logo {
79
  opacity: 1;
80
  }
81
+
82
  .imagify-flex-notice-content .imagify-notice-logo {
83
  display: flex;
84
  align-items: center;
85
  }
86
+
87
  .updated .imagify-notice-logo {
88
  background: #8BC34A;
89
  }
90
+
91
  .error .imagify-notice-logo {
92
  background: #C51162;
93
  }
99
  .imagify-notice-content {
100
  padding: 5px 23px;
101
  }
102
+
103
  .imagify-notice-content.imagify-notice-content p {
104
  margin: 0.65em 0;
105
  }
106
+
107
  .imagify-flex-notice-content .imagify-notice-content {
108
  display: flex;
109
  flex-wrap: wrap;
110
  padding: 0;
111
  }
112
+
113
  .imagify-flex-notice-content .imagify-notice-content > * {
114
  padding: 10px 20px;
115
  }
116
+
117
  .imagify-flex-notice-content .imagify-meteo-icon img {
118
  height: 100%;
119
  margin-top: 6px;
120
  }
121
+
122
  .imagify-notice-quota [class^="imagify-bar-"] {
123
  background: #1F2332;
124
  }
125
+
126
  .imagify-notice-quota .imagify-space-left p {
127
  margin: 0;
128
  }
129
+
130
  .imagify-flex-notice-content .imagify-notice-content .imagify-notice-quota {
131
  padding-right: 24px;
132
  padding-left: 8px;
133
  background: #343A49;
134
  }
135
+
136
  .imagify-notice a {
137
  color: #40B1D0;
138
  }
139
+
140
  .imagify-notice a:hover,
141
  .imagify-notice a:focus {
142
  color: #FEE102;
160
  .imagify-welcome {
161
  margin: 30px 20px 0 0;
162
  }
163
+
164
  .imagify-welcome .baseline {
165
  display: inline-block;
166
  margin: .2em 0 0 2em;
167
  font-size: 17px;
168
  }
169
+
170
  .imagify-welcome .imagify-logo {
171
  vertical-align: middle;
172
  }
173
+
174
  .imagify-welcome-remove {
175
  position: absolute;
176
+ top: 50%;
177
+ right: 15px;
178
  margin-top: -8px;
179
  color: #FFF;
180
  text-decoration: none;
181
  }
182
+
183
  /* Welcome columns */
184
  .imagify-columns [class^="col-"] img {
185
  float: left;
186
  margin-right: 18px;
187
  }
188
+
189
  .imagify-col-content {
190
  overflow: hidden;
191
  }
192
+
193
  .imagify-col-title {
194
  margin: 0 0 15px 0;
195
  font-size: 23px;
196
  }
197
+
198
  .counter .imagify-col-title:before {
199
  counter-increment: cols;
200
  content: counter(cols) ". ";
201
  color: #40B1D0;
202
  }
203
+
204
  .imagify-col-desc {
205
  color: #5F758E;
206
  margin-bottom: 2em;
224
  color: #FFF;
225
  background: #1F2332;
226
  }
227
+
228
  .media_page_imagify-bulk-optimization .imagify-rkt-notice {
229
  margin-left: 2px;
230
  margin-right: 20px;
231
  }
232
+
233
  @media (max-width: 782px) {
234
  .media_page_imagify-bulk-optimization .imagify-rkt-notice {
235
  margin-left: 0;
236
  margin-right: 12px;
237
  }
238
  }
239
+
240
  .imagify-rkt-notice .imagify-cross {
241
  position: absolute;
242
+ right: 8px;
243
+ top: 50%;
244
+ width: 22px;
245
+ height: 22px;
246
  padding: 0;
247
  margin-top: -11px;
248
  background: transparent;
249
+ color: rgba(255, 255, 255, .5);
250
  text-decoration: none;
251
  border-radius: 50%;
252
  transition: all .275s;
253
  }
254
+
255
  .imagify-rkt-notice .imagify-cross .dashicons {
256
  position: relative;
257
+ top: 2px;
258
+ left: 1px;
259
  transition: all .275s;
260
  }
261
+
262
  .imagify-rkt-notice .imagify-cross:hover {
263
  background: #FFF;
264
  }
265
+
266
  .imagify-rkt-notice .imagify-cross:hover .dashicons {
267
  color: #412355;
268
  }
269
+
270
  .imagify-rkt-notice .imagify-rkt-cta,
271
  .imagify-rkt-notice .imagify-rkt-logo,
272
  .imagify-rkt-notice .imagify-rkt-coupon {
274
  -ms-flex-negative: 0;
275
  flex-shrink: 0;
276
  }
277
+
278
  .imagify-rkt-notice .imagify-rkt-logo {
279
+ width: 150px !important; /* !important because of a dirtugly WP Engine code */
280
  text-align: center;
281
  padding: 0 25px 0 30px;
282
  line-height: 0.8;
283
  }
284
+
285
  .imagify-rkt-notice .imagify-rkt-msg {
286
+ width: 100% !important; /* !important because of a dirtugly WP Engine code */
287
  color: #FFF;
288
  padding: 0 15px;
289
  font-size: 14px;
290
  line-height: 1.6;
291
  }
292
+
293
  .imagify-rkt-notice .imagify-rkt-coupon {
294
+ width: 150px !important; /* !important because of a dirtugly WP Engine code */
295
  padding: 0 15px;
296
  }
297
+
298
  .imagify-rkt-notice .imagify-rkt-coupon-code {
299
  padding: 5px 10px;
300
  font-size: 23px;
302
  border: 1px dashed #F56640;
303
  color: #F56640;
304
  }
305
+
306
  .imagify-rkt-notice .imagify-rkt-cta {
307
+ width: 250px !important; /* !important because of a dirtugly WP Engine code */
308
  -webkit-box-flex: 1;
309
  -webkit-flex-grow: 1;
310
  -ms-flex-positive: 1;
313
  -ms-flex-preferred-size: 200px;
314
  flex-basis: 200px;
315
  }
316
+
317
  .imagify-rkt-notice .button.button {
318
  position: relative;
319
  top: -1px;
324
  padding: 9px 18px 9px;
325
  background: #F56640;
326
  box-shadow: none;
327
+ text-shadow: none !important;
328
  }
329
+
330
  @media (max-width: 880px) {
331
  .imagify-rkt-notice {
332
  -webkit-flex-wrap: wrap;
333
  -ms-flex-wrap: wrap;
334
  flex-wrap: wrap;
335
  }
336
+
337
  .imagify-rkt-notice .imagify-rkt-msg,
338
  .imagify-rkt-notice .imagify-rkt-cta,
339
  .imagify-rkt-notice .imagify-rkt-logo {
340
  text-align: left;
341
  padding: 5px 15px;
342
  }
343
+
344
  .imagify-cross.imagify-cross {
345
  top: 8px;
346
  margin-top: 0;
347
  }
348
+
349
  .imagify-rkt-notice .imagify-cross .dashicons {
350
  top: 1px;
351
  }
352
+ }
353
+
354
+ @media (max-width: 782px) {
355
+ .imagify-flex-notice-content .imagify-notice-content .imagify-notice-quota {
356
+ width: 100%;
357
+ }
358
+
359
+ .imagify-notice-quota-btn-container{
360
+ text-align: center;
361
+ width: 100%;
362
+ }
363
+ .imagify-notice-quota-btn-container .imagify-button{
364
+ display: inline-block;
365
+ }
366
+ }
assets/css/notices.min.css CHANGED
@@ -1 +1 @@
1
- .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}.media_page_imagify-bulk-optimization .notice,.settings_page_imagify .notice,body[class*="_imagify-ngg-bulk-optimization"] .notice{margin-right:20px;margin-left:2px}.imagify-notice .button-mini{padding:2px 10px;font-size:13px}.imagify-notice.imagify-notice{position:relative;display:-webkit-box;display:-ms-flexbox;display:flex;padding:0;margin:10px 20px 10px 2px;border:0;background:#4A5362;-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}.imagify-notice-logo .imagify-logo{opacity:1}.imagify-flex-notice-content .imagify-notice-logo{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.updated .imagify-notice-logo{background:#8BC34A}.error .imagify-notice-logo{background:#C51162}.imagify-notice-title{font-size:15px}.imagify-notice-content{padding:5px 23px}.imagify-notice-content.imagify-notice-content p{margin:.65em 0}.imagify-flex-notice-content .imagify-notice-content{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;padding:0}.imagify-flex-notice-content .imagify-notice-content>*{padding:10px 20px}.imagify-flex-notice-content .imagify-meteo-icon img{height:100%;margin-top:6px}.imagify-notice .imagify-rate-us .stars,.imagify-notice-quota .imagify-space-left p{margin:0}.imagify-notice-quota [class^=imagify-bar-]{background:#1F2332}.imagify-flex-notice-content .imagify-notice-content .imagify-notice-quota{padding-right:24px;padding-left:8px;background:#343A49}.imagify-notice a{color:#40B1D0}.imagify-notice a:focus,.imagify-notice a:hover{color:#FEE102}.imagify-notice code{background:rgba(0,0,0,.4)}.imagify-notice .imagify-rate-us.imagify-rate-us{text-align:left}.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 [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-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:#1F2332}.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:rgba(255,255,255,.5);text-decoration:none;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;color:#FFF;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 #F56640;color:#F56640}.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;border:0;padding:9px 18px;background:#F56640;-webkit-box-shadow:none;box-shadow:none;text-shadow:none!important}@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}}
1
+ .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}.media_page_imagify-bulk-optimization .notice,.settings_page_imagify .notice,body[class*="_imagify-ngg-bulk-optimization"] .notice{margin-right:20px;margin-left:2px}.imagify-notice .button-mini{padding:2px 10px;font-size:13px}.imagify-notice.imagify-notice{position:relative;display:-webkit-box;display:-ms-flexbox;display:flex;padding:0;margin:10px 20px 10px 2px;border:0;background:#4A5362;-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}.imagify-notice-logo .imagify-logo{opacity:1}.imagify-flex-notice-content .imagify-notice-logo{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.updated .imagify-notice-logo{background:#8BC34A}.error .imagify-notice-logo{background:#C51162}.imagify-notice-title{font-size:15px}.imagify-notice-content{padding:5px 23px}.imagify-notice-content.imagify-notice-content p{margin:.65em 0}.imagify-flex-notice-content .imagify-notice-content{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;padding:0}.imagify-flex-notice-content .imagify-notice-content>*{padding:10px 20px}.imagify-flex-notice-content .imagify-meteo-icon img{height:100%;margin-top:6px}.imagify-notice .imagify-rate-us .stars,.imagify-notice-quota .imagify-space-left p{margin:0}.imagify-notice-quota [class^=imagify-bar-]{background:#1F2332}.imagify-flex-notice-content .imagify-notice-content .imagify-notice-quota{padding-right:24px;padding-left:8px;background:#343A49}.imagify-notice a{color:#40B1D0}.imagify-notice a:focus,.imagify-notice a:hover{color:#FEE102}.imagify-notice code{background:rgba(0,0,0,.4)}.imagify-notice .imagify-rate-us.imagify-rate-us{text-align:left}.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 [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-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:#1F2332}.media_page_imagify-bulk-optimization .imagify-rkt-notice{margin-left:2px;margin-right:20px}.imagify-rkt-notice .imagify-cross{position:absolute;right:8px;top:50%;width:22px;height:22px;padding:0;margin-top:-11px;background:0 0;color:rgba(255,255,255,.5);text-decoration:none;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;color:#FFF;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 #F56640;color:#F56640}.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;border:0;padding:9px 18px;background:#F56640;-webkit-box-shadow:none;box-shadow:none;text-shadow:none!important}@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}}@media (max-width:782px){.media_page_imagify-bulk-optimization .imagify-rkt-notice{margin-left:0;margin-right:12px}.imagify-flex-notice-content .imagify-notice-content .imagify-notice-quota{width:100%}.imagify-notice-quota-btn-container{text-align:center;width:100%}.imagify-notice-quota-btn-container .imagify-button{display:inline-block}}
assets/css/options.css CHANGED
@@ -64,7 +64,6 @@ p.imagify-api-key-invite-title {
64
  .imagify-no-api-key .imagify-api-line {
65
  margin: 3em 0 0 0;
66
  padding: 2em 0 0;
67
- border-top: 1px solid #D5D6D9;
68
  }
69
  .imagify-no-api-key .imagify-api-line input[type="text"] {
70
  margin-top: 5px;
@@ -152,6 +151,7 @@ p.imagify-api-key-invite-title {
152
  flex-basis: 40%;
153
  flex-shrink: 1;
154
  padding-left: 20px;
 
155
  color: #626E7B;
156
  box-sizing: border-box;
157
  }
@@ -286,6 +286,7 @@ label[for="imagify_sizes_full"] + .imagify-info {
286
  .imagify-settings [type="text"],
287
  .imagify-settings [type="number"] {
288
  width: 20em;
 
289
  height: auto;
290
  padding: 6px;
291
  margin: 0 6px;
@@ -324,6 +325,7 @@ label[for="imagify_sizes_full"] + .imagify-info {
324
  .imagify-menu-bar-img {
325
  box-sizing: border-box;
326
  max-width: 100%;
 
327
  height: auto;
328
  margin-top: 0;
329
  border: 1px solid #8BA6B4;
@@ -900,3 +902,37 @@ input:checked + label .imagify-fake-checkbox:after,
900
  font-weight: 500;
901
  color: #A2AFBC;
902
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
64
  .imagify-no-api-key .imagify-api-line {
65
  margin: 3em 0 0 0;
66
  padding: 2em 0 0;
 
67
  }
68
  .imagify-no-api-key .imagify-api-line input[type="text"] {
69
  margin-top: 5px;
151
  flex-basis: 40%;
152
  flex-shrink: 1;
153
  padding-left: 20px;
154
+ margin-top: 20px;
155
  color: #626E7B;
156
  box-sizing: border-box;
157
  }
286
  .imagify-settings [type="text"],
287
  .imagify-settings [type="number"] {
288
  width: 20em;
289
+ max-width: 100%;
290
  height: auto;
291
  padding: 6px;
292
  margin: 0 6px;
325
  .imagify-menu-bar-img {
326
  box-sizing: border-box;
327
  max-width: 100%;
328
+ width: 350px;
329
  height: auto;
330
  margin-top: 0;
331
  border: 1px solid #8BA6B4;
902
  font-weight: 500;
903
  color: #A2AFBC;
904
  }
905
+ @media (max-width: 782px) {
906
+ .imagify-settings.imagify-have-rocket {
907
+ margin-right: 10px;
908
+ }
909
+
910
+ label + .imagify-info, .imagify-visual-label {
911
+ max-width: calc(100% - 65px);
912
+ padding-right: 0;
913
+ }
914
+
915
+ .imagify-options-title {
916
+ font-size: 22px;
917
+ }
918
+
919
+ .imagify-user-plan-label {
920
+ margin-right: -5px;
921
+ }
922
+
923
+ .imagify-col.imagify-main {
924
+ width:100%;
925
+ padding-right: 10px;
926
+ }
927
+ .imagify-col + .imagify-col{
928
+ padding:0px 10px 0px 0px;
929
+ }
930
+ .imagify-no-api-key .imagify-api-line input[type="text"]{
931
+ margin-left: 0;
932
+ }
933
+ }
934
+ @media (max-width: 513px) {
935
+ .imagify-setting-optim-level .imagify-visual-comparison-text{
936
+ margin-top: 20px;
937
+ }
938
+ }
assets/css/options.min.css CHANGED
@@ -1 +1 @@
1
- .wrap.imagify-settings{margin-right:0}.imagify-settings.imagify-have-rocket{margin-right:20px}#imagify-check-api-container{display:block;margin-top:6px;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 .imagify-icon{font-size:1.8em;margin-right:3px;margin-left:1px;color:#8BC34A;vertical-align:-2px}.imagify-account-info-col .imagify-api-line{padding:22px 26px;background:#343A49}.imagify-api-line label,p.imagify-api-key-invite-title{display:block;margin-bottom:6px;font-size:14px;text-transform:uppercase;letter-spacing:.02em;font-weight:700;color:#343A49}.imagify-account-info-col .imagify-api-line label{color:#E5EBEF;display:inline-block}.imagify-api-line.imagify-api-line input[type=text]{width:100%;padding:6px 10px;border:1px solid #40B1D0;font-family:"PT Mono",Consolas,monospace;font-size:14px;letter-spacing:.01em;font-weight:700;color:#40B1D0;background:0 0;-webkit-box-shadow:none;box-shadow:none}.imagify-no-api-key .imagify-api-line{margin:3em 0 0;padding:2em 0 0;border-top:1px solid #D5D6D9}.imagify-no-api-key .imagify-api-line input[type=text]{margin-top:5px;width:400px;max-width:100%}.imagify-settings .imagify-no-api-key div.submit.submit{border:0;padding:0 16px;margin-top:0;background:#FFF}.imagify-settings .imagify-no-api-key div.submit.submit p{padding-bottom:0}.imagify-options-title{margin:.75em 0 0;font-size:24px;letter-spacing:.02em;font-weight:700;color:#343A49}.imagify-options-subtitle{padding-bottom:.3em;margin-bottom:20px;border-bottom:1px solid #D2D3D6;font-size:14px;letter-spacing:.01em;font-weight:700;text-transform:uppercase;color:#626E7B}.imagify-options-subtitle a{font-size:12px;color:#338EA6;text-transform:none;letter-spacing:0}.imagify-options-subtitle .imagify-info{margin-left:15px}.imagify-setting-line{border-top:1px solid #D2D3D6;padding:25px 0 13px;margin:1em 0}.imagify-options-subtitle+.imagify-setting-line{border-top:0;padding-top:8px}.imagify-setting-optim-level{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-align:center;-ms-flex-align:center;align-items:center;padding:8px 0 18px}.imagify-setting-optim-level>p{margin:0}.imagify-setting-optim-level .imagify-inline-options{-ms-flex-preferred-size:60%;flex-basis:60%;-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;width:auto;display:-webkit-box;display:-ms-flexbox;display:flex;background:#2E3243;border-radius:3px}.imagify-setting-optim-level .imagify-inline-options label{display:block!important;width:100%;font-size:14px!important;border-radius:3px!important}.imagify-setting-optim-level .imagify-visual-comparison-text{-ms-flex-preferred-size:40%;flex-basis:40%;-ms-flex-negative:1;flex-shrink:1;padding-left:20px;color:#626E7B;-webkit-box-sizing:border-box;box-sizing:border-box}.imagify-setting-optim-level.imagify-setting-optim-level .imagify-visual-comparison-btn{padding-top:5px;margin-top:2px;border-radius:2px;text-transform:none;letter-spacing:0;text-shadow:none!important}@media (max-width:782px){.imagify-settings .form-table th{padding-top:2em;padding-bottom:.5em}}.imagify-settings .form-table td{vertical-align:top}.imagify-settings .form-table th span{cursor:pointer}.imagify-middle th{padding-top:35px}.imagify-settings div.submit.submit{border-top:1px solid #D9D9D9;margin-top:2em;padding:18px 0 7px 30px}.imagify-settings .hidden+div.submit.submit{margin-top:-1px}.imagify-settings p.submit{float:left;margin-top:0}.imagify-settings p.submit .button{margin:0 5px}.imagify-sub-header th{text-align:right}.imagify-sub-header .form-table{margin:0}.imagify-sub-header td,.imagify-sub-header th{padding-top:0;padding-bottom:0}.imagify-sub-header [for=api_key]{padding-top:5px}@media (max-width:1120px){.imagify-settings .imagify-logo-block{margin-right:0}.imagify-settings .imagify-rate-us.imagify-rate-us{margin:1em 0 -1em}}.imagify-settings .imagify-rate-us{margin-right:25px;margin-left:auto}.imagify-visual-label,label+.imagify-info{display:inline-block;width:550px;max-width:calc(100% - 38px);margin-left:38px;padding-right:25px}.imagify-options-line{-webkit-transition:opacity .3s;-o-transition:opacity .3s;transition:opacity .3s}label~.imagify-options-line{display:block;margin:8px 0 20px 40px;font-size:14px}.imagify-options-line+.imagify-info{margin-left:38px}label+.imagify-info{margin-top:10px}.imagify-options-line+.imagify-info+.imagify-options-line{margin-top:20px}.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,:checked+label~.imagify-options-line :checked+label~.imagify-options-line .imagify-faded{opacity:.5}.imagify-settings.imagify-settings :not(:checked)+label~.imagify-options-line :not(:checked)+label~.imagify-options-line,.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-radio-group+.imagify-options-line{display:block;margin:0 0 0 1.7em;font-size:14px}.imagify-checkbox-marged{max-width:500px;margin-left:45px}.imagify-settings [type=text],.imagify-settings [type=number]{width:20em;height:auto;padding:6px;margin:0 6px;border:1px solid #8BA6B4;-webkit-box-shadow:none;box-shadow:none;border-radius:2px;color:#338EA6;font-weight:700}.imagify-settings [type=number]{width:5em}.imagify-settings ::-webkit-input-placeholder{color:#B1B1B1;font-weight:400}.imagify-settings ::-moz-placeholder{color:#B1B1B1;font-weight:400;opacity:1}.imagify-settings :-ms-input-placeholder{color:#B1B1B1;font-weight:400}.imagify-settings :-moz-placeholder{color:#B1B1B1;font-weight:400;opacity:1}.imagify-settings ::-ms-input-placeholder{color:#B1B1B1;font-weight:400}.imagify-settings ::placeholder{color:#B1B1B1;font-weight:400}.imagify-menu-bar-img{-webkit-box-sizing:border-box;box-sizing:border-box;max-width:100%;height:auto;margin-top:0;border:1px solid #8BA6B4}.imagify-col.imagify-main{float:left;width:calc(100% - 320px);padding-left:0;padding-right:0}.imagify-have-rocket .imagify-main{float:none;width:1265px;max-width:100%}.imagify-sidebar{float:left;width:300px;max-width:100%}.imagify-sidebar-section{border:1px solid #BBB;background:#1F2332;position:relative;padding:10px 20px;text-align:center;color:#F2F2F2}.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-close{position:absolute;top:8px;right:12px;text-decoration:none}.imagify-sidebar-close i{font-size:2em;color:rgba(255,255,255,.5)}p.imagify-sidebar-title{margin:1.2em 0 1.5em;text-align:left;color:#F56640;text-transform:uppercase;letter-spacing:.015em;word-spacing:.015em;font-weight:700}p.imagify-sidebar-description{margin:1.5em 0;text-align:left;font-weight:500;color:#F2F2F2}.imagify-sidebar-description strong{color:#39CE9A}.imagify-rocket-cta-promo{display:block;padding:8px 10px;margin:1.3em 0 .5em;border:2px dashed #F56640;border-radius:3px;font-size:18px;font-weight:700;color:#F56640}.imagify-rocket-cta-promo strong,a.btn-rocket{color:#F2F2F2}a.btn-rocket{display:block;font-size:15px;padding:10px 12px;margin:0 0 1.5em;background:#F56640;border-radius:3px;text-transform:uppercase;font-weight:700;text-decoration:none}a.btn-rocket:focus,a.btn-rocket:hover{background:#AC2B15}.imagify-sidebar-section ul{margin-top:20px}.imagify-sidebar-section li{position:relative;margin:1.2em 0;padding-left:25px;text-align:left}.imagify-sidebar-section li:before{content:"✓";position:absolute;left:0;top:0;color:#39CE9A;font-size:18px}label[for=imagify_admin_bar_menu],label[for=imagify_partner_links]{font-weight:400!important;color:#626E7B!important}.imagify-select-all-buttons{margin-top:8px}.imagify-link-like.imagify-select-all{font-weight:700;font-size:12px;color:#3694AE}.imagify-select-all.imagify-is-inactive{color:inherit;text-decoration:none;cursor:default}.imagify-fts-header{padding:10px 16px;background:#343A49;color:#FFF}.imagify-fts-header i{font-size:1.8em;margin-right:12px}.imagify-fts-header p{margin:0;color:#FFF}#imagify-add-themes-to-custom-folder strong,.imagify-fts-header strong{color:#40B1D0;font-weight:700}.imagify-fts-content{padding:16px;background:#F4F7F9;border:1px solid #CDD0D4;border-top:0}.imagify-fts-content p{margin-top:0}.imagify-kindof-title{margin-top:2em;padding:0 0 10px;border-bottom:1px solid #D2D3D6;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;font-weight:700}.imagify-settings .imagify-button-mini{padding:4px 13px 4px 10px}.imagify-settings .imagify-button-mini .dashicons-plus{vertical-align:-7.5px}.imagify-settings .imagify-button-mini.imagify-button-primary:focus,.imagify-settings .imagify-button-mini.imagify-button-primary:hover{color:#FFF}p.imagify-custom-folder-line{position:relative;margin:0;padding:12px 15px;color:#4A5362;font-weight:500;-webkit-transition:all .75s;-o-transition:all .75s;transition:all .75s}.imagify-custom-folder-line:first-child,.imagify-empty-folder{margin-top:-.5em}.imagify-custom-folder-line.imagify-will-remove{background:#C51162;color:#FFF;-webkit-transform:translateX(-120px);-ms-transform:translateX(-120px);transform:translateX(-120px);opacity:0}.imagify-custom-folder-line+.imagify-custom-folder-line{border-top:1px solid #E9EFF2}.imagify-custom-folders-remove{position:absolute;right:0;top:6px;border:0;padding:5px 10px 4px;-webkit-box-shadow:none;box-shadow:none;color:#7A8996;border-radius:16px;font-size:13px;line-height:18px;background:#FFF;-webkit-transition:all .275s;-o-transition:all .275s;transition:all .275s;cursor:pointer}.imagify-custom-folders-remove-text{max-width:0;overflow:hidden;white-space:nowrap;display:inline-block;-webkit-transform:scale(0);-ms-transform:scale(0);transform:scale(0);opacity:0;-webkit-transition:all .275s;-o-transition:all .275s;transition:all .275s}.imagify-custom-folders-remove:focus,.imagify-custom-folders-remove:hover{background:#D9EFF6;color:#225E6E}.imagify-custom-folders-remove:focus .imagify-custom-folders-remove-text,.imagify-custom-folders-remove:hover .imagify-custom-folders-remove-text{max-width:6em;-webkit-transform:scale(1);-ms-transform:scale(1);transform:scale(1);opacity:1}.imagify-settings .progress{height:8px;margin-top:1em;background:#343A49}.imagify-settings .bar{position:relative;width:1px;height:8px;background:#46B1CE;-webkit-transition:width .5s;-o-transition:width .5s;transition:width .5s}.imagify-settings .percent{position:absolute;top:6px;right:0;padding:0 5px;line-height:1.85;font-size:14px;font-weight:700;color:#40B1D0}.dashicons.rotate{-webkit-animation:icon-rotate 2.6s infinite linear;animation:icon-rotate 2.6s infinite linear}@-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-add-custom-folder+.imagify-loader{display:none;vertical-align:middle}.imagify-add-custom-folder[disabled]+.imagify-loader{display:inline-block}.imagify-folders-information{position:relative;margin:-5px 0 20px;padding:10px 10px 10px 40px;text-align:left;background:#F2F2F2}.imagify-folders-information i{position:absolute;left:10px;top:50%;margin-top:-10px}.imagify-folders-tree{margin:0;text-align:left}.imagify-folders-tree li{clear:left}.imagify-folders-tree .imagify-folder{-webkit-box-sizing:border-box;box-sizing:border-box;position:relative;width:48px;z-index:2;float:left;margin-top:-3px;padding:0 8px 0 0;border:0;background:0 0!important;-webkit-box-shadow:none;box-shadow:none;cursor:pointer;-webkit-transition:all .275s;-o-transition:all .275s;transition:all .275s}.imagify-folders-tree span.imagify-folder{padding-left:1.5px}.imagify-folders-tree .imagify-folder:before{content:"+";display:inline-block;width:13px;height:21px;font-size:1.5em;vertical-align:.15em}.imagify-folders-tree span.imagify-folder:before{content:''}.imagify-folders-tree .imagify-folder-icon path{-webkit-transition:all .275s;-o-transition:all .275s;transition:all .275s}.imagify-folders-tree .imagify-is-open .imagify-folder-icon path{stroke:#7A8996}.imagify-folders-tree .imagify-is-open.imagify-folder:before{content:"-";color:#7A8996}.imagify-folders-tree .imagify-is-open~label{color:#7A8996}.imagify-folders-tree .imagify-folder .imagify-loader,.imagify-folders-tree .imagify-folder.imagify-loading:before{display:none}.imagify-folders-tree .imagify-folder.imagify-loading .imagify-loader{display:inline-block;width:13px;height:21px;font-size:1.5em;vertical-align:.15em}.imagify-folders-tree .imagify-folder.imagify-loading .imagify-loader img{display:inline-block;width:100%;height:auto;vertical-align:middle}.imagify-folders-tree button.imagify-folder:focus,.imagify-folders-tree button.imagify-folder:focus path,.imagify-folders-tree button.imagify-folder:hover,.imagify-folders-tree button.imagify-folder:hover path{color:#3694AE;stroke:#3694AE}.imagify-folders-tree .imagify-folder.disabled,.imagify-folders-tree .imagify-folder:disabled{color:#7f7f7f}.imagify-swal-content .imagify-folders-tree label{position:relative;display:block;width:100%;padding:3px 0;font-size:15px;font-weight:500;vertical-align:top;-webkit-transition:all .475s;-o-transition:all .475s;transition:all .475s}.imagify-folders-tree input:focus+label,.imagify-swal-content .imagify-folders-tree label:hover{background:#F4F7F9}.imagify-folders-tree .imagify-folder-already-selected input:focus+label,.imagify-folders-tree .imagify-folder-already-selected label,.imagify-folders-tree .imagify-folder-already-selected label:hover{background:#40B1D0;color:#FFF;border-radius:3px;cursor:default}.imagify-folders-tree .imagify-folder-already-selected button,.imagify-folders-tree .imagify-folder-already-selected button path{color:#FFF;stroke:#FFF;cursor:default}.imagify-folders-tree .imagify-folder-already-selected button:focus path,.imagify-folders-tree .imagify-folder-already-selected button:hover path{stroke:#FFF}.imagify-folders-tree .imagify-folder-already-selected button:before{content:''}.imagify-add-ed-folder{position:absolute;top:0;bottom:0;right:0;font-size:11px;text-transform:uppercase;letter-spacing:.02em;word-spacing:.02em;color:#3694AE;background:#F4F7F9;opacity:0;-webkit-transform:translateX(15px);-ms-transform:translateX(15px);transform:translateX(15px);-webkit-transition:all .275s;-o-transition:all .275s;transition:all .275s}.imagify-folder-already-selected .imagify-add-ed-folder,input:checked+label .imagify-add-ed-folder,input:focus+label .imagify-add-ed-folder,label:hover .imagify-add-ed-folder{opacity:1;-webkit-transform:translateX(0);-ms-transform:translateX(0);transform:translateX(0)}input:checked+label .imagify-add-ed-folder{background:#FFF}input:checked+label:hover .imagify-add-ed-folder,input:checked:focus+label .imagify-add-ed-folder{background:#F4F7F9}.imagify-folder-already-selected .imagify-add-ed-folder{background:#40B1D0;color:#FFF}.imagify-fake-checkbox{position:relative;display:inline-block;width:14px;height:14px;margin:3.5px 15px 0 5px;border:1.5px solid #3694AE;border-radius:3px;vertical-align:-4px}.imagify-fake-checkbox:after{position:absolute;left:1px;top:0;content:"✓";color:#3694AE;font-size:14px;line-height:.9;font-style:normal;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Oxygen-Sans,Ubuntu,Cantarell,"Helvetica Neue",sans-serif;opacity:0;-webkit-transform:scale(0);-ms-transform:scale(0);transform:scale(0);-webkit-transition:all .475s;-o-transition:all .475s;transition:all .475s}.imagify-folder-already-selected .imagify-fake-checkbox:after,input:checked+label .imagify-fake-checkbox:after{opacity:1;-webkit-transform:scale(1);-ms-transform:scale(1);transform:scale(1)}.imagify-folder-already-selected .imagify-fake-checkbox{border-color:#40B1D0}.imagify-folder-already-selected .imagify-fake-checkbox:after{color:#FFF}.imagify-folders-sub-tree{position:relative;margin-left:.75em;padding-top:.6em;padding-left:1em;border-left:1px dotted rgba(98,110,123,.3)}.imagify-folders-sub-tree li{position:relative;margin-bottom:4px}.imagify-folders-sub-tree li:before{content:"";position:absolute;top:12px;left:-1em;height:1px;width:.9em;border-top:1px dotted rgba(98,110,123,.3)}.imagify-folders-sub-tree li:last-child:after{content:"";position:absolute;left:-1.1em;bottom:0;height:11px;width:3px;background:#FFF}.imagify-empty-folder em{font-size:12px;font-weight:500;color:#A2AFBC}
1
+ .wrap.imagify-settings{margin-right:0}.imagify-settings.imagify-have-rocket{margin-right:20px}#imagify-check-api-container{display:block;margin-top:6px;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 .imagify-icon{font-size:1.8em;margin-right:3px;margin-left:1px;color:#8BC34A;vertical-align:-2px}.imagify-account-info-col .imagify-api-line{padding:22px 26px;background:#343A49}.imagify-api-line label,p.imagify-api-key-invite-title{display:block;margin-bottom:6px;font-size:14px;text-transform:uppercase;letter-spacing:.02em;font-weight:700;color:#343A49}.imagify-account-info-col .imagify-api-line label{color:#E5EBEF;display:inline-block}.imagify-api-line.imagify-api-line input[type=text]{width:100%;padding:6px 10px;border:1px solid #40B1D0;font-family:"PT Mono",Consolas,monospace;font-size:14px;letter-spacing:.01em;font-weight:700;color:#40B1D0;background:0 0;-webkit-box-shadow:none;box-shadow:none}.imagify-no-api-key .imagify-api-line{margin:3em 0 0;padding:2em 0 0}.imagify-no-api-key .imagify-api-line input[type=text]{margin-top:5px;width:400px;max-width:100%}.imagify-settings .imagify-no-api-key div.submit.submit{border:0;padding:0 16px;margin-top:0;background:#FFF}.imagify-settings .imagify-no-api-key div.submit.submit p{padding-bottom:0}.imagify-options-title{margin:.75em 0 0;font-size:24px;letter-spacing:.02em;font-weight:700;color:#343A49}.imagify-options-subtitle{padding-bottom:.3em;margin-bottom:20px;border-bottom:1px solid #D2D3D6;font-size:14px;letter-spacing:.01em;font-weight:700;text-transform:uppercase;color:#626E7B}.imagify-options-subtitle a{font-size:12px;color:#338EA6;text-transform:none;letter-spacing:0}.imagify-options-subtitle .imagify-info{margin-left:15px}.imagify-setting-line{border-top:1px solid #D2D3D6;padding:25px 0 13px;margin:1em 0}.imagify-options-subtitle+.imagify-setting-line{border-top:0;padding-top:8px}.imagify-setting-optim-level{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-align:center;-ms-flex-align:center;align-items:center;padding:8px 0 18px}.imagify-setting-optim-level>p{margin:0}.imagify-setting-optim-level .imagify-inline-options{-ms-flex-preferred-size:60%;flex-basis:60%;-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;width:auto;display:-webkit-box;display:-ms-flexbox;display:flex;background:#2E3243;border-radius:3px}.imagify-setting-optim-level .imagify-inline-options label{display:block!important;width:100%;font-size:14px!important;border-radius:3px!important}.imagify-setting-optim-level .imagify-visual-comparison-text{-ms-flex-preferred-size:40%;flex-basis:40%;-ms-flex-negative:1;flex-shrink:1;padding-left:20px;margin-top:20px;color:#626E7B;-webkit-box-sizing:border-box;box-sizing:border-box}.imagify-setting-optim-level.imagify-setting-optim-level .imagify-visual-comparison-btn{padding-top:5px;margin-top:2px;border-radius:2px;text-transform:none;letter-spacing:0;text-shadow:none!important}@media (max-width:782px){.imagify-settings .form-table th{padding-top:2em;padding-bottom:.5em}}.imagify-settings .form-table td{vertical-align:top}.imagify-settings .form-table th span{cursor:pointer}.imagify-middle th{padding-top:35px}.imagify-settings div.submit.submit{border-top:1px solid #D9D9D9;margin-top:2em;padding:18px 0 7px 30px}.imagify-settings .hidden+div.submit.submit{margin-top:-1px}.imagify-settings p.submit{float:left;margin-top:0}.imagify-settings p.submit .button{margin:0 5px}.imagify-sub-header th{text-align:right}.imagify-sub-header .form-table{margin:0}.imagify-sub-header td,.imagify-sub-header th{padding-top:0;padding-bottom:0}.imagify-sub-header [for=api_key]{padding-top:5px}@media (max-width:1120px){.imagify-settings .imagify-logo-block{margin-right:0}.imagify-settings .imagify-rate-us.imagify-rate-us{margin:1em 0 -1em}}.imagify-settings .imagify-rate-us{margin-right:25px;margin-left:auto}.imagify-visual-label,label+.imagify-info{display:inline-block;width:550px;max-width:calc(100% - 38px);margin-left:38px;padding-right:25px}.imagify-options-line{-webkit-transition:opacity .3s;-o-transition:opacity .3s;transition:opacity .3s}label~.imagify-options-line{display:block;margin:8px 0 20px 40px;font-size:14px}.imagify-options-line+.imagify-info{margin-left:38px}label+.imagify-info{margin-top:10px}.imagify-options-line+.imagify-info+.imagify-options-line{margin-top:20px}.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,:checked+label~.imagify-options-line :checked+label~.imagify-options-line .imagify-faded{opacity:.5}.imagify-settings.imagify-settings :not(:checked)+label~.imagify-options-line :not(:checked)+label~.imagify-options-line,.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-radio-group+.imagify-options-line{display:block;margin:0 0 0 1.7em;font-size:14px}.imagify-checkbox-marged{max-width:500px;margin-left:45px}.imagify-settings [type=text],.imagify-settings [type=number]{width:20em;max-width:100%;height:auto;padding:6px;margin:0 6px;border:1px solid #8BA6B4;-webkit-box-shadow:none;box-shadow:none;border-radius:2px;color:#338EA6;font-weight:700}.imagify-settings [type=number]{width:5em}.imagify-settings ::-webkit-input-placeholder{color:#B1B1B1;font-weight:400}.imagify-settings ::-moz-placeholder{color:#B1B1B1;font-weight:400;opacity:1}.imagify-settings :-ms-input-placeholder{color:#B1B1B1;font-weight:400}.imagify-settings :-moz-placeholder{color:#B1B1B1;font-weight:400;opacity:1}.imagify-settings ::-ms-input-placeholder{color:#B1B1B1;font-weight:400}.imagify-settings ::placeholder{color:#B1B1B1;font-weight:400}.imagify-menu-bar-img{-webkit-box-sizing:border-box;box-sizing:border-box;max-width:100%;width:350px;height:auto;margin-top:0;border:1px solid #8BA6B4}.imagify-col.imagify-main{float:left;width:calc(100% - 320px);padding-left:0;padding-right:0}.imagify-have-rocket .imagify-main{float:none;width:1265px;max-width:100%}.imagify-sidebar{float:left;width:300px;max-width:100%}.imagify-sidebar-section{border:1px solid #BBB;background:#1F2332;position:relative;padding:10px 20px;text-align:center;color:#F2F2F2}.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-close{position:absolute;top:8px;right:12px;text-decoration:none}.imagify-sidebar-close i{font-size:2em;color:rgba(255,255,255,.5)}p.imagify-sidebar-title{margin:1.2em 0 1.5em;text-align:left;color:#F56640;text-transform:uppercase;letter-spacing:.015em;word-spacing:.015em;font-weight:700}p.imagify-sidebar-description{margin:1.5em 0;text-align:left;font-weight:500;color:#F2F2F2}.imagify-sidebar-description strong{color:#39CE9A}.imagify-rocket-cta-promo{display:block;padding:8px 10px;margin:1.3em 0 .5em;border:2px dashed #F56640;border-radius:3px;font-size:18px;font-weight:700;color:#F56640}.imagify-rocket-cta-promo strong,a.btn-rocket{color:#F2F2F2}a.btn-rocket{display:block;font-size:15px;padding:10px 12px;margin:0 0 1.5em;background:#F56640;border-radius:3px;text-transform:uppercase;font-weight:700;text-decoration:none}a.btn-rocket:focus,a.btn-rocket:hover{background:#AC2B15}.imagify-sidebar-section ul{margin-top:20px}.imagify-sidebar-section li{position:relative;margin:1.2em 0;padding-left:25px;text-align:left}.imagify-sidebar-section li:before{content:"✓";position:absolute;left:0;top:0;color:#39CE9A;font-size:18px}label[for=imagify_admin_bar_menu],label[for=imagify_partner_links]{font-weight:400!important;color:#626E7B!important}.imagify-select-all-buttons{margin-top:8px}.imagify-link-like.imagify-select-all{font-weight:700;font-size:12px;color:#3694AE}.imagify-select-all.imagify-is-inactive{color:inherit;text-decoration:none;cursor:default}.imagify-fts-header{padding:10px 16px;background:#343A49;color:#FFF}.imagify-fts-header i{font-size:1.8em;margin-right:12px}.imagify-fts-header p{margin:0;color:#FFF}#imagify-add-themes-to-custom-folder strong,.imagify-fts-header strong{color:#40B1D0;font-weight:700}.imagify-fts-content{padding:16px;background:#F4F7F9;border:1px solid #CDD0D4;border-top:0}.imagify-fts-content p{margin-top:0}.imagify-kindof-title{margin-top:2em;padding:0 0 10px;border-bottom:1px solid #D2D3D6;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;font-weight:700}.imagify-settings .imagify-button-mini{padding:4px 13px 4px 10px}.imagify-settings .imagify-button-mini .dashicons-plus{vertical-align:-7.5px}.imagify-settings .imagify-button-mini.imagify-button-primary:focus,.imagify-settings .imagify-button-mini.imagify-button-primary:hover{color:#FFF}p.imagify-custom-folder-line{position:relative;margin:0;padding:12px 15px;color:#4A5362;font-weight:500;-webkit-transition:all .75s;-o-transition:all .75s;transition:all .75s}.imagify-custom-folder-line:first-child,.imagify-empty-folder{margin-top:-.5em}.imagify-custom-folder-line.imagify-will-remove{background:#C51162;color:#FFF;-webkit-transform:translateX(-120px);-ms-transform:translateX(-120px);transform:translateX(-120px);opacity:0}.imagify-custom-folder-line+.imagify-custom-folder-line{border-top:1px solid #E9EFF2}.imagify-custom-folders-remove{position:absolute;right:0;top:6px;border:0;padding:5px 10px 4px;-webkit-box-shadow:none;box-shadow:none;color:#7A8996;border-radius:16px;font-size:13px;line-height:18px;background:#FFF;-webkit-transition:all .275s;-o-transition:all .275s;transition:all .275s;cursor:pointer}.imagify-custom-folders-remove-text{max-width:0;overflow:hidden;white-space:nowrap;display:inline-block;-webkit-transform:scale(0);-ms-transform:scale(0);transform:scale(0);opacity:0;-webkit-transition:all .275s;-o-transition:all .275s;transition:all .275s}.imagify-custom-folders-remove:focus,.imagify-custom-folders-remove:hover{background:#D9EFF6;color:#225E6E}.imagify-custom-folders-remove:focus .imagify-custom-folders-remove-text,.imagify-custom-folders-remove:hover .imagify-custom-folders-remove-text{max-width:6em;-webkit-transform:scale(1);-ms-transform:scale(1);transform:scale(1);opacity:1}.imagify-settings .progress{height:8px;margin-top:1em;background:#343A49}.imagify-settings .bar{position:relative;width:1px;height:8px;background:#46B1CE;-webkit-transition:width .5s;-o-transition:width .5s;transition:width .5s}.imagify-settings .percent{position:absolute;top:6px;right:0;padding:0 5px;line-height:1.85;font-size:14px;font-weight:700;color:#40B1D0}.dashicons.rotate{-webkit-animation:icon-rotate 2.6s infinite linear;animation:icon-rotate 2.6s infinite linear}@-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-add-custom-folder+.imagify-loader{display:none;vertical-align:middle}.imagify-add-custom-folder[disabled]+.imagify-loader{display:inline-block}.imagify-folders-information{position:relative;margin:-5px 0 20px;padding:10px 10px 10px 40px;text-align:left;background:#F2F2F2}.imagify-folders-information i{position:absolute;left:10px;top:50%;margin-top:-10px}.imagify-folders-tree{margin:0;text-align:left}.imagify-folders-tree li{clear:left}.imagify-folders-tree .imagify-folder{-webkit-box-sizing:border-box;box-sizing:border-box;position:relative;width:48px;z-index:2;float:left;margin-top:-3px;padding:0 8px 0 0;border:0;background:0 0!important;-webkit-box-shadow:none;box-shadow:none;cursor:pointer;-webkit-transition:all .275s;-o-transition:all .275s;transition:all .275s}.imagify-folders-tree span.imagify-folder{padding-left:1.5px}.imagify-folders-tree .imagify-folder:before{content:"+";display:inline-block;width:13px;height:21px;font-size:1.5em;vertical-align:.15em}.imagify-folders-tree span.imagify-folder:before{content:''}.imagify-folders-tree .imagify-folder-icon path{-webkit-transition:all .275s;-o-transition:all .275s;transition:all .275s}.imagify-folders-tree .imagify-is-open .imagify-folder-icon path{stroke:#7A8996}.imagify-folders-tree .imagify-is-open.imagify-folder:before{content:"-";color:#7A8996}.imagify-folders-tree .imagify-is-open~label{color:#7A8996}.imagify-folders-tree .imagify-folder .imagify-loader,.imagify-folders-tree .imagify-folder.imagify-loading:before{display:none}.imagify-folders-tree .imagify-folder.imagify-loading .imagify-loader{display:inline-block;width:13px;height:21px;font-size:1.5em;vertical-align:.15em}.imagify-folders-tree .imagify-folder.imagify-loading .imagify-loader img{display:inline-block;width:100%;height:auto;vertical-align:middle}.imagify-folders-tree button.imagify-folder:focus,.imagify-folders-tree button.imagify-folder:focus path,.imagify-folders-tree button.imagify-folder:hover,.imagify-folders-tree button.imagify-folder:hover path{color:#3694AE;stroke:#3694AE}.imagify-folders-tree .imagify-folder.disabled,.imagify-folders-tree .imagify-folder:disabled{color:#7f7f7f}.imagify-swal-content .imagify-folders-tree label{position:relative;display:block;width:100%;padding:3px 0;font-size:15px;font-weight:500;vertical-align:top;-webkit-transition:all .475s;-o-transition:all .475s;transition:all .475s}.imagify-folders-tree input:focus+label,.imagify-swal-content .imagify-folders-tree label:hover{background:#F4F7F9}.imagify-folders-tree .imagify-folder-already-selected input:focus+label,.imagify-folders-tree .imagify-folder-already-selected label,.imagify-folders-tree .imagify-folder-already-selected label:hover{background:#40B1D0;color:#FFF;border-radius:3px;cursor:default}.imagify-folders-tree .imagify-folder-already-selected button,.imagify-folders-tree .imagify-folder-already-selected button path{color:#FFF;stroke:#FFF;cursor:default}.imagify-folders-tree .imagify-folder-already-selected button:focus path,.imagify-folders-tree .imagify-folder-already-selected button:hover path{stroke:#FFF}.imagify-folders-tree .imagify-folder-already-selected button:before{content:''}.imagify-add-ed-folder{position:absolute;top:0;bottom:0;right:0;font-size:11px;text-transform:uppercase;letter-spacing:.02em;word-spacing:.02em;color:#3694AE;background:#F4F7F9;opacity:0;-webkit-transform:translateX(15px);-ms-transform:translateX(15px);transform:translateX(15px);-webkit-transition:all .275s;-o-transition:all .275s;transition:all .275s}.imagify-folder-already-selected .imagify-add-ed-folder,input:checked+label .imagify-add-ed-folder,input:focus+label .imagify-add-ed-folder,label:hover .imagify-add-ed-folder{opacity:1;-webkit-transform:translateX(0);-ms-transform:translateX(0);transform:translateX(0)}input:checked+label .imagify-add-ed-folder{background:#FFF}input:checked+label:hover .imagify-add-ed-folder,input:checked:focus+label .imagify-add-ed-folder{background:#F4F7F9}.imagify-folder-already-selected .imagify-add-ed-folder{background:#40B1D0;color:#FFF}.imagify-fake-checkbox{position:relative;display:inline-block;width:14px;height:14px;margin:3.5px 15px 0 5px;border:1.5px solid #3694AE;border-radius:3px;vertical-align:-4px}.imagify-fake-checkbox:after{position:absolute;left:1px;top:0;content:"✓";color:#3694AE;font-size:14px;line-height:.9;font-style:normal;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Oxygen-Sans,Ubuntu,Cantarell,"Helvetica Neue",sans-serif;opacity:0;-webkit-transform:scale(0);-ms-transform:scale(0);transform:scale(0);-webkit-transition:all .475s;-o-transition:all .475s;transition:all .475s}.imagify-folder-already-selected .imagify-fake-checkbox:after,input:checked+label .imagify-fake-checkbox:after{opacity:1;-webkit-transform:scale(1);-ms-transform:scale(1);transform:scale(1)}.imagify-folder-already-selected .imagify-fake-checkbox{border-color:#40B1D0}.imagify-folder-already-selected .imagify-fake-checkbox:after{color:#FFF}.imagify-folders-sub-tree{position:relative;margin-left:.75em;padding-top:.6em;padding-left:1em;border-left:1px dotted rgba(98,110,123,.3)}.imagify-folders-sub-tree li{position:relative;margin-bottom:4px}.imagify-folders-sub-tree li:before{content:"";position:absolute;top:12px;left:-1em;height:1px;width:.9em;border-top:1px dotted rgba(98,110,123,.3)}.imagify-folders-sub-tree li:last-child:after{content:"";position:absolute;left:-1.1em;bottom:0;height:11px;width:3px;background:#FFF}.imagify-empty-folder em{font-size:12px;font-weight:500;color:#A2AFBC}@media (max-width:782px){.imagify-settings.imagify-have-rocket{margin-right:10px}.imagify-visual-label,label+.imagify-info{max-width:calc(100% - 65px);padding-right:0}.imagify-options-title{font-size:22px}.imagify-user-plan-label{margin-right:-5px}.imagify-col.imagify-main{width:100%;padding-right:10px}.imagify-col+.imagify-col{padding:0 10px 0 0}.imagify-no-api-key .imagify-api-line input[type=text]{margin-left:0}}@media (max-width:513px){.imagify-setting-optim-level .imagify-visual-comparison-text{margin-top:20px}}
assets/css/pricing-modal.css CHANGED
@@ -1152,3 +1152,189 @@ p.imagify-modal-sidebar-title.imagify-modal-sidebar-title {
1152
  float: right;
1153
  font-weight: bold;
1154
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1152
  float: right;
1153
  font-weight: bold;
1154
  }
1155
+ @media (max-width: 782px) {
1156
+ .imagify-payment-modal .imagify-modal-content{
1157
+ width: 90%;
1158
+ min-width: auto;
1159
+ -webkit-flex-direction: column;
1160
+ -ms-flex-direction: column;
1161
+ flex-direction: column;
1162
+ -webkit-box-direction: normal;
1163
+ -webkit-box-orient: vertical;
1164
+ -moz-box-direction: normal;
1165
+ -moz-box-orient: vertical;
1166
+ align-items: center;
1167
+ }
1168
+ .imagify-payment-modal .imagify-modal-main{
1169
+ width: 100%;
1170
+ }
1171
+ .imagify-payment-modal .imagify-modal-sidebar{
1172
+ width: 100%;
1173
+
1174
+ }
1175
+ .imagify-modal-section.section-gray{
1176
+ padding: 10px 10px 15px;
1177
+ }
1178
+ .imagify-modal-section{
1179
+ padding: 0 10px;
1180
+ }
1181
+ .imagify-submit-line{
1182
+ -webkit-flex-direction: column;
1183
+ -ms-flex-direction: column;
1184
+ flex-direction: column;
1185
+ -webkit-box-direction: normal;
1186
+ -webkit-box-orient: vertical;
1187
+ -moz-box-direction: normal;
1188
+ -moz-box-orient: vertical;
1189
+ align-items: center;
1190
+ }
1191
+ .imagify-coupon-section{
1192
+ -webkit-flex-direction: column;
1193
+ -ms-flex-direction: column;
1194
+ flex-direction: column;
1195
+ -webkit-box-direction: normal;
1196
+ -webkit-box-orient: vertical;
1197
+ -moz-box-direction: normal;
1198
+ -moz-box-orient: vertical;
1199
+ align-items: center;
1200
+ margin-bottom: 20px;
1201
+ }
1202
+ .imagify-coupon-section .imagify-coupon-text{
1203
+ text-align: center;
1204
+ width: 100%;
1205
+ padding: 0;
1206
+ margin-bottom: 20px;
1207
+ }
1208
+
1209
+ .imagify-modal-cols{
1210
+ -webkit-flex-direction: column;
1211
+ -ms-flex-direction: column;
1212
+ flex-direction: column;
1213
+ -webkit-box-direction: normal;
1214
+ -webkit-box-orient: vertical;
1215
+ -moz-box-direction: normal;
1216
+ -moz-box-orient: vertical;
1217
+ align-items: center;
1218
+ }
1219
+ .imagify-col{
1220
+ padding: 0;
1221
+ float: none;
1222
+ width: 100%;
1223
+ }
1224
+ .imagify-payment-modal .imagify-iconed{
1225
+ margin: 1.5em auto;
1226
+ max-width: 260px;
1227
+ }
1228
+ .imagify-offer-header{
1229
+ padding: 0;
1230
+ }
1231
+ .imagify-offer-header .imagify-inline-options input[type="radio"]:not(:checked) + label,
1232
+ .imagify-offer-header .imagify-inline-options input[type="radio"]:checked + label{
1233
+ padding: 7px 15px;
1234
+ }
1235
+ .imagify-offer-header .imagify-inline-options input[type="radio"]:checked + label{
1236
+ padding: 7px 15px;
1237
+ }
1238
+ .imagify-offer-header .imagify-offer-title.imagify-switch-my .imagify-monthly,
1239
+ .imagify-offer-header .imagify-offer-title.imagify-switch-my .imagify-yearly{
1240
+ padding: 10px 5px;
1241
+ font-size: 12px;
1242
+ }
1243
+ .imagify-offer-size{
1244
+ font-size: 18px;
1245
+ }
1246
+ .imagify-col-other-actions{
1247
+ padding: 10px;
1248
+ text-align: center;
1249
+ }
1250
+ .imagify-2-free{
1251
+ padding: 2px 5px;
1252
+ }
1253
+ .imagify-2-free.imagify-b-right {
1254
+ position: absolute;
1255
+ bottom: 100%;
1256
+ left: 0;
1257
+ right: 0;
1258
+ padding: 2px 5px;
1259
+ margin-bottom: 0px;
1260
+ margin-left: 0px;
1261
+ font-size: 0.8em;
1262
+ letter-spacing: 0;
1263
+ text-transform: none;
1264
+ text-align: center;
1265
+ color: #FFF;
1266
+ background: #10121A;
1267
+ border-radius: 2px;
1268
+ }
1269
+ .imagify-2-free.imagify-b-right:after{
1270
+ content: "";
1271
+ position: absolute;
1272
+ left: 50%;
1273
+ top: unset;
1274
+ bottom: -6px;
1275
+ margin-left: -3px;
1276
+ border-top: 3px solid #10121A;
1277
+ border-left: 3px solid transparent;
1278
+ border-right: 3px solid transparent;
1279
+ }
1280
+ div.imagify-col-price{
1281
+ -webkit-flex-direction: column;
1282
+ -ms-flex-direction: column;
1283
+ flex-direction: column;
1284
+ -webkit-box-direction: normal;
1285
+ -webkit-box-orient: vertical;
1286
+ -moz-box-direction: normal;
1287
+ -moz-box-orient: vertical;
1288
+ align-items: center;
1289
+ }
1290
+ .imagify-flex-table .imagify-price-complement{
1291
+ padding: 5px 0 0 0;
1292
+ margin: 0;
1293
+ text-align: center;
1294
+ }
1295
+ div.imagify-col-details{
1296
+ padding: 10px 0px 10px 10px;
1297
+ }
1298
+ .imagify-pricing-table .imagify-col-other-actions{
1299
+ padding: 0 10px 0 0;
1300
+ }
1301
+ .imagify-pricing-table .imagify-button-secondary{
1302
+ font-size: 12px;
1303
+ white-space: normal;
1304
+ line-height: 14px;
1305
+ padding: 10px;
1306
+ }
1307
+ .imagify-price-big{
1308
+ font-size: 24px;
1309
+ }
1310
+ span.imagify-price-mini{
1311
+ font-size: 12px;
1312
+ }
1313
+ .imagify-col-checkbox label{
1314
+ padding-left: 30px !important;
1315
+ }
1316
+ .medium.imagify-checkbox:not(:checked) + label:before,
1317
+ .medium.imagify-checkbox:checked + label:before{
1318
+ width: 15px;
1319
+ height: 15px;
1320
+ }
1321
+ div.imagify-col-checkbox{
1322
+ padding: 0;
1323
+ }
1324
+ .imagify-offer-monthly .imagify-flex-table .imagify-price-block,
1325
+ .imagify-offer-monthlies .imagify-price-block{
1326
+ padding: 0;
1327
+ }
1328
+ .imagify-pricing-table{
1329
+ margin: 0 .5em;
1330
+ }
1331
+ .imagify-payment-modal .close-btn{
1332
+ top: 5px;
1333
+ right: 5px;
1334
+ }
1335
+ .imagify-col-checkbox .imagify-checkbox.imagify-checkbox:not(:checked) + label:after,
1336
+ .imagify-col-checkbox .imagify-checkbox.imagify-checkbox:checked + label:after{
1337
+ top: -1px;
1338
+ left: 10px;
1339
+ }
1340
+ }
assets/css/pricing-modal.min.css CHANGED
@@ -1 +1 @@
1
- .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-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-content.imagify-iframe-viewing .imagify-modal-sidebar,.imagify-modal-content.imagify-success-viewing .imagify-modal-sidebar{display:none}.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-modal-title .imagify-inner-sub-title{display:block;font-size:.56em}.imagify-analyzing .imagify-numbers-calc,.imagify-modal-section .imagify-loader,.imagify-modal-section.imagify-analyzing .imagify-modal-cols,.imagify-numbers-notcalc{display:none}.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-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-big-number{font-size:3.7em;margin:-3px 0;line-height:1}.imagify-popin-message{padding:5px 15px;text-align:left}.imagify-popin-message.imagify-error p{color:#FFF}.imagify-small-options{width:300px;margin:1em auto .5em;background:#338EA6;border-radius:4px}.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-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-cols:after{content:"";display:table;clear:both}.js .imagify-iframe-viewing .close-btn{display:none}.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-offer-selected,.imagify-offer-selected .imagify-checkbox.imagify-checkbox:checked+label:after,.imagify-offer-selected .imagify-checkbox.imagify-checkbox:not(:checked)+label:after,.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-col-other-actions{width:18.5%;text-align:right}.imagify-col-other-actions a{font-size:11px}.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 a,.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{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.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.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}
1
+ .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-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-content.imagify-iframe-viewing .imagify-modal-sidebar,.imagify-modal-content.imagify-success-viewing .imagify-modal-sidebar{display:none}.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-modal-title .imagify-inner-sub-title{display:block;font-size:.56em}.imagify-analyzing .imagify-numbers-calc,.imagify-modal-section .imagify-loader,.imagify-modal-section.imagify-analyzing .imagify-modal-cols,.imagify-numbers-notcalc{display:none}.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-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-big-number{font-size:3.7em;margin:-3px 0;line-height:1}.imagify-popin-message{padding:5px 15px;text-align:left}.imagify-popin-message.imagify-error p{color:#FFF}.imagify-small-options{width:300px;margin:1em auto .5em;background:#338EA6;border-radius:4px}.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-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-cols:after{content:"";display:table;clear:both}.js .imagify-iframe-viewing .close-btn{display:none}.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-offer-selected,.imagify-offer-selected .imagify-checkbox.imagify-checkbox:checked+label:after,.imagify-offer-selected .imagify-checkbox.imagify-checkbox:not(:checked)+label:after,.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-col-other-actions{width:18.5%;text-align:right}.imagify-col-other-actions a{font-size:11px}.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 a,.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{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.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.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}@media (max-width:782px){.imagify-payment-modal .imagify-modal-content,.imagify-submit-line{-ms-flex-direction:column;-webkit-box-direction:normal;-webkit-box-orient:vertical}.imagify-payment-modal .imagify-modal-content{width:90%;min-width:auto;flex-direction:column;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.imagify-payment-modal .imagify-modal-main,.imagify-payment-modal .imagify-modal-sidebar{width:100%}.imagify-modal-section.section-gray{padding:10px 10px 15px}.imagify-modal-section{padding:0 10px}.imagify-submit-line{flex-direction:column;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.imagify-coupon-section,.imagify-modal-cols{-ms-flex-direction:column;-webkit-box-direction:normal;-webkit-box-orient:vertical}.imagify-coupon-section{flex-direction:column;-webkit-box-align:center;-ms-flex-align:center;align-items:center;margin-bottom:20px}.imagify-coupon-section .imagify-coupon-text{text-align:center;width:100%;padding:0;margin-bottom:20px}.imagify-modal-cols{flex-direction:column;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.imagify-col{padding:0;float:none;width:100%}.imagify-payment-modal .imagify-iconed{margin:1.5em auto;max-width:260px}.imagify-offer-header{padding:0}.imagify-offer-header .imagify-inline-options input[type=radio]:checked+label,.imagify-offer-header .imagify-inline-options input[type=radio]:not(:checked)+label{padding:7px 15px}.imagify-offer-header .imagify-offer-title.imagify-switch-my .imagify-monthly,.imagify-offer-header .imagify-offer-title.imagify-switch-my .imagify-yearly{padding:10px 5px;font-size:12px}.imagify-offer-size{font-size:18px}.imagify-col-other-actions{padding:10px;text-align:center}.imagify-2-free{padding:2px 5px}.imagify-2-free.imagify-b-right{position:absolute;bottom:100%;left:0;right:0;padding:2px 5px;margin-bottom:0;margin-left:0;font-size:.8em;letter-spacing:0;text-transform:none;text-align:center;color:#FFF;background:#10121A;border-radius:2px}.imagify-2-free.imagify-b-right:after{content:"";position:absolute;left:50%;top:unset;bottom:-6px;margin-left:-3px;border-top:3px solid #10121A;border-left:3px solid transparent;border-right:3px solid transparent}div.imagify-col-price{-ms-flex-direction:column;flex-direction:column;-webkit-box-direction:normal;-webkit-box-orient:vertical;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.imagify-flex-table .imagify-price-complement{padding:5px 0 0;margin:0;text-align:center}div.imagify-col-details{padding:10px 0 10px 10px}.imagify-pricing-table .imagify-col-other-actions{padding:0 10px 0 0}.imagify-pricing-table .imagify-button-secondary{font-size:12px;white-space:normal;line-height:14px;padding:10px}.imagify-price-big{font-size:24px}span.imagify-price-mini{font-size:12px}.imagify-col-checkbox label{padding-left:30px!important}.medium.imagify-checkbox:checked+label:before,.medium.imagify-checkbox:not(:checked)+label:before{width:15px;height:15px}.imagify-offer-monthlies .imagify-price-block,.imagify-offer-monthly .imagify-flex-table .imagify-price-block,div.imagify-col-checkbox{padding:0}.imagify-pricing-table{margin:0 .5em}.imagify-payment-modal .close-btn{top:5px;right:5px}.imagify-col-checkbox .imagify-checkbox.imagify-checkbox:checked+label:after,.imagify-col-checkbox .imagify-checkbox.imagify-checkbox:not(:checked)+label:after{top:-1px;left:10px}}
assets/js/admin.js CHANGED
@@ -18,7 +18,7 @@ jQuery.extend( window.imagify, {
18
  jQuery( target ).css( 'display', 'flex' ).hide().fadeIn( 400 ).attr( {
19
  'aria-hidden': 'false',
20
  'tabindex': '0'
21
- } ).focus().removeAttr( 'tabindex' ).addClass( 'modal-is-open' );
22
 
23
  jQuery( 'body' ).addClass( 'imagify-modal-is-open' );
24
  },
@@ -84,7 +84,7 @@ jQuery.extend( window.imagify, {
84
  var $modal = $( this ).closest( '.imagify-modal' );
85
 
86
  if ( $modal.attr( 'aria-hidden' ) === 'false' ) {
87
- $modal.attr( 'tabindex', '0' ).focus().removeAttr( 'tabindex' );
88
  }
89
  } )
90
  // On click on dropped layer of modal, close modal.
18
  jQuery( target ).css( 'display', 'flex' ).hide().fadeIn( 400 ).attr( {
19
  'aria-hidden': 'false',
20
  'tabindex': '0'
21
+ } ).trigger('focus').removeAttr( 'tabindex' ).addClass( 'modal-is-open' );
22
 
23
  jQuery( 'body' ).addClass( 'imagify-modal-is-open' );
24
  },
84
  var $modal = $( this ).closest( '.imagify-modal' );
85
 
86
  if ( $modal.attr( 'aria-hidden' ) === 'false' ) {
87
+ $modal.attr( 'tabindex', '0' ).trigger('focus').removeAttr( 'tabindex' );
88
  }
89
  } )
90
  // On click on dropped layer of modal, close modal.
assets/js/admin.min.js CHANGED
@@ -1 +1 @@
1
- window.imagify=window.imagify||{},jQuery.extend(window.imagify,{concat:ajaxurl.indexOf("?")>0?"&":"?",log:function(a){void 0!==console&&console.log(a)},info:function(a){void 0!==console&&console.info(a)},openModal:function(a){var b=a.data("target")||a.attr("href");jQuery(b).css("display","flex").hide().fadeIn(400).attr({"aria-hidden":"false",tabindex:"0"}).focus().removeAttr("tabindex").addClass("modal-is-open"),jQuery("body").addClass("imagify-modal-is-open")},template:function(a){return void 0===_?"":_.memoize(function(b){var c,d={evaluate:/<#([\s\S]+?)#>/g,interpolate:/\{\{\{([\s\S]+?)\}\}\}/g,escape:/\{\{([^}]+?)\}\}(?!\})/g,variable:"data"};return function(){return c=c||_.template(jQuery("#tmpl-"+a).html(),null,d),b=b||{},c(b)}})},humanSize:function(a){var b,c=["B","kB","MB"];return 0===a?"0 kB":(b=parseInt(Math.floor(Math.log(a)/Math.log(1024)),10),(a/Math.pow(1024,b)).toFixed(2)+" "+c[b])}}),function(a,b,c,d){a(".imagify-modal").attr("aria-hidden","true"),a(b).on("click.imagify",".imagify-modal-trigger",function(b){b.preventDefault(),c.imagify.openModal(a(this))}).on("click.imagify",".imagify-modal .close-btn",function(){a(this).closest(".imagify-modal").fadeOut(400).attr("aria-hidden","true").removeClass("modal-is-open").trigger("modalClosed.imagify"),a("body").removeClass("imagify-modal-is-open")}).on("blur.imagify",".imagify-modal .close-btn",function(){var b=a(this).closest(".imagify-modal");"false"===b.attr("aria-hidden")&&b.attr("tabindex","0").focus().removeAttr("tabindex")}).on("click.imagify",".imagify-modal",function(b){a(b.target).filter(".modal-is-open").find(".close-btn").trigger("click.imagify")}).on("keydown.imagify",function(b){27===b.keyCode&&a(".imagify-modal.modal-is-open").length>0&&(b.preventDefault(),a(".imagify-modal.modal-is-open").find(".close-btn").trigger("click.imagify"))})}(jQuery,document,window);
1
+ window.imagify=window.imagify||{},jQuery.extend(window.imagify,{concat:ajaxurl.indexOf("?")>0?"&":"?",log:function(a){void 0!==console&&console.log(a)},info:function(a){void 0!==console&&console.info(a)},openModal:function(a){var b=a.data("target")||a.attr("href");jQuery(b).css("display","flex").hide().fadeIn(400).attr({"aria-hidden":"false",tabindex:"0"}).trigger("focus").removeAttr("tabindex").addClass("modal-is-open"),jQuery("body").addClass("imagify-modal-is-open")},template:function(a){return void 0===_?"":_.memoize(function(b){var c,d={evaluate:/<#([\s\S]+?)#>/g,interpolate:/\{\{\{([\s\S]+?)\}\}\}/g,escape:/\{\{([^}]+?)\}\}(?!\})/g,variable:"data"};return function(){return c=c||_.template(jQuery("#tmpl-"+a).html(),null,d),b=b||{},c(b)}})},humanSize:function(a){var b,c=["B","kB","MB"];return 0===a?"0 kB":(b=parseInt(Math.floor(Math.log(a)/Math.log(1024)),10),(a/Math.pow(1024,b)).toFixed(2)+" "+c[b])}}),function(a,b,c,d){a(".imagify-modal").attr("aria-hidden","true"),a(b).on("click.imagify",".imagify-modal-trigger",function(b){b.preventDefault(),c.imagify.openModal(a(this))}).on("click.imagify",".imagify-modal .close-btn",function(){a(this).closest(".imagify-modal").fadeOut(400).attr("aria-hidden","true").removeClass("modal-is-open").trigger("modalClosed.imagify"),a("body").removeClass("imagify-modal-is-open")}).on("blur.imagify",".imagify-modal .close-btn",function(){var b=a(this).closest(".imagify-modal");"false"===b.attr("aria-hidden")&&b.attr("tabindex","0").trigger("focus").removeAttr("tabindex")}).on("click.imagify",".imagify-modal",function(b){a(b.target).filter(".modal-is-open").find(".close-btn").trigger("click.imagify")}).on("keydown.imagify",function(b){27===b.keyCode&&a(".imagify-modal.modal-is-open").length>0&&(b.preventDefault(),a(".imagify-modal.modal-is-open").find(".close-btn").trigger("click.imagify"))})}(jQuery,document,window);
assets/js/bulk.js CHANGED
@@ -651,9 +651,9 @@ window.imagify = window.imagify || {};
651
 
652
  // Enable or disable the Optimization button.
653
  if ( $( '.imagify-bulk-table [name="group[]"]:checked' ).length ) {
654
- $( '#imagify-bulk-action' ).removeAttr( 'disabled' );
655
  } else {
656
- $( '#imagify-bulk-action' ).attr( 'disabled', 'disabled' );
657
  }
658
  },
659
 
@@ -690,7 +690,7 @@ window.imagify = window.imagify || {};
690
  maybeLaunchAllProcesses: function () {
691
  var $infosModal;
692
 
693
- if ( $( this ).attr( 'disabled' ) ) {
694
  return;
695
  }
696
 
@@ -743,7 +743,7 @@ window.imagify = window.imagify || {};
743
  skip = true;
744
 
745
  // Disable the button.
746
- $button.attr( 'disabled', 'disabled' ).find( '.dashicons' ).addClass( 'rotate' );
747
 
748
  // Add a message to be displayed when the user wants to quit the page.
749
  $w.on( 'beforeunload', this.getConfirmMessage );
@@ -1230,7 +1230,7 @@ window.imagify = window.imagify || {};
1230
 
1231
  // Enable (or not) the main button.
1232
  if ( $( '.imagify-bulk-table [name="group[]"]:checked' ).length ) {
1233
- $( '#imagify-bulk-action' ).removeAttr( 'disabled' ).find( '.dashicons' ).removeClass( 'rotate' );
1234
  } else {
1235
  $( '#imagify-bulk-action' ).find( '.dashicons' ).removeClass( 'rotate' );
1236
  }
651
 
652
  // Enable or disable the Optimization button.
653
  if ( $( '.imagify-bulk-table [name="group[]"]:checked' ).length ) {
654
+ $( '#imagify-bulk-action' ).prop( 'disabled', false );
655
  } else {
656
+ $( '#imagify-bulk-action' ).prop( 'disabled', true );
657
  }
658
  },
659
 
690
  maybeLaunchAllProcesses: function () {
691
  var $infosModal;
692
 
693
+ if ( $( this ).prop('disabled') ) {
694
  return;
695
  }
696
 
743
  skip = true;
744
 
745
  // Disable the button.
746
+ $button.prop( 'disabled', true ).find( '.dashicons' ).addClass( 'rotate' );
747
 
748
  // Add a message to be displayed when the user wants to quit the page.
749
  $w.on( 'beforeunload', this.getConfirmMessage );
1230
 
1231
  // Enable (or not) the main button.
1232
  if ( $( '.imagify-bulk-table [name="group[]"]:checked' ).length ) {
1233
+ $( '#imagify-bulk-action' ).prop( 'disabled', false ).find( '.dashicons' ).removeClass( 'rotate' );
1234
  } else {
1235
  $( '#imagify-bulk-action' ).find( '.dashicons' ).removeClass( 'rotate' );
1236
  }
assets/js/bulk.min.js CHANGED
@@ -1 +1 @@
1
- window.imagify=window.imagify||{},function(a,b){var c=a.propHooks.checked;a.propHooks.checked={set:function(b,d,e){var f;return f=void 0===c?b[e]=d:c(b,d,e),a(b).trigger("change.imagify"),f}},a.fn.imagifyHide=function(b,c){return b&&b>0?this.hide(b,function(){a(this).addClass("hidden").css("display",""),void 0!==c&&c()}):(this.addClass("hidden"),void 0!==c&&c()),this.attr("aria-hidden","true")},a.fn.imagifyShow=function(b,c){return void 0!==c&&c(),b&&b>0?this.show(b,function(){a(this).removeClass("hidden").css("display","")}):this.removeClass("hidden"),this.attr("aria-hidden","false")}}(jQuery),function(a,b,c,d){c.imagify.bulk={charts:{overview:{canvas:!1,donut:!1,data:{labels:[imagifyBulk.labels.overviewChartLabels.unoptimized,imagifyBulk.labels.overviewChartLabels.optimized,imagifyBulk.labels.overviewChartLabels.error],datasets:[{data:[],backgroundColor:["#10121A","#46B1CE","#C51162"],borderWidth:0}]}},files:{donuts:{}},share:{canvas:!1,donut:!1}},folderTypesQueue:[],status:{},displayedWaitMessage:!1,hasMultipleRows:!0,imagifyAction:"",processIsStopped:!1,processingMedia:[],globalGain:0,globalOriginalSize:0,globalOptimizedSize:0,folderTypesData:{},defaultThumb:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACEAAAAhBAMAAAClyt9cAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAABtQTFRFR3BMjo6Oh4eHqqqq4uLigoKC+fn5fn5+fHx8SBBv5wAAAAF0Uk5TAEDm2GYAAABWSURBVCjPY2BgEBIEAyERBhgQUoKAIAc0EXXjEDQRRTNzBzRdBokhaGoM2CQc0NQwJJegqWFgM3VAUSNsbGwugCKiqBQUpIAiAgICoyIDKyIIB0JAEQA54jRBweNV0AAAAABJRU5ErkJggg==",init:function(){var d=a(b);this.drawOverviewChart(),this.hasMultipleRows=a('.imagify-bulk-table [name="group[]"]').length>1,a(".imagify-selector-button").on("click.imagify",this.openSelectorFromButton),a(".imagify-selector-list input").on("change.imagify init.imagify",this.syncSelectorFromRadio).filter(":checked").trigger("init.imagify"),d.on("keypress.imagify click.imagify",this.closeSelectors),a('.imagify-bulk-table [name="group[]"]').on("change.imagify init.imagify",this.toggleOptimizationButton).trigger("init.imagify"),a(".imagify-show-table-details").on("click.imagify open.imagify close.imagify",this.toggleOptimizationDetails),a("#imagify-bulk-action").on("click.imagify",this.maybeLaunchAllProcesses),a(".imagify-share-networks a").on("click.imagify",this.share),a(c).on("processQueue.imagify",this.processQueue).on("optimizeFiles.imagify",this.optimizeFiles).on("queueEmpty.imagify",this.queueEmpty),imagifyBulk.ajaxActions.getStats&&a('.imagify-bulk-table [data-group-id="library"][data-context="wp"]').length&&(imagifyBulk.imagifybeatIDs.stats=!1),imagifyBulk.imagifybeatIDs.stats&&d.on("imagifybeat-send",this.addStatsImagifybeat).on("imagifybeat-tick",this.processStatsImagifybeat),d.on("imagifybeat-send",this.addQueueImagifybeat).on("imagifybeat-tick",this.processQueueImagifybeat),d.on("imagifybeat-send",this.addRequirementsImagifybeat).on("imagifybeat-tick",this.processRequirementsImagifybeat)},getAjaxUrl:function(a,b){var d=ajaxurl+c.imagify.concat+"_wpnonce="+imagifyBulk.ajaxNonce+"&action="+imagifyBulk.ajaxActions[a];return b&&b.context&&(d+="&context="+b.context),"getMediaIds"!==a&&"bulkProcess"!==a||(d+="&imagify_action="+c.imagify.bulk.imagifyAction),d},getFolderTypes:function(){return a.isEmptyObject(c.imagify.bulk.folderTypesData)?(a(".imagify-row-folder-type").each(function(){var b=a(this),d={groupID:b.data("group-id"),context:b.data("context")},e=d.groupID+"|"+d.context;c.imagify.bulk.folderTypesData[e]=d}),c.imagify.bulk.folderTypesData):c.imagify.bulk.folderTypesData},getConfirmMessage:function(){return imagifyBulk.labels.processing},closeLevelSelector:function(a,b){if(a&&a.length)return void 0!==b&&b>0?void c.setTimeout(function(){c.imagify.bulk.closeLevelSelector(a)},b):void a.attr("aria-hidden","true")},stopProcess:function(b,d){this.processIsStopped=!0,c.imagify.bulk.status[d.groupID]={isError:!0,id:b},a(c).trigger("queueEmpty.imagify")},hasBlockingError:function(b){return b=void 0!==b&&b,imagifyBulk.curlMissing?(b&&c.imagify.bulk.displayError({html:imagifyBulk.labels.curlMissing}),!0):imagifyBulk.editorMissing?(b&&c.imagify.bulk.displayError({html:imagifyBulk.labels.editorMissing}),!0):imagifyBulk.extHttpBlocked?(b&&c.imagify.bulk.displayError({html:imagifyBulk.labels.extHttpBlocked}),!0):imagifyBulk.apiDown?(b&&c.imagify.bulk.displayError({html:imagifyBulk.labels.apiDown}),!0):imagifyBulk.keyIsValid?!!imagifyBulk.isOverQuota&&(b&&c.imagify.bulk.displayError({title:imagifyBulk.labels.overQuotaTitle,html:a("#tmpl-imagify-overquota-alert").html(),type:"info",customClass:"imagify-swal-has-subtitle imagify-swal-error-header",showConfirmButton:!1}),!0):(b&&c.imagify.bulk.displayError({title:imagifyBulk.labels.invalidAPIKeyTitle,type:"info"}),!0)},displayError:function(b,c,d){var e={title:"",html:"",type:"error",customClass:"",width:620,padding:0,showCloseButton:!0,showConfirmButton:!0};a.isPlainObject(b)?d=a.extend({},e,b):(d=d||{},d=a.extend({},e,{title:b||"",html:c||""},d)),d.title=d.title||imagifyBulk.labels.error,d.customClass+=" imagify-sweet-alert",swal(d).catch(swal.noop)},displayErrorInRow:function(b,c){var d,e;return b=a(b()),d=b.find(".imagify-cell-status ~ td"),e=d.length,c=c||"",d.remove(),b.find(".imagify-cell-status").after('<td colspan="'+e+'">'+c+"</td>"),b},displayFolderRow:function(a,b){var d,e,f,g;return"resting"===a?(b.next(".imagify-row-waiting, .imagify-row-working").remove(),void b.imagifyShow()):(d=b.next(".imagify-row-waiting, .imagify-row-working"),"waiting"===a?(f="#d2d3d6",g=imagifyBulk.labels.waitingOtimizationsText):(f="#40b1d0",g=imagifyBulk.labels.imagesOptimizedText.replace("%s","<span>0</span>")),d.length?(d.hasClass("imagify-row-"+a)||(d.attr("class","imagify-row-"+a),d.find(".imagify-cell-checkbox svg").attr("fill",f),d.children(".imagify-cell-count-optimized").html(g)),b.imagifyHide(),void d.imagifyShow()):(d=b.clone().attr({class:"imagify-row-"+a,"aria-hidden":"false"}),e=c.imagify.template("imagify-spinner"),d.children(".imagify-cell-checkbox").html(e()).find("svg").attr("fill",f),d.children(".imagify-cell-title").html('<span class="imagify-cell-label">'+d.children(".imagify-cell-title").text()+"</span>"),d.children(".imagify-cell-count-optimized").html(g),d.children(".imagify-cell-count-errors, .imagify-cell-optimized-size, .imagify-cell-original-size, .imagify-cell-level").text(""),void b.imagifyHide().after(d)))},displayShareBox:function(){var b,d,e,f,g=imagifyBulk.labels.textToShare;if(!this.globalGain||this.folderTypesQueue.length)return this.globalGain=0,this.globalOriginalSize=0,void(this.globalOptimizedSize=0);b=(100-this.globalOptimizedSize/this.globalOriginalSize*100).toFixed(2),d=c.imagify.humanSize(this.globalGain,1),e=c.imagify.humanSize(this.globalOriginalSize,1),g=g.replace("%1$s",d),g=g.replace("%2$s",e),g=encodeURIComponent(g),f=a(".imagify-row-complete"),f.find(".imagify-ac-rt-total-gain").html(d),f.find(".imagify-ac-rt-total-original").html(e),f.find(".imagify-ac-chart").attr("data-percent",b),f.find(".imagify-sn-twitter").attr("href",imagifyBulk.labels.twitterShareURL+"&amp;text="+g),this.drawShareChart(),f.addClass("done").imagifyShow(),a("html, body").animate({scrollTop:f.offset().top},200),this.globalGain=0,this.globalOriginalSize=0,this.globalOptimizedSize=0},updateStats:function(b){var d;b&&a.isPlainObject(b)&&(c.imagify.bulk.charts.overview.donut.data&&(d=c.imagify.bulk.charts.overview.donut.data.datasets[0].data,b.unoptimized_attachments===d[0]&&b.optimized_attachments===d[1]&&b.errors_attachments===d[2])||(b.unconsumed_quota=b.unconsumed_quota.toFixed(1),a(".imagify-meteo-icon").html(b.quota_icon),a(".imagify-unconsumed-percent").html(b.unconsumed_quota+"%"),a(".imagify-unconsumed-bar").css("width",b.unconsumed_quota+"%").parent().attr("class",b.quota_class),a("#imagify-overview-chart-percent").html(b.optimized_attachments_percent+"<span>%</span>"),a(".imagify-total-percent").html(b.optimized_attachments_percent+"%"),c.imagify.bulk.drawOverviewChart([b.unoptimized_attachments,b.optimized_attachments,b.errors_attachments]),a("#imagify-total-optimized-attachments").html(b.already_optimized_attachments),a("#imagify-original-bar").find(".imagify-barnb").html(b.original_human),a("#imagify-optimized-bar").css("width",100-b.optimized_percent+"%").find(".imagify-barnb").html(b.optimized_human),a("#imagify-total-optimized-attachments-pct").html(b.optimized_percent+"%")))},openSelectorFromButton:function(b){var c=a("#"+a(this).attr("aria-controls"));b.stopPropagation(),a(".imagify-selector-list").not(c).attr("aria-hidden","true"),c.attr("aria-hidden","false").find(":checked").trigger("focus.imagify")},syncSelectorFromRadio:function(){var b=a(this).closest(".imagify-selector-choice");b.addClass("imagify-selector-current-value").attr("aria-current","true").siblings(".imagify-selector-choice").removeClass("imagify-selector-current-value").attr("aria-current","false"),b.closest(".imagify-selector-list").siblings(".imagify-selector-button").find(".imagify-selector-current-value-info").html(b.find("label").html())},closeSelectors:function(b){"keypress"===b.type&&27!==b.keyCode&&13!==b.keyCode||c.imagify.bulk.closeLevelSelector(a('.imagify-selector-list[aria-hidden="false"]'))},toggleOptimizationButton:function(){if(!c.imagify.bulk.hasMultipleRows&&!this.checked)return void a(this).prop("checked",!0);a('.imagify-bulk-table [name="group[]"]:checked').length?a("#imagify-bulk-action").removeAttr("disabled"):a("#imagify-bulk-action").attr("disabled","disabled")},toggleOptimizationDetails:function(b){var c,d=a(this),e=d.closest(".imagify-bulk-table").find(".imagify-bulk-table-details");c="open"===b.type||"close"!==b.type&&e.hasClass("hidden"),c?(d.html(d.data("label-hide")+'<span class="dashicons dashicons-no-alt"></span>'),e.imagifyShow()):(d.html(d.data("label-show")+'<span class="dashicons dashicons-menu"></span>'),e.imagifyHide())},maybeLaunchAllProcesses:function(){var b;if(!a(this).attr("disabled")&&a('.imagify-bulk-table [name="group[]"]:checked').length&&!c.imagify.bulk.hasBlockingError(!0)){if(b=a("#tmpl-imagify-bulk-infos"),!b.length)return void c.imagify.bulk.launchAllProcesses();swal({title:imagifyBulk.labels.bulkInfoTitle,html:b.html(),type:"",customClass:"imagify-sweet-alert imagify-swal-has-subtitle imagify-before-bulk-infos",showCancelButton:!0,padding:0,width:554,confirmButtonText:imagifyBulk.labels.confirmBulk,cancelButtonText:imagifySwal.labels.cancelButtonText,reverseButtons:!0}).then(function(){var d=a('.imagify-bulk-table [name="group[]"]:checked').first().closest(".imagify-row-folder-type");a.get(c.imagify.bulk.getAjaxUrl("bulkInfoSeen",{context:d.data("context")})),b.remove(),c.imagify.bulk.launchAllProcesses()}).catch(swal.noop)}},launchAllProcesses:function(){var b=a(c),d=a("#imagify-bulk-action"),e=!0;d.attr("disabled","disabled").find(".dashicons").addClass("rotate"),b.on("beforeunload",this.getConfirmMessage),a(".imagify-row-complete").imagifyHide(200,function(){a(this).removeClass("done")}),a(".imagify-show-table-details").trigger("close.imagify"),this.folderTypesQueue=[],this.status={},this.displayedWaitMessage=!1,this.processIsStopped=!1,this.imagifyAction="optimize",this.globalGain=0,this.globalOriginalSize=0,this.globalOptimizedSize=0,a('.imagify-bulk-table [name="group[]"]:checked').each(function(){var b=a(this),d=b.closest(".imagify-row-folder-type"),f=d.data("group-id"),g=d.data("context"),h=d.find('.imagify-cell-level [name="level['+f+']"]:checked').val();if(c.imagify.bulk.folderTypesQueue.push({groupID:f,context:g,level:void 0===h?-1:parseInt(h,10)}),c.imagify.bulk.status[f]={isError:!1,id:"waiting"},e)return e=!1,!0;c.imagify.bulk.displayFolderRow("waiting",d)}),c.imagify.beat.interval(15),c.imagify.beat.disableSuspend(),b.trigger("processQueue.imagify")},processQueue:function(){var b,d;if(!c.imagify.bulk.processIsStopped){if(!c.imagify.bulk.folderTypesQueue.length)return void a(c).trigger("queueEmpty.imagify");c.imagify.bulk.displayedWaitMessage||(swal({title:imagifyBulk.labels.waitTitle,html:imagifyBulk.labels.waitText,showConfirmButton:!1,padding:0,imageUrl:imagifyBulk.waitImageUrl,customClass:"imagify-sweet-alert"}).catch(swal.noop),c.imagify.bulk.displayedWaitMessage=!0),d=c.imagify.bulk.folderTypesQueue.shift(),b=a("#cb-select-"+d.groupID).closest(".imagify-row-folder-type"),c.imagify.bulk.status[d.groupID].id="fetching",c.imagify.bulk.displayFolderRow("working",b),a.get(c.imagify.bulk.getAjaxUrl("getMediaIds",d)).done(function(e){var f;if(swal.close(),!c.imagify.bulk.processIsStopped){if(f=e.data&&e.data.message?e.data.message:imagifyBulk.ajaxErrorText,!e.success)return void c.imagify.bulk.stopProcess(f,d);if(!e.data||!a.isPlainObject(e.data)&&!a.isArray(e.data))return void c.imagify.bulk.stopProcess(f,d);if(!a.isEmptyObject(e.data))return void a(c).trigger("optimizeFiles.imagify",[d,e.data]);if(c.imagify.bulk.status[d.groupID].id="no-images",c.imagify.bulk.hasMultipleRows&&a("#cb-select-"+d.groupID).prop("checked",!1),!c.imagify.bulk.folderTypesQueue.length)return void a(c).trigger("queueEmpty.imagify");c.imagify.bulk.displayFolderRow("resting",b),a(c).trigger("processQueue.imagify")}}).fail(function(){c.imagify.bulk.stopProcess("get-unoptimized-images",d)})}},optimizeFiles:function(b,d,e){var f,g,h,i,j,k,l,m,n,o,p,q={groupID:d.groupID,mediaID:0,thumbnail:"",filename:"",status:"",icon:"",label:"",thumbnailsCount:"",originalSizeHuman:"",newSizeHuman:"",percentHuman:"",overallSavingHuman:""};c.imagify.bulk.processIsStopped||(f=a("#cb-select-"+d.groupID).closest(".imagify-row-folder-type"),g=f.next(".imagify-row-working"),i=g.find(".imagify-cell-count-errors span"),o=parseInt(i.text(),10),j=f.closest(".imagify-bulk-table"),k=j.find(".imagify-row-progress"),l=k.find(".bar"),"optimize"===c.imagify.bulk.imagifyAction&&(h=g.find(".imagify-cell-count-optimized span"),n=parseInt(h.text(),10)),c.imagify.bulk.status[d.groupID].id="optimizing",j.find(".imagify-bulk-table-details thead").html(a("#tmpl-imagify-file-header-"+d.groupID).html()),m=j.find(".imagify-bulk-table-details tbody").text(""),l.css("width","0%").find(".percent").text("0%"),k.slideDown().attr("aria-hidden","false"),p=new c.imagify.Optimizer({groupID:d.groupID,context:d.context,level:d.level,bufferSize:imagifyBulk.bufferSizes[d.context],ajaxUrl:c.imagify.bulk.getAjaxUrl("bulkProcess",d),files:e,defaultThumb:c.imagify.bulk.defaultThumb,doneEvent:"mediaProcessed.imagify"}),p.before(function(b){var e;c.imagify.bulk.processIsStopped||(e=c.imagify.template("imagify-file-row-"+d.groupID),c.imagify.bulk.processingMedia.push({context:d.context,mediaID:b.mediaID}),m.prepend(e(a.extend({},q,b,{status:"compressing",icon:"admin-generic rotate",label:imagifyBulk.labels.optimizing}))))}),p.each(function(b){var e,f;if(!c.imagify.bulk.processIsStopped){if(e=c.imagify.template("imagify-file-row-"+d.groupID),f=a("#"+d.groupID+"-"+b.mediaID),a.each(c.imagify.bulk.processingMedia,function(a,e){return e.context!==d.context||e.mediaID!==b.mediaID||(c.imagify.bulk.processingMedia.splice(a,1),!1)}),l.css("width",b.progress+"%").find(".percent").html(b.progress+"%"),b.success)return"already-optimized"!==b.status?(f.replaceWith(e(a.extend({},q,b,{status:"complete",icon:"yes",label:imagifyBulk.labels.complete}))),c.imagify.bulk.drawFileChart(a("#"+d.groupID+"-"+b.mediaID).find(".imagify-cell-percentage canvas"))):f.replaceWith(c.imagify.bulk.displayErrorInRow(e(a.extend({},q,b,{status:"complete",icon:"yes",label:imagifyBulk.labels.alreadyOptimized})),b.error)),void("optimize"===c.imagify.bulk.imagifyAction&&(n+=1,h.text(n)));f.replaceWith(c.imagify.bulk.displayErrorInRow(e(a.extend({},q,b,{status:"error",icon:"dismiss",label:imagifyBulk.labels.error})),b.error||b)),i.length?(o+=1,i.text(o)):(o=1,i=g.find(".imagify-cell-count-errors").html(imagifyBulk.labels.imagesErrorText.replace("%s","<span>1</span>")).find("span")),"over-quota"===b.status&&(p.stopProcess(),c.imagify.bulk.stopProcess(b.status,d))}}),p.done(function(b){c.imagify.bulk.hasMultipleRows&&a("#cb-select-"+d.groupID).prop("checked",!1),b.globalOriginalSize&&(c.imagify.bulk.globalGain+=parseInt(b.globalGain,10),c.imagify.bulk.globalOriginalSize+=parseInt(b.globalOriginalSize,10),c.imagify.bulk.globalOptimizedSize+=parseInt(b.globalOptimizedSize,10)),c.imagify.bulk.processIsStopped||(c.imagify.beat.resetInterval(),c.imagify.beat.enableSuspend(),a.isEmptyObject(c.imagify.bulk.status)||c.imagify.bulk.status[d.groupID].isError||(c.imagify.bulk.status[d.groupID].id="done"),f.addClass("updating"),a.get(c.imagify.bulk.getAjaxUrl("getFolderData",d)).done(function(b){c.imagify.bulk.processIsStopped||(b.success&&a.each(b.data,function(a,b){f.children(".imagify-cell-"+a).html(b)}),c.imagify.bulk.displayFolderRow("resting",f))}).always(function(){c.imagify.bulk.processIsStopped||(f.removeClass("updating"),c.imagify.bulk.folderTypesQueue.length?a(c).trigger("processQueue.imagify"):a(c).trigger("queueEmpty.imagify"))}))}),p.run())},queueEmpty:function(){var b=a(".imagify-bulk-table"),d={},e=!1,f=!0,g="";c.imagify.beat.resetInterval(),c.imagify.beat.enableSuspend(),c.imagify.bulk.displayShareBox(),c.imagify.bulk.folderTypesQueue=[],imagifyBulk.imagifybeatIDs.stats||a.get(c.imagify.bulk.getAjaxUrl("getStats"),{types:c.imagify.bulk.getFolderTypes()}).done(function(a){a.success&&c.imagify.bulk.updateStats(a.data)}),a.isEmptyObject(c.imagify.bulk.status)||(a.each(c.imagify.bulk.status,function(a,b){return b.isError?(e=b.id,f=!1,!1):"no-images"!==b.id?(f=!1,!1):void 0}),e?("invalid-api-key"===e?d={title:imagifyBulk.labels.invalidAPIKeyTitle,type:"info"}:"over-quota"===e?d={title:imagifyBulk.labels.overQuotaTitle,html:a("#tmpl-imagify-overquota-alert").html(),type:"info",customClass:"imagify-swal-has-subtitle imagify-swal-error-header",showConfirmButton:!1}:"get-unoptimized-images"!==e&&"consumed-all-data"!==e||(d={title:imagifyBulk.labels.getUnoptimizedImagesErrorTitle,html:imagifyBulk.labels.getUnoptimizedImagesErrorText,type:"info"}),c.imagify.bulk.displayError(d)):f&&(g=imagifyBulk.labels.nothingToDoText.hasOwnProperty(c.imagify.bulk.imagifyAction)?imagifyBulk.labels.nothingToDoText[c.imagify.bulk.imagifyAction]:imagifyBulk.labels.nothingToDoText.optimize,c.imagify.bulk.displayError({title:imagifyBulk.labels.nothingToDoTitle,html:g,type:"info"}))),c.imagify.bulk.status={},a(c).off("beforeunload",c.imagify.bulk.getConfirmMessage),c.imagify.bulk.displayFolderRow("resting",b.find(".imagify-row-folder-type").not(".updating")),b.find(".imagify-row-progress").slideUp().attr("aria-hidden","true").find(".bar").removeAttr("style").find(".percent").text("0%"),a('.imagify-bulk-table [name="group[]"]:checked').length?a("#imagify-bulk-action").removeAttr("disabled").find(".dashicons").removeClass("rotate"):a("#imagify-bulk-action").find(".dashicons").removeClass("rotate")},share:function(a){var d,e;a.preventDefault(),c.innerWidth?(d=(c.innerWidth-700)/2,e=(c.innerHeight-290)/2):(d=(b.body.clientWidth-700)/2,e=(b.body.clientHeight-290)/2),c.open(this.href,"","status=no, scrollbars=no, menubar=no, top="+e+", left="+d+", width=700, height=290")},addStatsImagifybeat:function(a,b){b[imagifyBulk.imagifybeatIDs.stats]=Object.keys(c.imagify.bulk.getFolderTypes())},processStatsImagifybeat:function(a,b){void 0!==b[imagifyBulk.imagifybeatIDs.stats]&&c.imagify.bulk.updateStats(b[imagifyBulk.imagifybeatIDs.stats])},addQueueImagifybeat:function(a,b){c.imagify.bulk.processingMedia.length&&(b[imagifyBulk.imagifybeatIDs.queue]=c.imagify.bulk.processingMedia)},processQueueImagifybeat:function(b,d){void 0!==d[imagifyBulk.imagifybeatIDs.queue]&&a.each(d[imagifyBulk.imagifybeatIDs.queue],function(b,d){a(c).trigger("mediaProcessed.imagify",[d])})},addRequirementsImagifybeat:function(a,b){b[imagifyBulk.imagifybeatIDs.requirements]=1},processRequirementsImagifybeat:function(a,b){void 0!==b[imagifyBulk.imagifybeatIDs.requirements]&&(b=b[imagifyBulk.imagifybeatIDs.requirements],imagifyBulk.curlMissing=b.curl_missing,imagifyBulk.editorMissing=b.editor_missing,imagifyBulk.extHttpBlocked=b.external_http_blocked,imagifyBulk.apiDown=b.api_down,imagifyBulk.keyIsValid=b.key_is_valid,imagifyBulk.isOverQuota=b.is_over_quota)},drawOverviewChart:function(d){var e,f;if(this.charts.overview.canvas||(this.charts.overview.canvas=b.getElementById("imagify-overview-chart"),this.charts.overview.canvas)){if(d=d&&a.isArray(d)?d:[],this.charts.overview.donut)return void(d.length&&(0===d.reduce(function(a,b){return a+b},0)&&(d[0]=1),this.charts.overview.donut.data.datasets[0].data=d,this.charts.overview.donut.update()));this.charts.overview.data.datasets[0].data=[parseInt(this.charts.overview.canvas.getAttribute("data-unoptimized"),10),parseInt(this.charts.overview.canvas.getAttribute("data-optimized"),10),parseInt(this.charts.overview.canvas.getAttribute("data-errors"),10)],e=a.extend({},this.charts.overview.data),d.length&&(e.datasets[0].data=d),0===e.datasets[0].data.reduce(function(a,b){return a+b},0)&&(e.datasets[0].data[0]=1),this.charts.overview.donut=new c.imagify.Chart(this.charts.overview.canvas,{type:"doughnut",data:e,options:{legend:{display:!1},events:[],animation:{easing:"easeOutBounce"},tooltips:{displayColors:!1,callbacks:{label:function(a,b){return b.datasets[a.datasetIndex].data[a.index]}}},responsive:!1,cutoutPercentage:85}}),f='<ul class="imagify-doughnut-legend">',a.each(e.labels,function(a,b){f+='<li><span style="background-color:'+e.datasets[0].backgroundColor[a]+'"></span>'+b+"</li>"}),f+="</ul>",b.getElementById("imagify-overview-chart-legend").innerHTML=f}},drawFileChart:function(b){var d=this.charts.files.donuts;b.each(function(){var b=parseInt(a(this).closest(".imagify-chart").next(".imagipercent").text().replace("%",""),10);if(void 0!==d[this.id])return d[this.id].data.datasets[0].data[0]=b,d[this.id].data.datasets[0].data[1]=100-b,void d[this.id].update();d[this.id]=new c.imagify.Chart(this,{type:"doughnut",data:{datasets:[{data:[b,100-b],backgroundColor:["#00B3D3","#D8D8D8"],borderColor:"#fff",borderWidth:1}]},options:{legend:{display:!1},events:[],animation:{easing:"easeOutBounce"},tooltips:{enabled:!1},responsive:!1}})}),this.charts.files.donuts=d},drawShareChart:function(){var d;if(this.charts.share.canvas||(this.charts.share.canvas=b.getElementById("imagify-ac-chart"),this.charts.share.canvas)){if(d=parseInt(a(this.charts.share.canvas).closest(".imagify-ac-chart").attr("data-percent"),10),this.charts.share.donut)return this.charts.share.donut.data.datasets[0].data[0]=d,this.charts.share.donut.data.datasets[0].data[1]=100-d,void this.charts.share.donut.update();this.charts.share.donut=new c.imagify.Chart(this.charts.share.canvas,{type:"doughnut",data:{datasets:[{data:[d,100-d],backgroundColor:["#40B1D0","#FFFFFF"],borderWidth:0}]},options:{legend:{display:!1},events:[],animation:{easing:"easeOutBounce"},tooltips:{enabled:!1},responsive:!1,cutoutPercentage:70}})}}},c.imagify.bulk.init()}(jQuery,document,window);
1
+ window.imagify=window.imagify||{},function(a,b){var c=a.propHooks.checked;a.propHooks.checked={set:function(b,d,e){var f;return f=void 0===c?b[e]=d:c(b,d,e),a(b).trigger("change.imagify"),f}},a.fn.imagifyHide=function(b,c){return b&&b>0?this.hide(b,function(){a(this).addClass("hidden").css("display",""),void 0!==c&&c()}):(this.addClass("hidden"),void 0!==c&&c()),this.attr("aria-hidden","true")},a.fn.imagifyShow=function(b,c){return void 0!==c&&c(),b&&b>0?this.show(b,function(){a(this).removeClass("hidden").css("display","")}):this.removeClass("hidden"),this.attr("aria-hidden","false")}}(jQuery),function(a,b,c,d){c.imagify.bulk={charts:{overview:{canvas:!1,donut:!1,data:{labels:[imagifyBulk.labels.overviewChartLabels.unoptimized,imagifyBulk.labels.overviewChartLabels.optimized,imagifyBulk.labels.overviewChartLabels.error],datasets:[{data:[],backgroundColor:["#10121A","#46B1CE","#C51162"],borderWidth:0}]}},files:{donuts:{}},share:{canvas:!1,donut:!1}},folderTypesQueue:[],status:{},displayedWaitMessage:!1,hasMultipleRows:!0,imagifyAction:"",processIsStopped:!1,processingMedia:[],globalGain:0,globalOriginalSize:0,globalOptimizedSize:0,folderTypesData:{},defaultThumb:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACEAAAAhBAMAAAClyt9cAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAABtQTFRFR3BMjo6Oh4eHqqqq4uLigoKC+fn5fn5+fHx8SBBv5wAAAAF0Uk5TAEDm2GYAAABWSURBVCjPY2BgEBIEAyERBhgQUoKAIAc0EXXjEDQRRTNzBzRdBokhaGoM2CQc0NQwJJegqWFgM3VAUSNsbGwugCKiqBQUpIAiAgICoyIDKyIIB0JAEQA54jRBweNV0AAAAABJRU5ErkJggg==",init:function(){var d=a(b);this.drawOverviewChart(),this.hasMultipleRows=a('.imagify-bulk-table [name="group[]"]').length>1,a(".imagify-selector-button").on("click.imagify",this.openSelectorFromButton),a(".imagify-selector-list input").on("change.imagify init.imagify",this.syncSelectorFromRadio).filter(":checked").trigger("init.imagify"),d.on("keypress.imagify click.imagify",this.closeSelectors),a('.imagify-bulk-table [name="group[]"]').on("change.imagify init.imagify",this.toggleOptimizationButton).trigger("init.imagify"),a(".imagify-show-table-details").on("click.imagify open.imagify close.imagify",this.toggleOptimizationDetails),a("#imagify-bulk-action").on("click.imagify",this.maybeLaunchAllProcesses),a(".imagify-share-networks a").on("click.imagify",this.share),a(c).on("processQueue.imagify",this.processQueue).on("optimizeFiles.imagify",this.optimizeFiles).on("queueEmpty.imagify",this.queueEmpty),imagifyBulk.ajaxActions.getStats&&a('.imagify-bulk-table [data-group-id="library"][data-context="wp"]').length&&(imagifyBulk.imagifybeatIDs.stats=!1),imagifyBulk.imagifybeatIDs.stats&&d.on("imagifybeat-send",this.addStatsImagifybeat).on("imagifybeat-tick",this.processStatsImagifybeat),d.on("imagifybeat-send",this.addQueueImagifybeat).on("imagifybeat-tick",this.processQueueImagifybeat),d.on("imagifybeat-send",this.addRequirementsImagifybeat).on("imagifybeat-tick",this.processRequirementsImagifybeat)},getAjaxUrl:function(a,b){var d=ajaxurl+c.imagify.concat+"_wpnonce="+imagifyBulk.ajaxNonce+"&action="+imagifyBulk.ajaxActions[a];return b&&b.context&&(d+="&context="+b.context),"getMediaIds"!==a&&"bulkProcess"!==a||(d+="&imagify_action="+c.imagify.bulk.imagifyAction),d},getFolderTypes:function(){return a.isEmptyObject(c.imagify.bulk.folderTypesData)?(a(".imagify-row-folder-type").each(function(){var b=a(this),d={groupID:b.data("group-id"),context:b.data("context")},e=d.groupID+"|"+d.context;c.imagify.bulk.folderTypesData[e]=d}),c.imagify.bulk.folderTypesData):c.imagify.bulk.folderTypesData},getConfirmMessage:function(){return imagifyBulk.labels.processing},closeLevelSelector:function(a,b){if(a&&a.length)return void 0!==b&&b>0?void c.setTimeout(function(){c.imagify.bulk.closeLevelSelector(a)},b):void a.attr("aria-hidden","true")},stopProcess:function(b,d){this.processIsStopped=!0,c.imagify.bulk.status[d.groupID]={isError:!0,id:b},a(c).trigger("queueEmpty.imagify")},hasBlockingError:function(b){return b=void 0!==b&&b,imagifyBulk.curlMissing?(b&&c.imagify.bulk.displayError({html:imagifyBulk.labels.curlMissing}),!0):imagifyBulk.editorMissing?(b&&c.imagify.bulk.displayError({html:imagifyBulk.labels.editorMissing}),!0):imagifyBulk.extHttpBlocked?(b&&c.imagify.bulk.displayError({html:imagifyBulk.labels.extHttpBlocked}),!0):imagifyBulk.apiDown?(b&&c.imagify.bulk.displayError({html:imagifyBulk.labels.apiDown}),!0):imagifyBulk.keyIsValid?!!imagifyBulk.isOverQuota&&(b&&c.imagify.bulk.displayError({title:imagifyBulk.labels.overQuotaTitle,html:a("#tmpl-imagify-overquota-alert").html(),type:"info",customClass:"imagify-swal-has-subtitle imagify-swal-error-header",showConfirmButton:!1}),!0):(b&&c.imagify.bulk.displayError({title:imagifyBulk.labels.invalidAPIKeyTitle,type:"info"}),!0)},displayError:function(b,c,d){var e={title:"",html:"",type:"error",customClass:"",width:620,padding:0,showCloseButton:!0,showConfirmButton:!0};a.isPlainObject(b)?d=a.extend({},e,b):(d=d||{},d=a.extend({},e,{title:b||"",html:c||""},d)),d.title=d.title||imagifyBulk.labels.error,d.customClass+=" imagify-sweet-alert",swal(d).catch(swal.noop)},displayErrorInRow:function(b,c){var d,e;return b=a(b()),d=b.find(".imagify-cell-status ~ td"),e=d.length,c=c||"",d.remove(),b.find(".imagify-cell-status").after('<td colspan="'+e+'">'+c+"</td>"),b},displayFolderRow:function(a,b){var d,e,f,g;return"resting"===a?(b.next(".imagify-row-waiting, .imagify-row-working").remove(),void b.imagifyShow()):(d=b.next(".imagify-row-waiting, .imagify-row-working"),"waiting"===a?(f="#d2d3d6",g=imagifyBulk.labels.waitingOtimizationsText):(f="#40b1d0",g=imagifyBulk.labels.imagesOptimizedText.replace("%s","<span>0</span>")),d.length?(d.hasClass("imagify-row-"+a)||(d.attr("class","imagify-row-"+a),d.find(".imagify-cell-checkbox svg").attr("fill",f),d.children(".imagify-cell-count-optimized").html(g)),b.imagifyHide(),void d.imagifyShow()):(d=b.clone().attr({class:"imagify-row-"+a,"aria-hidden":"false"}),e=c.imagify.template("imagify-spinner"),d.children(".imagify-cell-checkbox").html(e()).find("svg").attr("fill",f),d.children(".imagify-cell-title").html('<span class="imagify-cell-label">'+d.children(".imagify-cell-title").text()+"</span>"),d.children(".imagify-cell-count-optimized").html(g),d.children(".imagify-cell-count-errors, .imagify-cell-optimized-size, .imagify-cell-original-size, .imagify-cell-level").text(""),void b.imagifyHide().after(d)))},displayShareBox:function(){var b,d,e,f,g=imagifyBulk.labels.textToShare;if(!this.globalGain||this.folderTypesQueue.length)return this.globalGain=0,this.globalOriginalSize=0,void(this.globalOptimizedSize=0);b=(100-this.globalOptimizedSize/this.globalOriginalSize*100).toFixed(2),d=c.imagify.humanSize(this.globalGain,1),e=c.imagify.humanSize(this.globalOriginalSize,1),g=g.replace("%1$s",d),g=g.replace("%2$s",e),g=encodeURIComponent(g),f=a(".imagify-row-complete"),f.find(".imagify-ac-rt-total-gain").html(d),f.find(".imagify-ac-rt-total-original").html(e),f.find(".imagify-ac-chart").attr("data-percent",b),f.find(".imagify-sn-twitter").attr("href",imagifyBulk.labels.twitterShareURL+"&amp;text="+g),this.drawShareChart(),f.addClass("done").imagifyShow(),a("html, body").animate({scrollTop:f.offset().top},200),this.globalGain=0,this.globalOriginalSize=0,this.globalOptimizedSize=0},updateStats:function(b){var d;b&&a.isPlainObject(b)&&(c.imagify.bulk.charts.overview.donut.data&&(d=c.imagify.bulk.charts.overview.donut.data.datasets[0].data,b.unoptimized_attachments===d[0]&&b.optimized_attachments===d[1]&&b.errors_attachments===d[2])||(b.unconsumed_quota=b.unconsumed_quota.toFixed(1),a(".imagify-meteo-icon").html(b.quota_icon),a(".imagify-unconsumed-percent").html(b.unconsumed_quota+"%"),a(".imagify-unconsumed-bar").css("width",b.unconsumed_quota+"%").parent().attr("class",b.quota_class),a("#imagify-overview-chart-percent").html(b.optimized_attachments_percent+"<span>%</span>"),a(".imagify-total-percent").html(b.optimized_attachments_percent+"%"),c.imagify.bulk.drawOverviewChart([b.unoptimized_attachments,b.optimized_attachments,b.errors_attachments]),a("#imagify-total-optimized-attachments").html(b.already_optimized_attachments),a("#imagify-original-bar").find(".imagify-barnb").html(b.original_human),a("#imagify-optimized-bar").css("width",100-b.optimized_percent+"%").find(".imagify-barnb").html(b.optimized_human),a("#imagify-total-optimized-attachments-pct").html(b.optimized_percent+"%")))},openSelectorFromButton:function(b){var c=a("#"+a(this).attr("aria-controls"));b.stopPropagation(),a(".imagify-selector-list").not(c).attr("aria-hidden","true"),c.attr("aria-hidden","false").find(":checked").trigger("focus.imagify")},syncSelectorFromRadio:function(){var b=a(this).closest(".imagify-selector-choice");b.addClass("imagify-selector-current-value").attr("aria-current","true").siblings(".imagify-selector-choice").removeClass("imagify-selector-current-value").attr("aria-current","false"),b.closest(".imagify-selector-list").siblings(".imagify-selector-button").find(".imagify-selector-current-value-info").html(b.find("label").html())},closeSelectors:function(b){"keypress"===b.type&&27!==b.keyCode&&13!==b.keyCode||c.imagify.bulk.closeLevelSelector(a('.imagify-selector-list[aria-hidden="false"]'))},toggleOptimizationButton:function(){if(!c.imagify.bulk.hasMultipleRows&&!this.checked)return void a(this).prop("checked",!0);a('.imagify-bulk-table [name="group[]"]:checked').length?a("#imagify-bulk-action").prop("disabled",!1):a("#imagify-bulk-action").prop("disabled",!0)},toggleOptimizationDetails:function(b){var c,d=a(this),e=d.closest(".imagify-bulk-table").find(".imagify-bulk-table-details");c="open"===b.type||"close"!==b.type&&e.hasClass("hidden"),c?(d.html(d.data("label-hide")+'<span class="dashicons dashicons-no-alt"></span>'),e.imagifyShow()):(d.html(d.data("label-show")+'<span class="dashicons dashicons-menu"></span>'),e.imagifyHide())},maybeLaunchAllProcesses:function(){var b;if(!a(this).prop("disabled")&&a('.imagify-bulk-table [name="group[]"]:checked').length&&!c.imagify.bulk.hasBlockingError(!0)){if(b=a("#tmpl-imagify-bulk-infos"),!b.length)return void c.imagify.bulk.launchAllProcesses();swal({title:imagifyBulk.labels.bulkInfoTitle,html:b.html(),type:"",customClass:"imagify-sweet-alert imagify-swal-has-subtitle imagify-before-bulk-infos",showCancelButton:!0,padding:0,width:554,confirmButtonText:imagifyBulk.labels.confirmBulk,cancelButtonText:imagifySwal.labels.cancelButtonText,reverseButtons:!0}).then(function(){var d=a('.imagify-bulk-table [name="group[]"]:checked').first().closest(".imagify-row-folder-type");a.get(c.imagify.bulk.getAjaxUrl("bulkInfoSeen",{context:d.data("context")})),b.remove(),c.imagify.bulk.launchAllProcesses()}).catch(swal.noop)}},launchAllProcesses:function(){var b=a(c),d=a("#imagify-bulk-action"),e=!0;d.prop("disabled",!0).find(".dashicons").addClass("rotate"),b.on("beforeunload",this.getConfirmMessage),a(".imagify-row-complete").imagifyHide(200,function(){a(this).removeClass("done")}),a(".imagify-show-table-details").trigger("close.imagify"),this.folderTypesQueue=[],this.status={},this.displayedWaitMessage=!1,this.processIsStopped=!1,this.imagifyAction="optimize",this.globalGain=0,this.globalOriginalSize=0,this.globalOptimizedSize=0,a('.imagify-bulk-table [name="group[]"]:checked').each(function(){var b=a(this),d=b.closest(".imagify-row-folder-type"),f=d.data("group-id"),g=d.data("context"),h=d.find('.imagify-cell-level [name="level['+f+']"]:checked').val();if(c.imagify.bulk.folderTypesQueue.push({groupID:f,context:g,level:void 0===h?-1:parseInt(h,10)}),c.imagify.bulk.status[f]={isError:!1,id:"waiting"},e)return e=!1,!0;c.imagify.bulk.displayFolderRow("waiting",d)}),c.imagify.beat.interval(15),c.imagify.beat.disableSuspend(),b.trigger("processQueue.imagify")},processQueue:function(){var b,d;if(!c.imagify.bulk.processIsStopped){if(!c.imagify.bulk.folderTypesQueue.length)return void a(c).trigger("queueEmpty.imagify");c.imagify.bulk.displayedWaitMessage||(swal({title:imagifyBulk.labels.waitTitle,html:imagifyBulk.labels.waitText,showConfirmButton:!1,padding:0,imageUrl:imagifyBulk.waitImageUrl,customClass:"imagify-sweet-alert"}).catch(swal.noop),c.imagify.bulk.displayedWaitMessage=!0),d=c.imagify.bulk.folderTypesQueue.shift(),b=a("#cb-select-"+d.groupID).closest(".imagify-row-folder-type"),c.imagify.bulk.status[d.groupID].id="fetching",c.imagify.bulk.displayFolderRow("working",b),a.get(c.imagify.bulk.getAjaxUrl("getMediaIds",d)).done(function(e){var f;if(swal.close(),!c.imagify.bulk.processIsStopped){if(f=e.data&&e.data.message?e.data.message:imagifyBulk.ajaxErrorText,!e.success)return void c.imagify.bulk.stopProcess(f,d);if(!e.data||!a.isPlainObject(e.data)&&!a.isArray(e.data))return void c.imagify.bulk.stopProcess(f,d);if(!a.isEmptyObject(e.data))return void a(c).trigger("optimizeFiles.imagify",[d,e.data]);if(c.imagify.bulk.status[d.groupID].id="no-images",c.imagify.bulk.hasMultipleRows&&a("#cb-select-"+d.groupID).prop("checked",!1),!c.imagify.bulk.folderTypesQueue.length)return void a(c).trigger("queueEmpty.imagify");c.imagify.bulk.displayFolderRow("resting",b),a(c).trigger("processQueue.imagify")}}).fail(function(){c.imagify.bulk.stopProcess("get-unoptimized-images",d)})}},optimizeFiles:function(b,d,e){var f,g,h,i,j,k,l,m,n,o,p,q={groupID:d.groupID,mediaID:0,thumbnail:"",filename:"",status:"",icon:"",label:"",thumbnailsCount:"",originalSizeHuman:"",newSizeHuman:"",percentHuman:"",overallSavingHuman:""};c.imagify.bulk.processIsStopped||(f=a("#cb-select-"+d.groupID).closest(".imagify-row-folder-type"),g=f.next(".imagify-row-working"),i=g.find(".imagify-cell-count-errors span"),o=parseInt(i.text(),10),j=f.closest(".imagify-bulk-table"),k=j.find(".imagify-row-progress"),l=k.find(".bar"),"optimize"===c.imagify.bulk.imagifyAction&&(h=g.find(".imagify-cell-count-optimized span"),n=parseInt(h.text(),10)),c.imagify.bulk.status[d.groupID].id="optimizing",j.find(".imagify-bulk-table-details thead").html(a("#tmpl-imagify-file-header-"+d.groupID).html()),m=j.find(".imagify-bulk-table-details tbody").text(""),l.css("width","0%").find(".percent").text("0%"),k.slideDown().attr("aria-hidden","false"),p=new c.imagify.Optimizer({groupID:d.groupID,context:d.context,level:d.level,bufferSize:imagifyBulk.bufferSizes[d.context],ajaxUrl:c.imagify.bulk.getAjaxUrl("bulkProcess",d),files:e,defaultThumb:c.imagify.bulk.defaultThumb,doneEvent:"mediaProcessed.imagify"}),p.before(function(b){var e;c.imagify.bulk.processIsStopped||(e=c.imagify.template("imagify-file-row-"+d.groupID),c.imagify.bulk.processingMedia.push({context:d.context,mediaID:b.mediaID}),m.prepend(e(a.extend({},q,b,{status:"compressing",icon:"admin-generic rotate",label:imagifyBulk.labels.optimizing}))))}),p.each(function(b){var e,f;if(!c.imagify.bulk.processIsStopped){if(e=c.imagify.template("imagify-file-row-"+d.groupID),f=a("#"+d.groupID+"-"+b.mediaID),a.each(c.imagify.bulk.processingMedia,function(a,e){return e.context!==d.context||e.mediaID!==b.mediaID||(c.imagify.bulk.processingMedia.splice(a,1),!1)}),l.css("width",b.progress+"%").find(".percent").html(b.progress+"%"),b.success)return"already-optimized"!==b.status?(f.replaceWith(e(a.extend({},q,b,{status:"complete",icon:"yes",label:imagifyBulk.labels.complete}))),c.imagify.bulk.drawFileChart(a("#"+d.groupID+"-"+b.mediaID).find(".imagify-cell-percentage canvas"))):f.replaceWith(c.imagify.bulk.displayErrorInRow(e(a.extend({},q,b,{status:"complete",icon:"yes",label:imagifyBulk.labels.alreadyOptimized})),b.error)),void("optimize"===c.imagify.bulk.imagifyAction&&(n+=1,h.text(n)));f.replaceWith(c.imagify.bulk.displayErrorInRow(e(a.extend({},q,b,{status:"error",icon:"dismiss",label:imagifyBulk.labels.error})),b.error||b)),i.length?(o+=1,i.text(o)):(o=1,i=g.find(".imagify-cell-count-errors").html(imagifyBulk.labels.imagesErrorText.replace("%s","<span>1</span>")).find("span")),"over-quota"===b.status&&(p.stopProcess(),c.imagify.bulk.stopProcess(b.status,d))}}),p.done(function(b){c.imagify.bulk.hasMultipleRows&&a("#cb-select-"+d.groupID).prop("checked",!1),b.globalOriginalSize&&(c.imagify.bulk.globalGain+=parseInt(b.globalGain,10),c.imagify.bulk.globalOriginalSize+=parseInt(b.globalOriginalSize,10),c.imagify.bulk.globalOptimizedSize+=parseInt(b.globalOptimizedSize,10)),c.imagify.bulk.processIsStopped||(c.imagify.beat.resetInterval(),c.imagify.beat.enableSuspend(),a.isEmptyObject(c.imagify.bulk.status)||c.imagify.bulk.status[d.groupID].isError||(c.imagify.bulk.status[d.groupID].id="done"),f.addClass("updating"),a.get(c.imagify.bulk.getAjaxUrl("getFolderData",d)).done(function(b){c.imagify.bulk.processIsStopped||(b.success&&a.each(b.data,function(a,b){f.children(".imagify-cell-"+a).html(b)}),c.imagify.bulk.displayFolderRow("resting",f))}).always(function(){c.imagify.bulk.processIsStopped||(f.removeClass("updating"),c.imagify.bulk.folderTypesQueue.length?a(c).trigger("processQueue.imagify"):a(c).trigger("queueEmpty.imagify"))}))}),p.run())},queueEmpty:function(){var b=a(".imagify-bulk-table"),d={},e=!1,f=!0,g="";c.imagify.beat.resetInterval(),c.imagify.beat.enableSuspend(),c.imagify.bulk.displayShareBox(),c.imagify.bulk.folderTypesQueue=[],imagifyBulk.imagifybeatIDs.stats||a.get(c.imagify.bulk.getAjaxUrl("getStats"),{types:c.imagify.bulk.getFolderTypes()}).done(function(a){a.success&&c.imagify.bulk.updateStats(a.data)}),a.isEmptyObject(c.imagify.bulk.status)||(a.each(c.imagify.bulk.status,function(a,b){return b.isError?(e=b.id,f=!1,!1):"no-images"!==b.id?(f=!1,!1):void 0}),e?("invalid-api-key"===e?d={title:imagifyBulk.labels.invalidAPIKeyTitle,type:"info"}:"over-quota"===e?d={title:imagifyBulk.labels.overQuotaTitle,html:a("#tmpl-imagify-overquota-alert").html(),type:"info",customClass:"imagify-swal-has-subtitle imagify-swal-error-header",showConfirmButton:!1}:"get-unoptimized-images"!==e&&"consumed-all-data"!==e||(d={title:imagifyBulk.labels.getUnoptimizedImagesErrorTitle,html:imagifyBulk.labels.getUnoptimizedImagesErrorText,type:"info"}),c.imagify.bulk.displayError(d)):f&&(g=imagifyBulk.labels.nothingToDoText.hasOwnProperty(c.imagify.bulk.imagifyAction)?imagifyBulk.labels.nothingToDoText[c.imagify.bulk.imagifyAction]:imagifyBulk.labels.nothingToDoText.optimize,c.imagify.bulk.displayError({title:imagifyBulk.labels.nothingToDoTitle,html:g,type:"info"}))),c.imagify.bulk.status={},a(c).off("beforeunload",c.imagify.bulk.getConfirmMessage),c.imagify.bulk.displayFolderRow("resting",b.find(".imagify-row-folder-type").not(".updating")),b.find(".imagify-row-progress").slideUp().attr("aria-hidden","true").find(".bar").removeAttr("style").find(".percent").text("0%"),a('.imagify-bulk-table [name="group[]"]:checked').length?a("#imagify-bulk-action").prop("disabled",!1).find(".dashicons").removeClass("rotate"):a("#imagify-bulk-action").find(".dashicons").removeClass("rotate")},share:function(a){var d,e;a.preventDefault(),c.innerWidth?(d=(c.innerWidth-700)/2,e=(c.innerHeight-290)/2):(d=(b.body.clientWidth-700)/2,e=(b.body.clientHeight-290)/2),c.open(this.href,"","status=no, scrollbars=no, menubar=no, top="+e+", left="+d+", width=700, height=290")},addStatsImagifybeat:function(a,b){b[imagifyBulk.imagifybeatIDs.stats]=Object.keys(c.imagify.bulk.getFolderTypes())},processStatsImagifybeat:function(a,b){void 0!==b[imagifyBulk.imagifybeatIDs.stats]&&c.imagify.bulk.updateStats(b[imagifyBulk.imagifybeatIDs.stats])},addQueueImagifybeat:function(a,b){c.imagify.bulk.processingMedia.length&&(b[imagifyBulk.imagifybeatIDs.queue]=c.imagify.bulk.processingMedia)},processQueueImagifybeat:function(b,d){void 0!==d[imagifyBulk.imagifybeatIDs.queue]&&a.each(d[imagifyBulk.imagifybeatIDs.queue],function(b,d){a(c).trigger("mediaProcessed.imagify",[d])})},addRequirementsImagifybeat:function(a,b){b[imagifyBulk.imagifybeatIDs.requirements]=1},processRequirementsImagifybeat:function(a,b){void 0!==b[imagifyBulk.imagifybeatIDs.requirements]&&(b=b[imagifyBulk.imagifybeatIDs.requirements],imagifyBulk.curlMissing=b.curl_missing,imagifyBulk.editorMissing=b.editor_missing,imagifyBulk.extHttpBlocked=b.external_http_blocked,imagifyBulk.apiDown=b.api_down,imagifyBulk.keyIsValid=b.key_is_valid,imagifyBulk.isOverQuota=b.is_over_quota)},drawOverviewChart:function(d){var e,f;if(this.charts.overview.canvas||(this.charts.overview.canvas=b.getElementById("imagify-overview-chart"),this.charts.overview.canvas)){if(d=d&&a.isArray(d)?d:[],this.charts.overview.donut)return void(d.length&&(0===d.reduce(function(a,b){return a+b},0)&&(d[0]=1),this.charts.overview.donut.data.datasets[0].data=d,this.charts.overview.donut.update()));this.charts.overview.data.datasets[0].data=[parseInt(this.charts.overview.canvas.getAttribute("data-unoptimized"),10),parseInt(this.charts.overview.canvas.getAttribute("data-optimized"),10),parseInt(this.charts.overview.canvas.getAttribute("data-errors"),10)],e=a.extend({},this.charts.overview.data),d.length&&(e.datasets[0].data=d),0===e.datasets[0].data.reduce(function(a,b){return a+b},0)&&(e.datasets[0].data[0]=1),this.charts.overview.donut=new c.imagify.Chart(this.charts.overview.canvas,{type:"doughnut",data:e,options:{legend:{display:!1},events:[],animation:{easing:"easeOutBounce"},tooltips:{displayColors:!1,callbacks:{label:function(a,b){return b.datasets[a.datasetIndex].data[a.index]}}},responsive:!1,cutoutPercentage:85}}),f='<ul class="imagify-doughnut-legend">',a.each(e.labels,function(a,b){f+='<li><span style="background-color:'+e.datasets[0].backgroundColor[a]+'"></span>'+b+"</li>"}),f+="</ul>",b.getElementById("imagify-overview-chart-legend").innerHTML=f}},drawFileChart:function(b){var d=this.charts.files.donuts;b.each(function(){var b=parseInt(a(this).closest(".imagify-chart").next(".imagipercent").text().replace("%",""),10);if(void 0!==d[this.id])return d[this.id].data.datasets[0].data[0]=b,d[this.id].data.datasets[0].data[1]=100-b,void d[this.id].update();d[this.id]=new c.imagify.Chart(this,{type:"doughnut",data:{datasets:[{data:[b,100-b],backgroundColor:["#00B3D3","#D8D8D8"],borderColor:"#fff",borderWidth:1}]},options:{legend:{display:!1},events:[],animation:{easing:"easeOutBounce"},tooltips:{enabled:!1},responsive:!1}})}),this.charts.files.donuts=d},drawShareChart:function(){var d;if(this.charts.share.canvas||(this.charts.share.canvas=b.getElementById("imagify-ac-chart"),this.charts.share.canvas)){if(d=parseInt(a(this.charts.share.canvas).closest(".imagify-ac-chart").attr("data-percent"),10),this.charts.share.donut)return this.charts.share.donut.data.datasets[0].data[0]=d,this.charts.share.donut.data.datasets[0].data[1]=100-d,void this.charts.share.donut.update();this.charts.share.donut=new c.imagify.Chart(this.charts.share.canvas,{type:"doughnut",data:{datasets:[{data:[d,100-d],backgroundColor:["#40B1D0","#FFFFFF"],borderWidth:0}]},options:{legend:{display:!1},events:[],animation:{easing:"easeOutBounce"},tooltips:{enabled:!1},responsive:!1,cutoutPercentage:70}})}}},c.imagify.bulk.init()}(jQuery,document,window);
assets/js/es6-promise.auto.js CHANGED
@@ -1156,4 +1156,3 @@ return Promise$3;
1156
 
1157
  })));
1158
 
1159
- //# sourceMappingURL=es6-promise.auto.map
1156
 
1157
  })));
1158
 
 
assets/js/options.js CHANGED
@@ -265,11 +265,11 @@ window.imagify = window.imagify || {};
265
  selected = [],
266
  $folders;
267
 
268
- if ( $button.attr( 'disabled' ) ) {
269
  return;
270
  }
271
 
272
- $button.attr( 'disabled', 'disabled' ).next( 'img' ).attr( 'aria-hidden', 'false' );
273
 
274
  $folders = $( '#imagify-custom-folders-selected' );
275
 
@@ -324,7 +324,7 @@ window.imagify = window.imagify || {};
324
  } );
325
  } )
326
  .always( function(){
327
- $button.removeAttr( 'disabled' ).next( 'img' ).attr( 'aria-hidden', 'true' );
328
  } );
329
  } );
330
 
@@ -334,11 +334,11 @@ window.imagify = window.imagify || {};
334
  $tree = $button.nextAll( '.imagify-folders-sub-tree' ),
335
  selected = [];
336
 
337
- if ( $button.attr( 'disabled' ) || $button.siblings( ':checkbox' ).is( ':checked' ) ) {
338
  return;
339
  }
340
 
341
- $button.attr( 'disabled', 'disabled' ).addClass( 'imagify-loading' );
342
 
343
  if ( $tree.length ) {
344
  if ( $button.hasClass( 'imagify-is-open' ) ) {
@@ -348,7 +348,7 @@ window.imagify = window.imagify || {};
348
  $tree.removeClass( 'hidden' );
349
  $button.addClass( 'imagify-is-open' );
350
  }
351
- $button.removeAttr( 'disabled' ).removeClass( 'imagify-loading' );
352
  return;
353
  }
354
 
@@ -383,7 +383,7 @@ window.imagify = window.imagify || {};
383
  } );
384
  } )
385
  .always( function(){
386
- $button.removeAttr( 'disabled' ).removeClass( 'imagify-loading' );
387
  } );
388
  } );
389
 
@@ -412,7 +412,7 @@ window.imagify = window.imagify || {};
412
  } )(window, document, jQuery);
413
 
414
 
415
- // Generate missing webp versions ==================================================================
416
  /* eslint-disable no-underscore-dangle, consistent-this */
417
  (function(w, d, $, undefined) { // eslint-disable-line no-unused-vars, no-shadow, no-shadow-restricted-names
418
 
@@ -519,7 +519,7 @@ window.imagify = window.imagify || {};
519
  this.$progressBar = this.$progressWrap.find( '.bar' );
520
  this.$progressText = this.$progressBar.find( '.percent' );
521
 
522
- // Enable/Disable the button when the "Convert to webp" checkbox is checked/unchecked.
523
  $( '#imagify_convert_to_webp' )
524
  .on( 'change.imagify init.imagify', { imagifyOptionsBulk: this }, this.toggleButton )
525
  .trigger( 'init.imagify' );
@@ -539,15 +539,15 @@ window.imagify = window.imagify || {};
539
  // Event callbacks =========================================================================
540
 
541
  /**
542
- * Enable/Disable the button when the "Convert to webp" checkbox is checked/unchecked.
543
  *
544
  * @param {object} e Event object.
545
  */
546
  toggleButton: function ( e ) {
547
  if ( ! this.checked ) {
548
- e.data.imagifyOptionsBulk.$button.attr( 'disabled', 'disabled' );
549
  } else {
550
- e.data.imagifyOptionsBulk.$button.removeAttr( 'disabled' );
551
  }
552
  },
553
 
@@ -577,7 +577,7 @@ window.imagify = window.imagify || {};
577
  e.data.imagifyOptionsBulk.totalMedia = 0;
578
 
579
  // Disable the button.
580
- e.data.imagifyOptionsBulk.$button.attr( 'disabled', 'disabled' ).find( '.dashicons' ).addClass( 'rotate' );
581
 
582
  // Add a message to be displayed when the user wants to quit the page.
583
  $( w ).on( 'beforeunload.imagify', e.data.imagifyOptionsBulk.getConfirmMessage );
@@ -956,7 +956,7 @@ window.imagify = window.imagify || {};
956
  this.$progressText.text( '0' );
957
 
958
  // Enable the button.
959
- this.$button.removeAttr( 'disabled' ).find( '.dashicons' ).removeClass( 'rotate' );
960
  },
961
 
962
  // Tools ===================================================================================
265
  selected = [],
266
  $folders;
267
 
268
+ if ( $button.prop('disabled') ) {
269
  return;
270
  }
271
 
272
+ $button.prop( 'disabled', true ).next( 'img' ).attr( 'aria-hidden', 'false' );
273
 
274
  $folders = $( '#imagify-custom-folders-selected' );
275
 
324
  } );
325
  } )
326
  .always( function(){
327
+ $button.prop( 'disabled', false ).next( 'img' ).attr( 'aria-hidden', 'true' );
328
  } );
329
  } );
330
 
334
  $tree = $button.nextAll( '.imagify-folders-sub-tree' ),
335
  selected = [];
336
 
337
+ if ( $button.prop('disabled') || $button.siblings( ':checkbox' ).is( ':checked' ) ) {
338
  return;
339
  }
340
 
341
+ $button.prop( 'disabled', true ).addClass( 'imagify-loading' );
342
 
343
  if ( $tree.length ) {
344
  if ( $button.hasClass( 'imagify-is-open' ) ) {
348
  $tree.removeClass( 'hidden' );
349
  $button.addClass( 'imagify-is-open' );
350
  }
351
+ $button.prop( 'disabled', false ).removeClass( 'imagify-loading' );
352
  return;
353
  }
354
 
383
  } );
384
  } )
385
  .always( function(){
386
+ $button.prop( 'disabled', false ).removeClass( 'imagify-loading' );
387
  } );
388
  } );
389
 
412
  } )(window, document, jQuery);
413
 
414
 
415
+ // Generate missing WebP versions ==================================================================
416
  /* eslint-disable no-underscore-dangle, consistent-this */
417
  (function(w, d, $, undefined) { // eslint-disable-line no-unused-vars, no-shadow, no-shadow-restricted-names
418
 
519
  this.$progressBar = this.$progressWrap.find( '.bar' );
520
  this.$progressText = this.$progressBar.find( '.percent' );
521
 
522
+ // Enable/Disable the button when the "Convert to WebP" checkbox is checked/unchecked.
523
  $( '#imagify_convert_to_webp' )
524
  .on( 'change.imagify init.imagify', { imagifyOptionsBulk: this }, this.toggleButton )
525
  .trigger( 'init.imagify' );
539
  // Event callbacks =========================================================================
540
 
541
  /**
542
+ * Enable/Disable the button when the "Convert to WebP" checkbox is checked/unchecked.
543
  *
544
  * @param {object} e Event object.
545
  */
546
  toggleButton: function ( e ) {
547
  if ( ! this.checked ) {
548
+ e.data.imagifyOptionsBulk.$button.prop( 'disabled', true );
549
  } else {
550
+ e.data.imagifyOptionsBulk.$button.prop( 'disabled', false );
551
  }
552
  },
553
 
577
  e.data.imagifyOptionsBulk.totalMedia = 0;
578
 
579
  // Disable the button.
580
+ e.data.imagifyOptionsBulk.$button.prop( 'disabled', true ).find( '.dashicons' ).addClass( 'rotate' );
581
 
582
  // Add a message to be displayed when the user wants to quit the page.
583
  $( w ).on( 'beforeunload.imagify', e.data.imagifyOptionsBulk.getConfirmMessage );
956
  this.$progressText.text( '0' );
957
 
958
  // Enable the button.
959
+ this.$button.prop( 'disabled', false ).find( '.dashicons' ).removeClass( 'rotate' );
960
  },
961
 
962
  // Tools ===================================================================================
assets/js/options.min.js CHANGED
@@ -1 +1 @@
1
- window.imagify=window.imagify||{},function(a,b,c,d){var e=!1,f=!1;a("#imagify-settings #api_key").on("blur.imagify",function(){var b=a(this),d=b.val();return""!==a.trim(d)&&(a("#check_api_key").val()===d?(a("#imagify-check-api-container").html('<span class="dashicons dashicons-yes"></span> '+imagifyOptions.labels.ValidApiKeyText),!1):(!0===e?f.abort():(a("#imagify-check-api-container").remove(),b.after('<span id="imagify-check-api-container"><span class="imagify-spinner"></span>'+imagifyOptions.labels.waitApiKeyCheckText+"</span>")),e=!0,void(f=a.get(ajaxurl+c.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:imagifyOptions.labels.ApiKeyCheckSuccessTitle,html:imagifyOptions.labels.ApiKeyCheckSuccessText,type:"success",padding:0,customClass:"imagify-sweet-alert"}).then(function(){location.reload()})):a("#imagify-check-api-container").html('<span class="dashicons dashicons-no"></span> '+b.data),e=!1}))))}),a(".imagify-options-line").css("cursor","pointer").on("click.imagify",function(b){"INPUT"!==b.target.nodeName&&a('input[aria-describedby="'+a(this).attr("id")+'"]').trigger("click.imagify")}),a(".imagify-settings th span").on("click.imagify",function(){var b=a(this).parent().next("td").find(":checkbox");1===b.length&&b.trigger("click.imagify")}),a(".imagify-options-line").find("input").on("change.imagify focus.imagify",function(){var b;("checkbox"!==this.type||this.checked)&&(b=a(this).closest(".imagify-options-line").prev("label").prev(":checkbox"),b.length&&!b[0].checked&&b.prop("checked",!0))}),a('[name="imagify_settings[backup]"]').on("change.imagify",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.labels.noBackupTitle,html:imagifyOptions.labels.noBackupText,type:"warning",customClass:"imagify-sweet-alert",padding:0,showCancelButton:!0,cancelButtonText:imagifySwal.labels.cancelButtonText,reverseButtons:!0}).then(function(){c.addClass("hidden")},function(){b.prop("checked",!0)})}),a('[name="imagify_settings[display_webp_method]"]').on("change.imagify init.imagify",function(b){"picture"===b.target.value?a(b.target).closest(".imagify-radio-group").next(".imagify-options-line").removeClass("imagify-faded"):a(b.target).closest(".imagify-radio-group").next(".imagify-options-line").addClass("imagify-faded")}).filter(":checked").trigger("init.imagify")}(jQuery,document,window),function(a,b,c,d){a.imagifyUser&&c.getJSON(ajaxurl,a.imagifyUser).done(function(a){c.isPlainObject(a)&&a.success&&(a.data.id=null,a.data.plan_id=null,a.data.is=[],c.each(a.data,function(b,d){var e=".imagify-user-"+b.replace(/_/g,"-");0===b.indexOf("is_")?d&&a.data.is.push(e):"is"!==b&&c(e).text(d)}),a.data.is.push("best-plan"),c(a.data.is.join(",")).removeClass("hidden"))})}(window,document,jQuery),function(a,b,c,d){function e(b){var d,e,f,g,h,i=!1,j=null;b&&(f=c("#imagify-custom-folders-selected"),g=f.find(".imagify-custom-folder-line"),h=g.find('[value="'+b+'"]'),h.length||(b=b.split("#///#"),d=b[1].replace(/\/+$/,"").toLowerCase(),e=a.imagify.template("imagify-custom-folder"),g.each(function(){var a=c(this),h=a.data("path").replace(/\/+$/,"").toLowerCase();return""!==h&&0===d.indexOf(h)?(i=!0,!1):d<h?(a.before(e({value:b[0],label:b[1]})),g=f.find(".imagify-custom-folder-line"),i=!0,!1):void 0}),i||(f.append(e({value:b[0],label:b[1]})),g=f.find(".imagify-custom-folder-line")),""!==d&&g.each(function(){var a=c(this),b=a.data("path").toLowerCase();null!==j&&0===b.indexOf(j)?a.find(".imagify-custom-folders-remove").trigger("click.imagify"):j=b}),f.next(".hidden").removeClass("hidden")))}imagifyOptions.getFilesTree&&(c("#imagify-add-custom-folder").on("click.imagify",function(){var a,b=c(this),d=[];b.attr("disabled")||(b.attr("disabled","disabled").next("img").attr("aria-hidden","false"),a=c("#imagify-custom-folders-selected"),a.find("input").each(function(){d.push(this.value)}),c.post(imagifyOptions.getFilesTree,{folder:"/",selected:d},null,"json").done(function(a){if(!a.success)return void swal({title:imagifyOptions.labels.error,html:a.data||"",type:"error",padding:0,customClass:"imagify-sweet-alert"});swal({title:imagifyOptions.labels.filesTreeTitle,html:'<div class="imagify-swal-subtitle">'+imagifyOptions.labels.filesTreeSubTitle+'</div><div class="imagify-swal-content"><p class="imagify-folders-information"><i class="dashicons dashicons-info" aria-hidden="true"></i>'+imagifyOptions.labels.cleaningInfo+'</p><ul id="imagify-folders-tree" class="imagify-folders-tree">'+a.data+"</ul></div>",type:"",customClass:"imagify-sweet-alert imagify-swal-has-subtitle imagify-folders-selection",showCancelButton:!0,padding:0,confirmButtonText:imagifyOptions.labels.confirmFilesTreeBtn,cancelButtonText:imagifySwal.labels.cancelButtonText,reverseButtons:!0}).then(function(){var a=c("#imagify-folders-tree input").serializeArray();a.length&&c.each(a,function(a,b){e(b.value)})}).catch(swal.noop)}).fail(function(){swal({title:imagifyOptions.labels.error,type:"error",customClass:"imagify-sweet-alert",padding:0})}).always(function(){b.removeAttr("disabled").next("img").attr("aria-hidden","true")}))}),c(b).on("click.imagify","#imagify-folders-tree [data-folder]",function(){var a=c(this),b=a.nextAll(".imagify-folders-sub-tree"),d=[];if(!a.attr("disabled")&&!a.siblings(":checkbox").is(":checked")){if(a.attr("disabled","disabled").addClass("imagify-loading"),b.length)return a.hasClass("imagify-is-open")?(b.addClass("hidden"),a.removeClass(" imagify-is-open")):(b.removeClass("hidden"),a.addClass("imagify-is-open")),void a.removeAttr("disabled").removeClass("imagify-loading");c("#imagify-custom-folders-selected").find("input").each(function(){d.push(this.value)}),c.post(imagifyOptions.getFilesTree,{folder:a.data("folder"),selected:d},null,"json").done(function(b){if(!b.success)return void swal({title:imagifyOptions.labels.error,html:b.data||"",type:"error",padding:0,customClass:"imagify-sweet-alert"});a.addClass("imagify-is-open").parent().append('<ul class="imagify-folders-sub-tree">'+b.data+"</ul>")}).fail(function(){swal({title:imagifyOptions.labels.error,type:"error",padding:0,customClass:"imagify-sweet-alert"})}).always(function(){a.removeAttr("disabled").removeClass("imagify-loading")})}}),c("#imagify-custom-folders").on("click.imagify",".imagify-custom-folders-remove",function(){var b=c(this).closest(".imagify-custom-folder-line").addClass("imagify-will-remove");a.setTimeout(function(){b.remove(),c("#imagify-custom-folders-selected").siblings(".imagify-success.hidden").removeClass("hidden")},750)}),c("#imagify-add-themes-to-custom-folder").on("click.imagify",function(){var a=c(this);e(a.data("theme")),e(a.data("theme-parent")),a.replaceWith("<p>"+imagifyOptions.labels.themesAdded+"</p>")}))}(window,document,jQuery),function(a,b,c,d){imagifyOptions.bulk&&(a.imagify.optionsBulk={fetchQueue:[],queue:[],processingQueue:[],fetchError:!1,error:!1,working:!1,processIsStopped:!0,processedMedia:0,totalMedia:0,$button:null,$progressWrap:null,$progressBar:null,$progressText:null,init:function(){this.$button=c("#imagify-generate-webp-versions"),this.$progressWrap=this.$button.siblings(".imagify-progress"),this.$progressBar=this.$progressWrap.find(".bar"),this.$progressText=this.$progressBar.find(".percent"),c("#imagify_convert_to_webp").on("change.imagify init.imagify",{imagifyOptionsBulk:this},this.toggleButton).trigger("init.imagify"),this.$button.on("click.imagify",{imagifyOptionsBulk:this},this.maybeLaunchAllProcesses),c(b).on("imagifybeat-send",{imagifyOptionsBulk:this},this.addQueueImagifybeat).on("imagifybeat-tick",{imagifyOptionsBulk:this},this.processQueueImagifybeat).on("imagifybeat-send",this.addRequirementsImagifybeat).on("imagifybeat-tick",{imagifyOptionsBulk:this},this.processRequirementsImagifybeat)},toggleButton:function(a){this.checked?a.data.imagifyOptionsBulk.$button.removeAttr("disabled"):a.data.imagifyOptionsBulk.$button.attr("disabled","disabled")},maybeLaunchAllProcesses:function(b){b.data.imagifyOptionsBulk&&!b.data.imagifyOptionsBulk.working&&(b.data.imagifyOptionsBulk.hasBlockingError(!0)||(b.data.imagifyOptionsBulk.fetchQueue=imagifyOptions.bulk.contexts.slice(),b.data.imagifyOptionsBulk.queue=[],b.data.imagifyOptionsBulk.processingQueue=[],b.data.imagifyOptionsBulk.fetchError=!1,b.data.imagifyOptionsBulk.error=!1,b.data.imagifyOptionsBulk.working=!0,b.data.imagifyOptionsBulk.processIsStopped=!1,b.data.imagifyOptionsBulk.processedMedia=0,b.data.imagifyOptionsBulk.totalMedia=0,b.data.imagifyOptionsBulk.$button.attr("disabled","disabled").find(".dashicons").addClass("rotate"),c(a).on("beforeunload.imagify",b.data.imagifyOptionsBulk.getConfirmMessage),a.imagify.beat.interval(15),a.imagify.beat.disableSuspend(),b.data.imagifyOptionsBulk.fetchIDs()))},getConfirmMessage:function(){return imagifyOptions.bulk.labels.processing},addQueueImagifybeat:function(a,b){a.data.imagifyOptionsBulk&&a.data.imagifyOptionsBulk.processingQueue.length&&(b[imagifyOptions.bulk.imagifybeatIDs.queue]=a.data.imagifyOptionsBulk.processingQueue)},processQueueImagifybeat:function(a,b){a.data.imagifyOptionsBulk&&void 0!==b[imagifyOptions.bulk.imagifybeatIDs.queue]&&c.each(b[imagifyOptions.bulk.imagifybeatIDs.queue],function(b,c){a.data.imagifyOptionsBulk.mediaProcessed(c)})},addRequirementsImagifybeat:function(a,b){b[imagifyOptions.bulk.imagifybeatIDs.requirements]=1},processRequirementsImagifybeat:function(a,b){a.data.imagifyOptionsBulk&&void 0===b[imagifyOptions.bulk.imagifybeatIDs.requirements]||(b=b[imagifyOptions.bulk.imagifybeatIDs.requirements],imagifyOptions.bulk.curlMissing=b.curl_missing,imagifyOptions.bulk.editorMissing=b.editor_missing,imagifyOptions.bulk.extHttpBlocked=b.external_http_blocked,imagifyOptions.bulk.apiDown=b.api_down,imagifyOptions.bulk.keyIsValid=b.key_is_valid,imagifyOptions.bulk.isOverQuota=b.is_over_quota)},fetchIDs:function(){var a,b;if(!this.processIsStopped){if(!this.fetchQueue.length)return this.queue.length?(this.$progressBar.removeAttr("style"),this.$progressText.text("0"+(this.totalMedia?"/"+this.totalMedia:"")),this.$progressWrap.slideDown().attr("aria-hidden","false"),void this.processQueue()):(this.fetchError||(this.fetchError="no-images"),this.stopProcess(this.fetchError),void(this.fetchError=!1));a=this,b=this.fetchQueue.shift(),c.get(this.getAjaxUrl("getMediaIds",b)).done(function(d){var e;if(!a.processIsStopped)return e=d.data&&d.data.message?d.data.message:imagifyOptions.bulk.ajaxErrorText,d.success&&c.isArray(d.data)?void(d.data.length&&(a.totalMedia+=d.data.length,a.queue.push({context:b,optimizeURL:a.getAjaxUrl("bulkProcess",b),mediaIDs:d.data}))):void(a.fetchError||(a.fetchError=e))}).fail(function(){a.fetchError||(a.fetchError="get-unoptimized-images")}).always(function(){a.fetchIDs()})}},processQueue:function(){var a=this;this.processIsStopped||(this.queue.length||this.processingQueue.length)&&c.each(this.queue,function(b,d){if(a.processingQueue.length>=imagifyOptions.bulk.bufferSize)return!1;c.each(d.mediaIDs,function(){if(a.processMedia({context:d.context,mediaID:d.mediaIDs.shift(),optimizeURL:d.optimizeURL}),d.mediaIDs.length||a.queue.shift(),a.processingQueue.length>=imagifyOptions.bulk.bufferSize)return!1})})},processMedia:function(a){var b=this,d={context:a.context,mediaID:a.mediaID};this.processingQueue.push({context:a.context,mediaID:a.mediaID}),c.post({url:a.optimizeURL,data:{media_id:a.mediaID,context:a.context},dataType:"json"}).done(function(a){a.success||b.mediaProcessed(d)}).fail(function(){b.mediaProcessed(d)})},mediaProcessed:function(a){var b=this;this.processIsStopped||(c.each(this.processingQueue,function(c,d){if(a.context===d.context&&a.mediaID===d.mediaID)return b.processingQueue.splice(c,1),!1}),++this.processedMedia,a.progress=Math.floor(this.processedMedia/this.totalMedia*100),this.$progressBar.css("width",a.progress+"%"),this.$progressText.text(this.processedMedia+"/"+this.totalMedia),this.queue.length||this.processingQueue.length?this.processQueue():this.totalMedia===this.processedMedia&&this.queueEmpty())},queueEmpty:function(){var b={};!1!==this.error&&(b="invalid-api-key"===this.error?{title:imagifyOptions.bulk.labels.invalidAPIKeyTitle,type:"info"}:"over-quota"===this.error?{title:imagifyOptions.bulk.labels.overQuotaTitle,html:c("#tmpl-imagify-overquota-alert").html(),type:"info",customClass:"imagify-swal-has-subtitle imagify-swal-error-header",showConfirmButton:!1}:"get-unoptimized-images"===this.error||"consumed-all-data"===this.error?{title:imagifyOptions.bulk.labels.getUnoptimizedImagesErrorTitle,html:imagifyOptions.bulk.labels.getUnoptimizedImagesErrorText,type:"info"}:"no-images"===this.error?{title:imagifyOptions.bulk.labels.nothingToDoTitle,html:imagifyOptions.bulk.labels.nothingToDoText,type:"info"}:"no-backup"===this.error?{title:imagifyOptions.bulk.labels.nothingToDoTitle,html:imagifyOptions.bulk.labels.nothingToDoNoBackupText,type:"info"}:{title:imagifyOptions.bulk.labels.error,html:this.error,type:"info"},this.displayError(b),this.error=!1),this.fetchQueue=[],this.queue=[],this.processingQueue=[],this.fetchError=!1,this.working=!1,this.processIsStopped=!1,this.processedMedia=0,this.totalMedia=0,a.imagify.beat.resetInterval(),a.imagify.beat.enableSuspend(),c(a).off("beforeunload.imagify",this.getConfirmMessage),this.$progressWrap.slideUp().attr("aria-hidden","true"),this.$progressBar.removeAttr("style"),this.$progressText.text("0"),this.$button.removeAttr("disabled").find(".dashicons").removeClass("rotate")},hasBlockingError:function(a){return a=void 0!==a&&a,imagifyOptions.bulk.curlMissing?(a&&this.displayError({html:imagifyOptions.bulk.labels.curlMissing}),!0):imagifyOptions.bulk.editorMissing?(a&&this.displayError({html:imagifyOptions.bulk.labels.editorMissing}),!0):imagifyOptions.bulk.extHttpBlocked?(a&&this.displayError({html:imagifyOptions.bulk.labels.extHttpBlocked}),!0):imagifyOptions.bulk.apiDown?(a&&this.displayError({html:imagifyOptions.bulk.labels.apiDown}),!0):imagifyOptions.bulk.keyIsValid?!!imagifyOptions.bulk.isOverQuota&&(a&&this.displayError({title:imagifyOptions.bulk.labels.overQuotaTitle,html:c("#tmpl-imagify-overquota-alert").html(),type:"info",customClass:"imagify-swal-has-subtitle imagify-swal-error-header",showConfirmButton:!1}),!0):(a&&this.displayError({title:imagifyOptions.bulk.labels.invalidAPIKeyTitle,type:"info"}),!0)},displayError:function(a,b,d){var e={title:"",html:"",type:"error",customClass:"",width:620,padding:0,showCloseButton:!0,showConfirmButton:!0};c.isPlainObject(a)?d=c.extend({},e,a):(d=d||{},d=c.extend({},e,{title:a||"",html:b||""},d)),d.title=d.title||imagifyOptions.bulk.labels.error,d.customClass+=" imagify-sweet-alert",swal(d).catch(swal.noop)},getAjaxUrl:function(b,c){var d;return d=ajaxurl+a.imagify.concat+"_wpnonce="+imagifyOptions.bulk.ajaxNonce,d+="&action="+imagifyOptions.bulk.ajaxActions[b],d+="&context="+c,d+="&imagify_action=generate_webp"},stopProcess:function(a){this.processIsStopped=!0,this.error=a,this.queueEmpty()}},a.imagify.optionsBulk.init())}(window,document,jQuery),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-select-all").on("click.imagify",function(){var a=c(this),b=a.data("action"),d=a.closest(".imagify-select-all-buttons"),e=d.prev(".imagify-check-group"),f="imagify-is-inactive";if(a.hasClass(f))return!1;d.find(".imagify-select-all").removeClass(f).attr("aria-disabled","false"),a.addClass(f).attr("aria-disabled","true"),e.find(".imagify-row-check").prop("checked",function(){return!c(this).is(":hidden,:disabled")&&"select"===b})}),c(".imagify-check-group .imagify-row-check").on("change.imagify",function(){var a=c(this).closest(".imagify-check-group"),b=a.find(".imagify-row-check"),d=b.filter(":visible:enabled").length,e=b.filter(":visible:enabled:checked").length,f=a.next(".imagify-select-all-buttons"),g="imagify-is-inactive";0===e&&f.find('[data-action="unselect"]').addClass(g).attr("aria-disabled","true"),e===d&&f.find('[data-action="select"]').addClass(g).attr("aria-disabled","true"),e!==d&&e>0&&f.find(".imagify-select-all").removeClass(g).attr("aria-disabled","false")})}(window,document,jQuery);
1
+ window.imagify=window.imagify||{},function(a,b,c,d){var e=!1,f=!1;a("#imagify-settings #api_key").on("blur.imagify",function(){var b=a(this),d=b.val();return""!==a.trim(d)&&(a("#check_api_key").val()===d?(a("#imagify-check-api-container").html('<span class="dashicons dashicons-yes"></span> '+imagifyOptions.labels.ValidApiKeyText),!1):(!0===e?f.abort():(a("#imagify-check-api-container").remove(),b.after('<span id="imagify-check-api-container"><span class="imagify-spinner"></span>'+imagifyOptions.labels.waitApiKeyCheckText+"</span>")),e=!0,void(f=a.get(ajaxurl+c.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:imagifyOptions.labels.ApiKeyCheckSuccessTitle,html:imagifyOptions.labels.ApiKeyCheckSuccessText,type:"success",padding:0,customClass:"imagify-sweet-alert"}).then(function(){location.reload()})):a("#imagify-check-api-container").html('<span class="dashicons dashicons-no"></span> '+b.data),e=!1}))))}),a(".imagify-options-line").css("cursor","pointer").on("click.imagify",function(b){"INPUT"!==b.target.nodeName&&a('input[aria-describedby="'+a(this).attr("id")+'"]').trigger("click.imagify")}),a(".imagify-settings th span").on("click.imagify",function(){var b=a(this).parent().next("td").find(":checkbox");1===b.length&&b.trigger("click.imagify")}),a(".imagify-options-line").find("input").on("change.imagify focus.imagify",function(){var b;("checkbox"!==this.type||this.checked)&&(b=a(this).closest(".imagify-options-line").prev("label").prev(":checkbox"),b.length&&!b[0].checked&&b.prop("checked",!0))}),a('[name="imagify_settings[backup]"]').on("change.imagify",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.labels.noBackupTitle,html:imagifyOptions.labels.noBackupText,type:"warning",customClass:"imagify-sweet-alert",padding:0,showCancelButton:!0,cancelButtonText:imagifySwal.labels.cancelButtonText,reverseButtons:!0}).then(function(){c.addClass("hidden")},function(){b.prop("checked",!0)})}),a('[name="imagify_settings[display_webp_method]"]').on("change.imagify init.imagify",function(b){"picture"===b.target.value?a(b.target).closest(".imagify-radio-group").next(".imagify-options-line").removeClass("imagify-faded"):a(b.target).closest(".imagify-radio-group").next(".imagify-options-line").addClass("imagify-faded")}).filter(":checked").trigger("init.imagify")}(jQuery,document,window),function(a,b,c,d){a.imagifyUser&&c.getJSON(ajaxurl,a.imagifyUser).done(function(a){c.isPlainObject(a)&&a.success&&(a.data.id=null,a.data.plan_id=null,a.data.is=[],c.each(a.data,function(b,d){var e=".imagify-user-"+b.replace(/_/g,"-");0===b.indexOf("is_")?d&&a.data.is.push(e):"is"!==b&&c(e).text(d)}),a.data.is.push("best-plan"),c(a.data.is.join(",")).removeClass("hidden"))})}(window,document,jQuery),function(a,b,c,d){function e(b){var d,e,f,g,h,i=!1,j=null;b&&(f=c("#imagify-custom-folders-selected"),g=f.find(".imagify-custom-folder-line"),h=g.find('[value="'+b+'"]'),h.length||(b=b.split("#///#"),d=b[1].replace(/\/+$/,"").toLowerCase(),e=a.imagify.template("imagify-custom-folder"),g.each(function(){var a=c(this),h=a.data("path").replace(/\/+$/,"").toLowerCase();return""!==h&&0===d.indexOf(h)?(i=!0,!1):d<h?(a.before(e({value:b[0],label:b[1]})),g=f.find(".imagify-custom-folder-line"),i=!0,!1):void 0}),i||(f.append(e({value:b[0],label:b[1]})),g=f.find(".imagify-custom-folder-line")),""!==d&&g.each(function(){var a=c(this),b=a.data("path").toLowerCase();null!==j&&0===b.indexOf(j)?a.find(".imagify-custom-folders-remove").trigger("click.imagify"):j=b}),f.next(".hidden").removeClass("hidden")))}imagifyOptions.getFilesTree&&(c("#imagify-add-custom-folder").on("click.imagify",function(){var a,b=c(this),d=[];b.prop("disabled")||(b.prop("disabled",!0).next("img").attr("aria-hidden","false"),a=c("#imagify-custom-folders-selected"),a.find("input").each(function(){d.push(this.value)}),c.post(imagifyOptions.getFilesTree,{folder:"/",selected:d},null,"json").done(function(a){if(!a.success)return void swal({title:imagifyOptions.labels.error,html:a.data||"",type:"error",padding:0,customClass:"imagify-sweet-alert"});swal({title:imagifyOptions.labels.filesTreeTitle,html:'<div class="imagify-swal-subtitle">'+imagifyOptions.labels.filesTreeSubTitle+'</div><div class="imagify-swal-content"><p class="imagify-folders-information"><i class="dashicons dashicons-info" aria-hidden="true"></i>'+imagifyOptions.labels.cleaningInfo+'</p><ul id="imagify-folders-tree" class="imagify-folders-tree">'+a.data+"</ul></div>",type:"",customClass:"imagify-sweet-alert imagify-swal-has-subtitle imagify-folders-selection",showCancelButton:!0,padding:0,confirmButtonText:imagifyOptions.labels.confirmFilesTreeBtn,cancelButtonText:imagifySwal.labels.cancelButtonText,reverseButtons:!0}).then(function(){var a=c("#imagify-folders-tree input").serializeArray();a.length&&c.each(a,function(a,b){e(b.value)})}).catch(swal.noop)}).fail(function(){swal({title:imagifyOptions.labels.error,type:"error",customClass:"imagify-sweet-alert",padding:0})}).always(function(){b.prop("disabled",!1).next("img").attr("aria-hidden","true")}))}),c(b).on("click.imagify","#imagify-folders-tree [data-folder]",function(){var a=c(this),b=a.nextAll(".imagify-folders-sub-tree"),d=[];if(!a.prop("disabled")&&!a.siblings(":checkbox").is(":checked")){if(a.prop("disabled",!0).addClass("imagify-loading"),b.length)return a.hasClass("imagify-is-open")?(b.addClass("hidden"),a.removeClass(" imagify-is-open")):(b.removeClass("hidden"),a.addClass("imagify-is-open")),void a.prop("disabled",!1).removeClass("imagify-loading");c("#imagify-custom-folders-selected").find("input").each(function(){d.push(this.value)}),c.post(imagifyOptions.getFilesTree,{folder:a.data("folder"),selected:d},null,"json").done(function(b){if(!b.success)return void swal({title:imagifyOptions.labels.error,html:b.data||"",type:"error",padding:0,customClass:"imagify-sweet-alert"});a.addClass("imagify-is-open").parent().append('<ul class="imagify-folders-sub-tree">'+b.data+"</ul>")}).fail(function(){swal({title:imagifyOptions.labels.error,type:"error",padding:0,customClass:"imagify-sweet-alert"})}).always(function(){a.prop("disabled",!1).removeClass("imagify-loading")})}}),c("#imagify-custom-folders").on("click.imagify",".imagify-custom-folders-remove",function(){var b=c(this).closest(".imagify-custom-folder-line").addClass("imagify-will-remove");a.setTimeout(function(){b.remove(),c("#imagify-custom-folders-selected").siblings(".imagify-success.hidden").removeClass("hidden")},750)}),c("#imagify-add-themes-to-custom-folder").on("click.imagify",function(){var a=c(this);e(a.data("theme")),e(a.data("theme-parent")),a.replaceWith("<p>"+imagifyOptions.labels.themesAdded+"</p>")}))}(window,document,jQuery),function(a,b,c,d){imagifyOptions.bulk&&(a.imagify.optionsBulk={fetchQueue:[],queue:[],processingQueue:[],fetchError:!1,error:!1,working:!1,processIsStopped:!0,processedMedia:0,totalMedia:0,$button:null,$progressWrap:null,$progressBar:null,$progressText:null,init:function(){this.$button=c("#imagify-generate-webp-versions"),this.$progressWrap=this.$button.siblings(".imagify-progress"),this.$progressBar=this.$progressWrap.find(".bar"),this.$progressText=this.$progressBar.find(".percent"),c("#imagify_convert_to_webp").on("change.imagify init.imagify",{imagifyOptionsBulk:this},this.toggleButton).trigger("init.imagify"),this.$button.on("click.imagify",{imagifyOptionsBulk:this},this.maybeLaunchAllProcesses),c(b).on("imagifybeat-send",{imagifyOptionsBulk:this},this.addQueueImagifybeat).on("imagifybeat-tick",{imagifyOptionsBulk:this},this.processQueueImagifybeat).on("imagifybeat-send",this.addRequirementsImagifybeat).on("imagifybeat-tick",{imagifyOptionsBulk:this},this.processRequirementsImagifybeat)},toggleButton:function(a){this.checked?a.data.imagifyOptionsBulk.$button.prop("disabled",!1):a.data.imagifyOptionsBulk.$button.prop("disabled",!0)},maybeLaunchAllProcesses:function(b){b.data.imagifyOptionsBulk&&!b.data.imagifyOptionsBulk.working&&(b.data.imagifyOptionsBulk.hasBlockingError(!0)||(b.data.imagifyOptionsBulk.fetchQueue=imagifyOptions.bulk.contexts.slice(),b.data.imagifyOptionsBulk.queue=[],b.data.imagifyOptionsBulk.processingQueue=[],b.data.imagifyOptionsBulk.fetchError=!1,b.data.imagifyOptionsBulk.error=!1,b.data.imagifyOptionsBulk.working=!0,b.data.imagifyOptionsBulk.processIsStopped=!1,b.data.imagifyOptionsBulk.processedMedia=0,b.data.imagifyOptionsBulk.totalMedia=0,b.data.imagifyOptionsBulk.$button.prop("disabled",!0).find(".dashicons").addClass("rotate"),c(a).on("beforeunload.imagify",b.data.imagifyOptionsBulk.getConfirmMessage),a.imagify.beat.interval(15),a.imagify.beat.disableSuspend(),b.data.imagifyOptionsBulk.fetchIDs()))},getConfirmMessage:function(){return imagifyOptions.bulk.labels.processing},addQueueImagifybeat:function(a,b){a.data.imagifyOptionsBulk&&a.data.imagifyOptionsBulk.processingQueue.length&&(b[imagifyOptions.bulk.imagifybeatIDs.queue]=a.data.imagifyOptionsBulk.processingQueue)},processQueueImagifybeat:function(a,b){a.data.imagifyOptionsBulk&&void 0!==b[imagifyOptions.bulk.imagifybeatIDs.queue]&&c.each(b[imagifyOptions.bulk.imagifybeatIDs.queue],function(b,c){a.data.imagifyOptionsBulk.mediaProcessed(c)})},addRequirementsImagifybeat:function(a,b){b[imagifyOptions.bulk.imagifybeatIDs.requirements]=1},processRequirementsImagifybeat:function(a,b){a.data.imagifyOptionsBulk&&void 0===b[imagifyOptions.bulk.imagifybeatIDs.requirements]||(b=b[imagifyOptions.bulk.imagifybeatIDs.requirements],imagifyOptions.bulk.curlMissing=b.curl_missing,imagifyOptions.bulk.editorMissing=b.editor_missing,imagifyOptions.bulk.extHttpBlocked=b.external_http_blocked,imagifyOptions.bulk.apiDown=b.api_down,imagifyOptions.bulk.keyIsValid=b.key_is_valid,imagifyOptions.bulk.isOverQuota=b.is_over_quota)},fetchIDs:function(){var a,b;if(!this.processIsStopped){if(!this.fetchQueue.length)return this.queue.length?(this.$progressBar.removeAttr("style"),this.$progressText.text("0"+(this.totalMedia?"/"+this.totalMedia:"")),this.$progressWrap.slideDown().attr("aria-hidden","false"),void this.processQueue()):(this.fetchError||(this.fetchError="no-images"),this.stopProcess(this.fetchError),void(this.fetchError=!1));a=this,b=this.fetchQueue.shift(),c.get(this.getAjaxUrl("getMediaIds",b)).done(function(d){var e;if(!a.processIsStopped)return e=d.data&&d.data.message?d.data.message:imagifyOptions.bulk.ajaxErrorText,d.success&&c.isArray(d.data)?void(d.data.length&&(a.totalMedia+=d.data.length,a.queue.push({context:b,optimizeURL:a.getAjaxUrl("bulkProcess",b),mediaIDs:d.data}))):void(a.fetchError||(a.fetchError=e))}).fail(function(){a.fetchError||(a.fetchError="get-unoptimized-images")}).always(function(){a.fetchIDs()})}},processQueue:function(){var a=this;this.processIsStopped||(this.queue.length||this.processingQueue.length)&&c.each(this.queue,function(b,d){if(a.processingQueue.length>=imagifyOptions.bulk.bufferSize)return!1;c.each(d.mediaIDs,function(){if(a.processMedia({context:d.context,mediaID:d.mediaIDs.shift(),optimizeURL:d.optimizeURL}),d.mediaIDs.length||a.queue.shift(),a.processingQueue.length>=imagifyOptions.bulk.bufferSize)return!1})})},processMedia:function(a){var b=this,d={context:a.context,mediaID:a.mediaID};this.processingQueue.push({context:a.context,mediaID:a.mediaID}),c.post({url:a.optimizeURL,data:{media_id:a.mediaID,context:a.context},dataType:"json"}).done(function(a){a.success||b.mediaProcessed(d)}).fail(function(){b.mediaProcessed(d)})},mediaProcessed:function(a){var b=this;this.processIsStopped||(c.each(this.processingQueue,function(c,d){if(a.context===d.context&&a.mediaID===d.mediaID)return b.processingQueue.splice(c,1),!1}),++this.processedMedia,a.progress=Math.floor(this.processedMedia/this.totalMedia*100),this.$progressBar.css("width",a.progress+"%"),this.$progressText.text(this.processedMedia+"/"+this.totalMedia),this.queue.length||this.processingQueue.length?this.processQueue():this.totalMedia===this.processedMedia&&this.queueEmpty())},queueEmpty:function(){var b={};!1!==this.error&&(b="invalid-api-key"===this.error?{title:imagifyOptions.bulk.labels.invalidAPIKeyTitle,type:"info"}:"over-quota"===this.error?{title:imagifyOptions.bulk.labels.overQuotaTitle,html:c("#tmpl-imagify-overquota-alert").html(),type:"info",customClass:"imagify-swal-has-subtitle imagify-swal-error-header",showConfirmButton:!1}:"get-unoptimized-images"===this.error||"consumed-all-data"===this.error?{title:imagifyOptions.bulk.labels.getUnoptimizedImagesErrorTitle,html:imagifyOptions.bulk.labels.getUnoptimizedImagesErrorText,type:"info"}:"no-images"===this.error?{title:imagifyOptions.bulk.labels.nothingToDoTitle,html:imagifyOptions.bulk.labels.nothingToDoText,type:"info"}:"no-backup"===this.error?{title:imagifyOptions.bulk.labels.nothingToDoTitle,html:imagifyOptions.bulk.labels.nothingToDoNoBackupText,type:"info"}:{title:imagifyOptions.bulk.labels.error,html:this.error,type:"info"},this.displayError(b),this.error=!1),this.fetchQueue=[],this.queue=[],this.processingQueue=[],this.fetchError=!1,this.working=!1,this.processIsStopped=!1,this.processedMedia=0,this.totalMedia=0,a.imagify.beat.resetInterval(),a.imagify.beat.enableSuspend(),c(a).off("beforeunload.imagify",this.getConfirmMessage),this.$progressWrap.slideUp().attr("aria-hidden","true"),this.$progressBar.removeAttr("style"),this.$progressText.text("0"),this.$button.prop("disabled",!1).find(".dashicons").removeClass("rotate")},hasBlockingError:function(a){return a=void 0!==a&&a,imagifyOptions.bulk.curlMissing?(a&&this.displayError({html:imagifyOptions.bulk.labels.curlMissing}),!0):imagifyOptions.bulk.editorMissing?(a&&this.displayError({html:imagifyOptions.bulk.labels.editorMissing}),!0):imagifyOptions.bulk.extHttpBlocked?(a&&this.displayError({html:imagifyOptions.bulk.labels.extHttpBlocked}),!0):imagifyOptions.bulk.apiDown?(a&&this.displayError({html:imagifyOptions.bulk.labels.apiDown}),!0):imagifyOptions.bulk.keyIsValid?!!imagifyOptions.bulk.isOverQuota&&(a&&this.displayError({title:imagifyOptions.bulk.labels.overQuotaTitle,html:c("#tmpl-imagify-overquota-alert").html(),type:"info",customClass:"imagify-swal-has-subtitle imagify-swal-error-header",showConfirmButton:!1}),!0):(a&&this.displayError({title:imagifyOptions.bulk.labels.invalidAPIKeyTitle,type:"info"}),!0)},displayError:function(a,b,d){var e={title:"",html:"",type:"error",customClass:"",width:620,padding:0,showCloseButton:!0,showConfirmButton:!0};c.isPlainObject(a)?d=c.extend({},e,a):(d=d||{},d=c.extend({},e,{title:a||"",html:b||""},d)),d.title=d.title||imagifyOptions.bulk.labels.error,d.customClass+=" imagify-sweet-alert",swal(d).catch(swal.noop)},getAjaxUrl:function(b,c){var d;return d=ajaxurl+a.imagify.concat+"_wpnonce="+imagifyOptions.bulk.ajaxNonce,d+="&action="+imagifyOptions.bulk.ajaxActions[b],d+="&context="+c,d+="&imagify_action=generate_webp"},stopProcess:function(a){this.processIsStopped=!0,this.error=a,this.queueEmpty()}},a.imagify.optionsBulk.init())}(window,document,jQuery),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-select-all").on("click.imagify",function(){var a=c(this),b=a.data("action"),d=a.closest(".imagify-select-all-buttons"),e=d.prev(".imagify-check-group"),f="imagify-is-inactive";if(a.hasClass(f))return!1;d.find(".imagify-select-all").removeClass(f).attr("aria-disabled","false"),a.addClass(f).attr("aria-disabled","true"),e.find(".imagify-row-check").prop("checked",function(){return!c(this).is(":hidden,:disabled")&&"select"===b})}),c(".imagify-check-group .imagify-row-check").on("change.imagify",function(){var a=c(this).closest(".imagify-check-group"),b=a.find(".imagify-row-check"),d=b.filter(":visible:enabled").length,e=b.filter(":visible:enabled:checked").length,f=a.next(".imagify-select-all-buttons"),g="imagify-is-inactive";0===e&&f.find('[data-action="unselect"]').addClass(g).attr("aria-disabled","true"),e===d&&f.find('[data-action="select"]').addClass(g).attr("aria-disabled","true"),e!==d&&e>0&&f.find(".imagify-select-all").removeClass(g).attr("aria-disabled","false")})}(window,document,jQuery);
assets/js/pricing-modal.js CHANGED
@@ -152,12 +152,21 @@
152
  quo = datas.quota, // 1000 (MB) - 5000 images (monthly/onetime)
153
  cos = datas.cost, // 3.49 (onetime)
154
  name = -1 === quo ? 'Unlimited' : (quo >= 1000 ? quo / 1000 + ' GB' : quo + ' MB'),
155
- pcs = 'monthly' === type ? { monthly: mon, yearly: Math.round(ann / 12 * 100) / 100 } : cos,
156
  pcsd = pcs, // Used if discount is active.
157
- percent, $datas_c, datas_content;
 
 
 
158
 
159
  // Change pricing value only if discount in percentage is active and if offer is a monthly and not a onetime.
160
- if (promo.is_active && 'percentage' === promo.coupon_type && 'monthly' === type) {
 
 
 
 
 
 
161
  percent = (100 - promo.coupon_value) / 100;
162
  pcs = 'monthly' === type ? {
163
  monthly: mon * percent,
@@ -176,12 +185,16 @@
176
  $offer.find('.imagify-number-block').html(imagifyModal.getHtmlPrice(pcs, 'monthly'));
177
 
178
  // discount prices
179
- if (promo.is_active && 'percentage' === promo.coupon_type && 'monthly' === type) {
180
-
181
- $offer.find('.imagify-price-block').prev('.imagify-price-discount').remove();
 
 
 
 
 
182
  $offer.find('.imagify-price-block').before(imagifyModal.getHtmlDiscountPrice(pcsd, 'monthly'));
183
  }
184
-
185
  // Nb images.
186
  $offer.find('.imagify-approx-nb').text(quo * 5);
187
 
@@ -194,9 +207,9 @@
194
  $datas_c = $offer.find('.imagify-payment-btn-select-plan').length ? $offer.find('.imagify-payment-btn-select-plan') : $offer;
195
 
196
  if ('monthly' === type) {
197
- datas_content = '{"' + lab + '":{"id":' + id + ',"name":"' + name + '","data":' + quo + ',"dataf":"' + name + '","imgs":' + (quo * 5) + ',"prices":{"monthly":' + pcs.monthly + ',"yearly":' + pcs.yearly + ',"add":' + add + '}}}';
198
  } else {
199
- datas_content = '{"ot' + lab + '":{"id":' + id + ',"name":"' + name + '","data":' + quo + ',"dataf":"' + name + '","imgs":' + (quo * 5) + ',"price":' + pcs + '}}';
200
  }
201
 
202
  $datas_c.attr('data-offer', datas_content);
@@ -239,9 +252,9 @@
239
  //$( '.imagify-global-amount' ).text( price ); // Not used.
240
 
241
  if ('0.00' === price || 0 === price) {
242
- $('#imagify-modal-checkout-btn').attr('disabled', 'disabled').addClass('imagify-button-disabled');
243
  } else {
244
- $('#imagify-modal-checkout-btn').removeAttr('disabled').removeClass('imagify-button-disabled');
245
  }
246
  },
247
 
@@ -249,19 +262,22 @@
249
  var code = $('#imagify-coupon-code').val(),
250
  $cptext, $label, $section, nonce;
251
 
 
 
 
 
252
  if ('' === code) {
 
 
253
  return;
254
  }
255
 
256
- $cptext = $('.imagify-coupon-text');
257
- $label = $cptext.find('label');
258
- $section = $('.imagify-coupon-section');
259
  nonce = $('#imagify-get-pricing-modal').data('nonce');
260
 
261
  $cptext.addClass('checking');
262
 
263
  // Get the true prices.
264
- $.post(ajaxurl, { action: 'imagify_check_coupon', coupon: code, imagifynonce: nonce }, function (response) {
265
  var coupon_value;
266
 
267
  $cptext.removeClass('checking');
@@ -272,10 +288,20 @@
272
  $label.text(imagifyPricingModal.labels.errorCouponAPI);
273
  } else if (response.data.success) {
274
  coupon_value = 'percentage' === response.data.coupon_type ? response.data.value + '%' : '$' + response.data.value;
275
- $section.removeClass('invalid').addClass('validated');
276
- $label.html(imagifyPricingModal.labels.successCouponAPI);
277
- $label.find('.imagify-coupon-offer').text(coupon_value);
278
- $label.find('.imagify-coupon-word').text(code);
 
 
 
 
 
 
 
 
 
 
279
  } else {
280
  $section.removeClass('validated').addClass('invalid');
281
  $label.text(response.data.detail);
@@ -304,6 +330,7 @@
304
  };
305
 
306
  imagifyModal.$modal.find('.imagify-modal-loader').hide().show();
 
307
 
308
  /**
309
  * TODO: change the way to waterfall requests.
@@ -341,7 +368,7 @@
341
  $mo_tpl, $ot_tpl,
342
  ot_clone, mo_clone,
343
  $estim_block, $offers_block,
344
- $banners, date_end, promo, discount;
345
 
346
  if (! discount_response.success) {
347
  // TODO: replace modal content by any information.
@@ -415,6 +442,7 @@
415
 
416
  // Show the modal content.
417
  imagifyModal.$modal.find('.imagify-modal-loader').fadeOut(300);
 
418
  return;
419
  }
420
 
@@ -422,23 +450,39 @@
422
  w.imagify_discount_datas = promo_datas;
423
 
424
  if (promo_datas.is_active) {
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
425
  $banners = $('.imagify-modal-promotion');
426
  date_end = promo_datas.date_end.split('T')[0];
427
  promo = promo_datas.coupon_value;
428
  discount = 'percentage' === promo_datas.coupon_type ? promo + '%' : '$' + promo;
429
 
430
- // Fill coupon code.
431
- $('#imagify-coupon-code').val(promo_datas.label).attr('readonly', true);
432
 
433
  // Show banners.
434
  $banners.addClass('active').attr('aria-hidden', 'false');
435
 
436
  // Populate banners.
437
  $banners.find('.imagify-promotion-number').text(discount);
 
438
  $banners.find('.imagify-promotion-date').text(date_end);
439
 
440
- // Auto validate coupon.
441
- imagifyModal.checkCoupon();
442
  }
443
 
444
  /**
@@ -475,7 +519,6 @@
475
  // Add this offer as pre-selected item in pre-checkout view.
476
  $offer.addClass('imagify-offer-selected').find('.imagify-checkbox').prop('checked', true);
477
  }
478
-
479
  // Populate the Pre-checkout view depending on user_cons.
480
  imagifyModal.populateOffer($offer, value, 'monthly');
481
  }
@@ -522,7 +565,15 @@
522
  ot_html += $tpl[0].outerHTML;
523
  });
524
  }
525
-
 
 
 
 
 
 
 
 
526
  // Fill pricing tables.
527
  if ($mo_tpl.parent().find('.imagify-offer-line')) {
528
  $mo_tpl.parent().find('.imagify-offer-line').remove();
@@ -538,6 +589,7 @@
538
 
539
  // Show the content.
540
  imagifyModal.$modal.find('.imagify-modal-loader').fadeOut(300);
 
541
 
542
  }); // Third AJAX request to get discount information.
543
 
@@ -583,6 +635,14 @@
583
  ot: false
584
  };
585
 
 
 
 
 
 
 
 
 
586
  /**
587
  * Paid monthly plan.
588
  */
@@ -590,17 +650,21 @@
590
  // if this is the unlimited plan, save it; we may need to come back to it.
591
  if (0 > value.quota) {
592
  unlimitedPlan = {
593
- index: index,
594
- selected: 1
 
 
595
  };
596
  }
597
 
598
  // This is the biggest plan we've seen so far. Save it in case we need it later.
599
  if (value.quota > biggestPlan.quota) {
600
  biggestPlan = {
601
- index: index,
602
- selected: 1,
603
- quota: value.quota
 
 
604
  };
605
  }
606
 
@@ -620,8 +684,10 @@
620
  if (('undefined' === typeof plan) || (plan.quota > value.quota)) {
621
  plan = value;
622
  suggested.mo = {
623
- index: index,
624
- selected: (freeQuota > consumption.month) && (freeQuota > consumption.total) ? 0 : 1
 
 
625
  };
626
  }
627
 
@@ -660,16 +726,20 @@
660
 
661
  // Suggested monthly plan.
662
  suggested.ot = {
663
- index: index,
664
- selected: 0
 
 
665
  };
666
  return false;
667
  });
668
 
669
  if (false === suggested.ot) {
670
  suggested.ot = {
671
- index: offers.ot.length - 1,
672
- selected: 0
 
 
673
  };
674
  }
675
 
@@ -688,8 +758,10 @@
688
 
689
  // Suggested one-time plan.
690
  suggested.ot = {
691
- index: index,
692
- selected: 1
 
 
693
  };
694
  return false;
695
  });
@@ -704,8 +776,10 @@
704
  * In that case we fallback to the biggest available, and we need to increase the monthly plan.
705
  */
706
  suggested.ot = {
707
- index: offers.ot.length - 1,
708
- selected: 1
 
 
709
  };
710
 
711
  // Reset monthly plan.
@@ -723,8 +797,10 @@
723
 
724
  // Suggested monthly plan.
725
  suggested.mo = {
726
- index: index,
727
- selected: 1
 
 
728
  };
729
  return false;
730
  });
@@ -735,8 +811,10 @@
735
  * In that case we fallback to the biggest available.
736
  */
737
  suggested.mo = {
738
- index: offers.mo.length - 1,
739
- selected: 1
 
 
740
  };
741
  }
742
 
@@ -825,6 +903,7 @@
825
  },
826
 
827
  switchToView: function ($view, data) {
 
828
  var viewId = $view.attr('id'),
829
  $modalContent = imagifyModal.$modal.children('.imagify-modal-content');
830
 
@@ -962,7 +1041,7 @@
962
  checkPluginMessage: function (e) {
963
  var origin = e.origin || e.originalEvent.origin; // eslint-disable-line no-shadow
964
 
965
- if ('https://app.imagify.io' !== origin && 'http://dapp.imagify.io' !== origin) {
966
  return;
967
  }
968
 
@@ -977,6 +1056,25 @@
977
  imagifyModal.paymentSuccess();
978
  break;
979
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
980
  }
981
  };
982
 
@@ -1014,6 +1112,8 @@
1014
  */
1015
  $(d).on('modalClosed.imagify', '.imagify-payment-modal', function () {
1016
  // Reset viewing class & aria-labelledby.
 
 
1017
  $(this).find('.imagify-modal-content').removeClass('imagify-success-viewing imagify-iframe-viewing');
1018
 
1019
  // Reset first view after fadeout ~= 300 ms.
@@ -1021,6 +1121,11 @@
1021
  $('.imagify-modal-views').hide();
1022
  $('#imagify-pre-checkout-view').show();
1023
  }, 300);
 
 
 
 
 
1024
  });
1025
 
1026
  /**
@@ -1074,7 +1179,7 @@
1074
 
1075
  e.preventDefault();
1076
 
1077
- imagifyModal.switchToView(imagifyModal.$plansView, { tab: tab });
1078
  });
1079
 
1080
  /**
@@ -1096,7 +1201,8 @@
1096
  monthly_txt = is_onetime ? '' : '<span class="imagify-price-by">' + $offer_line.find('.imagify-price-by').text() + '</span>',
1097
  discount = $offer_line.find('.imagify-price-discount').html(),
1098
  imgs = $offer_line.find('.imagify-approx-nb').text(),
1099
- offer_size = $offer_line.find('.imagify-offer-size').text();
 
1100
 
1101
  e.preventDefault();
1102
 
@@ -1107,7 +1213,15 @@
1107
  $target_line.find('.imagify-number-block').html(price + monthly_txt);
1108
 
1109
  // Change discount.
1110
- $target_line.find('.imagify-price-discount').html(discount);
 
 
 
 
 
 
 
 
1111
 
1112
  // Change approx images nb.
1113
  $target_line.find('.imagify-approx-nb').text(imgs);
@@ -1130,6 +1244,18 @@
1130
  $target_line.find('.imagify-inline-options').find('input:radio:checked').trigger('change.imagify');
1131
  }
1132
 
 
 
 
 
 
 
 
 
 
 
 
 
1133
  // Update price information in button.
1134
  imagifyModal.populatePayBtn();
1135
  });
@@ -1177,7 +1303,6 @@
1177
  imagifyModal.switchToView(imagifyModal.$paymentView);
1178
 
1179
  checkout_datas.period = imagifyModal.getPeriod();
1180
-
1181
  imagifyModal.iframeSetSrc(checkout_datas);
1182
  });
1183
 
152
  quo = datas.quota, // 1000 (MB) - 5000 images (monthly/onetime)
153
  cos = datas.cost, // 3.49 (onetime)
154
  name = -1 === quo ? 'Unlimited' : (quo >= 1000 ? quo / 1000 + ' GB' : quo + ' MB'),
155
+ pcs = 'monthly' === type ? {monthly: mon, yearly: Math.round(ann / 12 * 100) / 100} : cos,
156
  pcsd = pcs, // Used if discount is active.
157
+ percent, $datas_c, datas_content, applies_to = [];
158
+
159
+ applies_to = imagifyModal.getPromoAppliesTo(promo);
160
+
161
 
162
  // Change pricing value only if discount in percentage is active and if offer is a monthly and not a onetime.
163
+ if (
164
+ promo.is_active
165
+ && 'percentage' === promo.coupon_type
166
+ && 'monthly' === type
167
+ && (0 < mon)
168
+ && (applies_to.includes(lab) || 'all' === applies_to[0])
169
+ ) {
170
  percent = (100 - promo.coupon_value) / 100;
171
  pcs = 'monthly' === type ? {
172
  monthly: mon * percent,
185
  $offer.find('.imagify-number-block').html(imagifyModal.getHtmlPrice(pcs, 'monthly'));
186
 
187
  // discount prices
188
+ $offer.find('.imagify-price-block').prev('.imagify-price-discount').remove();
189
+ if (
190
+ promo.is_active
191
+ && 'percentage' === promo.coupon_type
192
+ && 'monthly' === type
193
+ && (0 < mon)
194
+ && (applies_to.includes(lab) || 'all' === applies_to[0])
195
+ ) {
196
  $offer.find('.imagify-price-block').before(imagifyModal.getHtmlDiscountPrice(pcsd, 'monthly'));
197
  }
 
198
  // Nb images.
199
  $offer.find('.imagify-approx-nb').text(quo * 5);
200
 
207
  $datas_c = $offer.find('.imagify-payment-btn-select-plan').length ? $offer.find('.imagify-payment-btn-select-plan') : $offer;
208
 
209
  if ('monthly' === type) {
210
+ datas_content = '{"' + lab + '":{"id":' + id + ',"name":"' + name + '","label":"' + lab + '","data":' + quo + ',"dataf":"' + name + '","imgs":' + (quo * 5) + ',"prices":{"monthly":' + pcs.monthly + ',"yearly":' + pcs.yearly + ',"add":' + add + '}}}';
211
  } else {
212
+ datas_content = '{"ot' + lab + '":{"id":' + id + ',"name":"' + name + '","label":"' + lab + '","data":' + quo + ',"dataf":"' + name + '","imgs":' + (quo * 5) + ',"price":' + pcs + '}}';
213
  }
214
 
215
  $datas_c.attr('data-offer', datas_content);
252
  //$( '.imagify-global-amount' ).text( price ); // Not used.
253
 
254
  if ('0.00' === price || 0 === price) {
255
+ $('#imagify-modal-checkout-btn').prop('disabled', true).addClass('imagify-button-disabled');
256
  } else {
257
+ $('#imagify-modal-checkout-btn').prop('disabled', false).removeClass('imagify-button-disabled');
258
  }
259
  },
260
 
262
  var code = $('#imagify-coupon-code').val(),
263
  $cptext, $label, $section, nonce;
264
 
265
+ $cptext = $('.imagify-coupon-text');
266
+ $label = $cptext.find('label');
267
+ $section = $('.imagify-coupon-section');
268
+
269
  if ('' === code) {
270
+ $section.removeClass('validated').removeClass('invalid');
271
+ $label.html(imagifyPricingModal.labels.defaultCouponLabel);
272
  return;
273
  }
274
 
 
 
 
275
  nonce = $('#imagify-get-pricing-modal').data('nonce');
276
 
277
  $cptext.addClass('checking');
278
 
279
  // Get the true prices.
280
+ $.post(ajaxurl, {action: 'imagify_check_coupon', coupon: code, imagifynonce: nonce}, function (response) {
281
  var coupon_value;
282
 
283
  $cptext.removeClass('checking');
288
  $label.text(imagifyPricingModal.labels.errorCouponAPI);
289
  } else if (response.data.success) {
290
  coupon_value = 'percentage' === response.data.coupon_type ? response.data.value + '%' : '$' + response.data.value;
291
+ var $selected_plan_line = $('.imagify-pre-checkout-view .imagify-pre-checkout-offers .imagify-offer-line');
292
+ var offer_data = JSON.parse($selected_plan_line.attr('data-offer'));
293
+ var applies_to = imagifyModal.getPromoAppliesTo(response.data);
294
+ if ( applies_to.includes(offer_data[Object.keys(offer_data)[0]].label ) || "all" === applies_to[0] ){
295
+ $section.removeClass('invalid').addClass('validated');
296
+ $label.html(imagifyPricingModal.labels.successCouponAPI);
297
+ $label.find('.imagify-coupon-offer').text(coupon_value);
298
+ $label.find('.imagify-coupon-word').text(code);
299
+ } else {
300
+ $section.removeClass('validated').addClass('invalid');
301
+ $label.html(imagifyPricingModal.labels.errorCouponPlan);
302
+ $('#imagify-coupon-code').val('');
303
+
304
+ }
305
  } else {
306
  $section.removeClass('validated').addClass('invalid');
307
  $label.text(response.data.detail);
330
  };
331
 
332
  imagifyModal.$modal.find('.imagify-modal-loader').hide().show();
333
+ imagifyModal.$modal.addClass('imagify-modal-loading');
334
 
335
  /**
336
  * TODO: change the way to waterfall requests.
368
  $mo_tpl, $ot_tpl,
369
  ot_clone, mo_clone,
370
  $estim_block, $offers_block,
371
+ $banners, date_end, plan_names, promo, discount;
372
 
373
  if (! discount_response.success) {
374
  // TODO: replace modal content by any information.
442
 
443
  // Show the modal content.
444
  imagifyModal.$modal.find('.imagify-modal-loader').fadeOut(300);
445
+ imagifyModal.$modal.removeClass('imagify-modal-loading');
446
  return;
447
  }
448
 
450
  w.imagify_discount_datas = promo_datas;
451
 
452
  if (promo_datas.is_active) {
453
+ if (promo_datas.applies_to instanceof Array) {
454
+ plan_names = [];
455
+ var plan_list = [];
456
+
457
+ for (var plan_infos = 0; plan_infos < promo_datas.applies_to.length; plan_infos++) {
458
+ plan_list.push(promo_datas.applies_to[plan_infos].plan_name);
459
+ }
460
+
461
+ plan_list.forEach(function (item) {
462
+ if (! plan_names.includes(item)) {
463
+ plan_names.push(item);
464
+ }
465
+ });
466
+
467
+ plan_names = plan_names.join(', ');
468
+ } else {
469
+ plan_names = promo_datas.applies_to;
470
+ }
471
+
472
  $banners = $('.imagify-modal-promotion');
473
  date_end = promo_datas.date_end.split('T')[0];
474
  promo = promo_datas.coupon_value;
475
  discount = 'percentage' === promo_datas.coupon_type ? promo + '%' : '$' + promo;
476
 
 
 
477
 
478
  // Show banners.
479
  $banners.addClass('active').attr('aria-hidden', 'false');
480
 
481
  // Populate banners.
482
  $banners.find('.imagify-promotion-number').text(discount);
483
+ $banners.find('.imagify-promotion-plan-name').text(plan_names);
484
  $banners.find('.imagify-promotion-date').text(date_end);
485
 
 
 
486
  }
487
 
488
  /**
519
  // Add this offer as pre-selected item in pre-checkout view.
520
  $offer.addClass('imagify-offer-selected').find('.imagify-checkbox').prop('checked', true);
521
  }
 
522
  // Populate the Pre-checkout view depending on user_cons.
523
  imagifyModal.populateOffer($offer, value, 'monthly');
524
  }
565
  ot_html += $tpl[0].outerHTML;
566
  });
567
  }
568
+ if (promo_datas){
569
+ var applies_to = imagifyModal.getPromoAppliesTo(promo_datas);
570
+ if ( applies_to.includes(suggested.mo.plan_label) || applies_to.includes(suggested.ot.plan_label) || 'all' === applies_to[0]){
571
+ $('#imagify-coupon-code').val(promo_datas.label);
572
+ }
573
+ if (promo_datas.is_active) {
574
+ imagifyModal.checkCoupon();
575
+ }
576
+ }
577
  // Fill pricing tables.
578
  if ($mo_tpl.parent().find('.imagify-offer-line')) {
579
  $mo_tpl.parent().find('.imagify-offer-line').remove();
589
 
590
  // Show the content.
591
  imagifyModal.$modal.find('.imagify-modal-loader').fadeOut(300);
592
+ imagifyModal.$modal.removeClass('imagify-modal-loading');
593
 
594
  }); // Third AJAX request to get discount information.
595
 
635
  ot: false
636
  };
637
 
638
+ if (0 > offers.ot.length){
639
+ var last_ot_plan_id = offers.ot[offers.ot.length - 1].id;
640
+ var last_ot_plan_label = offers.ot[offers.ot.length - 1].label;
641
+ }
642
+ if (0 > offers.ot.length){
643
+ var last_mo_plan_id = offers.mo[offers.mo.length - 1].id;
644
+ var last_mo_plan_label = offers.mo[offers.mo.length - 1].label;
645
+ }
646
  /**
647
  * Paid monthly plan.
648
  */
650
  // if this is the unlimited plan, save it; we may need to come back to it.
651
  if (0 > value.quota) {
652
  unlimitedPlan = {
653
+ index: index,
654
+ selected: 1,
655
+ plan_id: value.id,
656
+ plan_label: value.label
657
  };
658
  }
659
 
660
  // This is the biggest plan we've seen so far. Save it in case we need it later.
661
  if (value.quota > biggestPlan.quota) {
662
  biggestPlan = {
663
+ index: index,
664
+ selected: 1,
665
+ quota: value.quota,
666
+ plan_id: value.id,
667
+ plan_label: value.label
668
  };
669
  }
670
 
684
  if (('undefined' === typeof plan) || (plan.quota > value.quota)) {
685
  plan = value;
686
  suggested.mo = {
687
+ index: index,
688
+ selected: (freeQuota > consumption.month) && (freeQuota > consumption.total) ? 0 : 1,
689
+ plan_id: value.id,
690
+ plan_label: value.label
691
  };
692
  }
693
 
726
 
727
  // Suggested monthly plan.
728
  suggested.ot = {
729
+ index: index,
730
+ selected: 0,
731
+ plan_id: value.id,
732
+ plan_label: value.label
733
  };
734
  return false;
735
  });
736
 
737
  if (false === suggested.ot) {
738
  suggested.ot = {
739
+ index: offers.ot.length - 1,
740
+ selected: 0,
741
+ plan_id: last_ot_plan_id,
742
+ plan_label: last_ot_plan_label
743
  };
744
  }
745
 
758
 
759
  // Suggested one-time plan.
760
  suggested.ot = {
761
+ index: index,
762
+ selected: 1,
763
+ plan_id: value.id,
764
+ plan_label: value.label
765
  };
766
  return false;
767
  });
776
  * In that case we fallback to the biggest available, and we need to increase the monthly plan.
777
  */
778
  suggested.ot = {
779
+ index: offers.ot.length - 1,
780
+ selected: 1,
781
+ plan_id: last_ot_plan_id,
782
+ plan_label: last_ot_plan_label
783
  };
784
 
785
  // Reset monthly plan.
797
 
798
  // Suggested monthly plan.
799
  suggested.mo = {
800
+ index: index,
801
+ selected: 1,
802
+ plan_id: value.id,
803
+ plan_label: value.label
804
  };
805
  return false;
806
  });
811
  * In that case we fallback to the biggest available.
812
  */
813
  suggested.mo = {
814
+ index: offers.mo.length - 1,
815
+ selected: 1,
816
+ plan_id: last_mo_plan_id,
817
+ plan_label: last_mo_plan_label
818
  };
819
  }
820
 
903
  },
904
 
905
  switchToView: function ($view, data) {
906
+
907
  var viewId = $view.attr('id'),
908
  $modalContent = imagifyModal.$modal.children('.imagify-modal-content');
909
 
1041
  checkPluginMessage: function (e) {
1042
  var origin = e.origin || e.originalEvent.origin; // eslint-disable-line no-shadow
1043
 
1044
+ if ( imagifyPricingModal.imagify_app_domain !== origin ) {
1045
  return;
1046
  }
1047
 
1056
  imagifyModal.paymentSuccess();
1057
  break;
1058
  }
1059
+ },
1060
+ getPromoAppliesTo: function(promo){
1061
+ var applies_to = [];
1062
+ if (promo.applies_to instanceof Array) {
1063
+ var plan_list = [];
1064
+
1065
+ for (var plan_infos = 0; plan_infos < promo.applies_to.length; plan_infos++) {
1066
+ plan_list.push(promo.applies_to[plan_infos].plan_name);
1067
+ }
1068
+
1069
+ plan_list.forEach(function (item) {
1070
+ if (! applies_to.includes(item)) {
1071
+ applies_to.push(item);
1072
+ }
1073
+ });
1074
+ } else {
1075
+ applies_to = [promo.applies_to];
1076
+ }
1077
+ return applies_to;
1078
  }
1079
  };
1080
 
1112
  */
1113
  $(d).on('modalClosed.imagify', '.imagify-payment-modal', function () {
1114
  // Reset viewing class & aria-labelledby.
1115
+ $('#imagify-coupon-code').val('');
1116
+
1117
  $(this).find('.imagify-modal-content').removeClass('imagify-success-viewing imagify-iframe-viewing');
1118
 
1119
  // Reset first view after fadeout ~= 300 ms.
1121
  $('.imagify-modal-views').hide();
1122
  $('#imagify-pre-checkout-view').show();
1123
  }, 300);
1124
+
1125
+ //delay scrolltop top to avoid flickering
1126
+ setTimeout(function () {
1127
+ $('.imagify-payment-modal').find('.imagify-modal-content').scrollTop(0);
1128
+ }, 400);
1129
  });
1130
 
1131
  /**
1179
 
1180
  e.preventDefault();
1181
 
1182
+ imagifyModal.switchToView(imagifyModal.$plansView, {tab: tab});
1183
  });
1184
 
1185
  /**
1201
  monthly_txt = is_onetime ? '' : '<span class="imagify-price-by">' + $offer_line.find('.imagify-price-by').text() + '</span>',
1202
  discount = $offer_line.find('.imagify-price-discount').html(),
1203
  imgs = $offer_line.find('.imagify-approx-nb').text(),
1204
+ offer_size = $offer_line.find('.imagify-offer-size').text(),
1205
+ $coupon_input = $('#imagify-coupon-code');
1206
 
1207
  e.preventDefault();
1208
 
1213
  $target_line.find('.imagify-number-block').html(price + monthly_txt);
1214
 
1215
  // Change discount.
1216
+ if (discount) {
1217
+ if ($target_line.find('.imagify-price-discount').length <= 0) {
1218
+ $target_line.find('.imagify-col-price').prepend('<span class="imagify-price-discount"></span>');
1219
+ }
1220
+ $target_line.find('.imagify-price-discount').html(discount);
1221
+ $target_line.find('.imagify-price-discount').show();
1222
+ } else {
1223
+ $target_line.find('.imagify-price-discount').hide();
1224
+ }
1225
 
1226
  // Change approx images nb.
1227
  $target_line.find('.imagify-approx-nb').text(imgs);
1244
  $target_line.find('.imagify-inline-options').find('input:radio:checked').trigger('change.imagify');
1245
  }
1246
 
1247
+ $coupon_input = $('#imagify-coupon-code');
1248
+ $coupon_input.val('');
1249
+
1250
+ if ( w.imagify_discount_datas ){
1251
+ var applies_to = imagifyModal.getPromoAppliesTo(w.imagify_discount_datas);
1252
+ if ( applies_to.includes(datas[Object.keys(datas)[0]].label ) || "all" === applies_to[0] ){
1253
+ $coupon_input.val(w.imagify_discount_datas.label);
1254
+ }
1255
+ }
1256
+
1257
+ imagifyModal.checkCoupon();
1258
+
1259
  // Update price information in button.
1260
  imagifyModal.populatePayBtn();
1261
  });
1303
  imagifyModal.switchToView(imagifyModal.$paymentView);
1304
 
1305
  checkout_datas.period = imagifyModal.getPeriod();
 
1306
  imagifyModal.iframeSetSrc(checkout_datas);
1307
  });
1308
 
assets/js/pricing-modal.min.js CHANGED
@@ -1 +1 @@
1
- !function(a,b,c,d){a(b).on("click.imagify",".imagify-tab",function(b){var c,d=a(this);b.preventDefault(),d.hasClass("imagify-current")||(c=d.find("a").attr("href")||"#"+d.find("a").attr("aria-controls"),d.closest(".imagify-tabs").next(".imagify-tabs-contents").find(".imagify-tab-content").hide().attr("aria-hidden","true"),a(c).fadeIn(275).attr("aria-hidden","false"),d.closest(".imagify-tabs").find(".imagify-tab").removeClass("imagify-current").attr("aria-selected","false"),d.addClass("imagify-current").attr("aria-selected","true"))})}(jQuery,document,window),function(a,b,c,d){var e={};a("#imagify-pricing-modal").length&&(e={$modal:a("#imagify-pricing-modal"),$checkboxes:a(".imagify-offer-line .imagify-checkbox"),$radios:a(".imagify-payment-modal .imagify-radio-line input"),$preView:a("#imagify-pre-checkout-view"),$plansView:a("#imagify-plans-selection-view").hide(),$paymentView:a("#imagify-payment-process-view").hide(),$successView:a("#imagify-success-view").hide(),$anotherBtn:a(".imagify-choose-another-plan"),speedFadeIn:300,getHtmlPrice:function(a,b){var c,d,e,f,g;return b||(b=null),"object"!=typeof a?(a+="",a=a.split("."),a[1]=1===a[1].length?a[1]+"0":(""+a[1]).substring(0,2),g='<span class="imagify-price-big">'+a[0]+"</span> ",g+='<span class="imagify-price-mini">.'+a[1]+"</span>"):(c=a.monthly+"",d=a.yearly+"",e="0"===c?["0","00"]:c.split("."),f="0"===d?["0","00"]:d.split("."),g='<span class="imagify-switch-my">',g+='<span aria-hidden="'+("monthly"===b?"false":"true")+'" class="imagify-monthly">',g+='<span class="imagify-price-big">'+e[0]+"</span> ",g+='<span class="imagify-price-mini">.'+(1===e[1].length?e[1]+"0":(""+e[1]).substring(0,2))+"</span>",g+="</span> ",g+='<span aria-hidden="'+("yearly"===b?"false":"true")+'" class="imagify-yearly">',g+='<span class="imagify-price-big">'+f[0]+"</span> ",g+='<span class="imagify-price-mini">.'+(1===f[1].length?f[1]+"0":(""+f[1]).substring(0,2))+"</span>",g+="</span>",g+="</span>")},getHtmlDiscountPrice:function(a,b){var c,d,e="";return b||(b=null),"object"==typeof a?(c=a.monthly+"",d=a.yearly+"",e+='<span class="imagify-price-discount">',e+='<span class="imagify-price-discount-dollar">$</span>',e+='<span class="imagify-switch-my">',e+='<span aria-hidden="'+("monthly"===b?"false":"true")+'" class="imagify-monthly">',e+='<span class="imagify-price-discount-number">'+c+"</span>",e+="</span>",e+='<span aria-hidden="'+("yearly"===b?"false":"true")+'" class="imagify-yearly">',e+='<span class="imagify-price-discount-number">'+d+"</span>",e+="</span>",e+="</span>",e+="</span>"):(a+="",e+='<span class="imagify-price-discount">',e+='<span class="imagify-price-discount-dollar">$</span>',e+='<span class="imagify-price-discount-number">'+a+"</span>",e+="</span>"),e},populateOffer:function(a,b,d,f){var g,h,i,j=c.imagify_discount_datas,k=b.additional_gb,l=b.annual_cost,m=b.id,n=b.label,o=b.monthly_cost,p=b.quota,q=b.cost,r=-1===p?"Unlimited":p>=1e3?p/1e3+" GB":p+" MB",s="monthly"===d?{monthly:o,yearly:Math.round(l/12*100)/100}:q,t=s;return j.is_active&&"percentage"===j.coupon_type&&"monthly"===d&&(g=(100-j.coupon_value)/100,s="monthly"===d?{monthly:o*g,yearly:Math.round(l*g/12*100)/100}:q*g),void 0!==f&&a.addClass("imagify-"+d+"-"+n+f),a.find(".imagify-offer-size").text(r),a.find(".imagify-number-block").html(e.getHtmlPrice(s,"monthly")),j.is_active&&"percentage"===j.coupon_type&&"monthly"===d&&(a.find(".imagify-price-block").prev(".imagify-price-discount").remove(),a.find(".imagify-price-block").before(e.getHtmlDiscountPrice(t,"monthly"))),a.find(".imagify-approx-nb").text(5*p),"monthly"===d&&a.find(".imagify-price-add-data").text("$"+k),h=a.find(".imagify-payment-btn-select-plan").length?a.find(".imagify-payment-btn-select-plan"):a,i="monthly"===d?'{"'+n+'":{"id":'+m+',"name":"'+r+'","data":'+p+',"dataf":"'+r+'","imgs":'+5*p+',"prices":{"monthly":'+s.monthly+',"yearly":'+s.yearly+',"add":'+k+"}}}":'{"ot'+n+'":{"id":'+m+',"name":"'+r+'","data":'+p+',"dataf":"'+r+'","imgs":'+5*p+',"price":'+s+"}}",h.attr("data-offer",i),a},populatePayBtn:function(){var b,c,d=a(".imagify-offer-monthly"),e=a(".imagify-offer-onetime"),f=0,g=0,h=0;d.length&&(b=JSON.parse(d.attr("data-offer")),d.hasClass("imagify-offer-selected")&&(g=a("#imagify-subscription-monthly").filter(":checked").length?b[Object.keys(b)[0]].prices.monthly:12*b[Object.keys(b)[0]].prices.yearly)),e.length&&(c=JSON.parse(e.attr("data-offer")),e.hasClass("imagify-offer-selected")&&(h=c[Object.keys(c)[0]].price)),f=parseFloat(h+g).toFixed(2),"0.00"===f||0===f?a("#imagify-modal-checkout-btn").attr("disabled","disabled").addClass("imagify-button-disabled"):a("#imagify-modal-checkout-btn").removeAttr("disabled").removeClass("imagify-button-disabled")},checkCoupon:function(){var b,c,d,e,f=a("#imagify-coupon-code").val();""!==f&&(b=a(".imagify-coupon-text"),c=b.find("label"),d=a(".imagify-coupon-section"),e=a("#imagify-get-pricing-modal").data("nonce"),b.addClass("checking"),a.post(ajaxurl,{action:"imagify_check_coupon",coupon:f,imagifynonce:e},function(a){var e;b.removeClass("checking"),a.success?a.data.success?(e="percentage"===a.data.coupon_type?a.data.value+"%":"$"+a.data.value,d.removeClass("invalid").addClass("validated"),c.html(imagifyPricingModal.labels.successCouponAPI),c.find(".imagify-coupon-offer").text(e),c.find(".imagify-coupon-word").text(f)):(d.removeClass("validated").addClass("invalid"),c.text(a.data.detail)):(d.removeClass("validated").addClass("invalid"),c.text(imagifyPricingModal.labels.errorCouponAPI))}))},getPricing:function(b){var d=b.data("nonce"),f={action:"imagify_get_prices",imagifynonce:d},g={action:"imagify_get_images_counts",imagifynonce:d},h={action:"imagify_get_discount",imagifynonce:d};e.$modal.find(".imagify-modal-loader").hide().show(),a.post(ajaxurl,f,function(b){if(!b.success)return void e.populatePayBtn();a.post(ajaxurl,g,function(d){d.success&&a.post(ajaxurl,h,function(f){var g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w=25,x="",y="";if(f.success){if(g=d.data,h=b.data,i=f.data,j={mo:[],ot:[]},k={month:g.average_month_size.raw/Math.pow(1024,2),total:g.total_library_size.raw/Math.pow(1024,2)},m=a("#imagify-offer-monthly-template"),n=a("#imagify-offer-onetime-template"),o=n.html(),p=m.html(),q=a(".imagify-estimation-block"),a.each(h.monthlies,function(a,b){(void 0===b.active||void 0!==b.active&&!0===b.active)&&("free"===b.label&&(w=b.quota),j.mo.push(b))}),a.each(h.onetimes,function(a,b){(void 0===b.active||void 0!==b.active&&!0===b.active)&&j.ot.push(b)}),q.removeClass("imagify-analyzing"),q.find(".average-month-size").text(g.average_month_size.human),q.find(".total-library-size").text(g.total_library_size.human),k.total+k.month<w?a(".imagify-pre-checkout-offers .imagify-modal-title").addClass("imagify-enough-free"):a(".imagify-enough-free").removeClass("imagify-enough-free"),a(".imagify-offer-selected").removeClass("imagify-offer-selected").find(".imagify-checkbox").prop("checked",!1),null===j.mo||null===j.ot)return r=a(".imagify-pre-checkout-offers"),r.hide().attr("aria-hidden",!0),r.closest(".imagify-modal-views").find(".imagify-popin-message").remove(),r.after('<div class="imagify-popin-message imagify-error"><p>'+imagifyPricingModal.labels.errorPriceAPI+"</p></div>"),void e.$modal.find(".imagify-modal-loader").fadeOut(300);c.imagify_discount_datas=i,i.is_active&&(s=a(".imagify-modal-promotion"),t=i.date_end.split("T")[0],u=i.coupon_value,v="percentage"===i.coupon_type?u+"%":"$"+u,a("#imagify-coupon-code").val(i.label).attr("readonly",!0),s.addClass("active").attr("aria-hidden","false"),s.find(".imagify-promotion-number").text(v),s.find(".imagify-promotion-date").text(t),e.checkCoupon()),l=e.getSuggestedOffers(j,k,w),0===j.mo.length?(a(".imagify-pre-checkout-offers .imagify-offer-monthly").remove(),a(".imagify-tabs").remove(),a(".imagify-pricing-tab-monthly").remove()):a.each(j.mo,function(b,c){var d,f,g="";if(b-l.mo.index>2)return!0;b===l.mo.index&&(f=a(".imagify-pre-checkout-offers .imagify-offer-monthly"),l.mo.selected&&(g=" imagify-offer-selected",f.addClass("imagify-offer-selected").find(".imagify-checkbox").prop("checked",!0)),e.populateOffer(f,c,"monthly")),d=a(p).clone(),d=e.populateOffer(d,c,"monthly",g),y+=d[0].outerHTML}),0===j.ot.length?(a(".imagify-pre-checkout-offers .imagify-offer-onetime").remove(),a(".imagify-tabs").remove(),a(".imagify-pricing-tab-onetime").remove()):a.each(j.ot,function(b,c){var d,f,g="";b===l.ot.index&&(f=a(".imagify-pre-checkout-offers .imagify-offer-onetime"),l.ot.selected&&(g=" imagify-offer-selected",f.addClass("imagify-offer-selected").find(".imagify-checkbox").prop("checked",!0)),e.populateOffer(f,c,"onetime")),d=a(o).clone(),d=e.populateOffer(d,c,"onetime",g),x+=d[0].outerHTML}),m.parent().find(".imagify-offer-line")&&m.parent().find(".imagify-offer-line").remove(),m.before(y),n.parent().find(".imagify-offer-line")&&n.parent().find(".imagify-offer-line").remove(),n.before(x),e.$modal.find(".imagify-modal-loader").fadeOut(300)}})}),e.populatePayBtn()})},getSuggestedOffers:function(b,c,d){var e,f,g=c.total+c.month,h={quota:0},i={mo:!1,ot:!1};return a.each(b.mo,function(a,b){return 0>b.quota&&(f={index:a,selected:1}),b.quota>h.quota&&(h={index:a,selected:1,quota:b.quota}),0===b.monthly_cost&&0===b.annual_cost||(0>=b.quota&&c.month>b.quota||c.total>b.quota||(!(0<=b.quota&&c.month<b.quota&&c.total<b.quota)||((void 0===e||e.quota>b.quota)&&(e=b,i.mo={index:a,selected:d>c.month&&d>c.total?0:1}),!0)))}),!1===i.mo&&(i.mo=void 0!==f?f:h),g-=b.mo[i.mo.index].quota,0===b.ot.length?i:g<=0?(a.each(b.ot,function(a,b){return b.quota<c.total||(i.ot={index:a,selected:0},!1)}),!1===i.ot&&(i.ot={index:b.ot.length-1,selected:0}),i):(a.each(b.ot,function(a,b){return b.quota<g||(i.ot={index:a,selected:1},!1)}),!1!==i.ot?i:(i.ot={index:b.ot.length-1,selected:1},i.mo=!1,g=c.total+c.month-b.ot[i.ot.index].quota,a.each(b.mo,function(a,b){return b.quota<g||(i.mo={index:a,selected:1},!1)}),!1===i.mo&&(i.mo={index:b.mo.length-1,selected:1}),i))},checkCheckbox:function(b){b.each(function(){var b=a(this);b.is(":checked")?b.closest(".imagify-offer-line").addClass("imagify-offer-selected"):b.closest(".imagify-offer-line").removeClass("imagify-offer-selected")}),e.populatePayBtn()},checkRadio:function(b){return b.each(function(){var b,c,d=a(this);b=d.parent(".imagify-cart-list-switcher").length?d.closest(".imagify-cart"):d.parent(".imagify-small-options").length?d.parent(".imagify-small-options").next(".imagify-pricing-table"):d.closest(".imagify-offer-line"),c=b.find(".imagify-switch-my"),"yearly"===d.val()?(b.addClass("imagify-year-selected").removeClass("imagify-month-selected"),c.find(".imagify-monthly").attr("aria-hidden","true"),c.find(".imagify-yearly").attr("aria-hidden","false")):(b.addClass("imagify-month-selected").removeClass("imagify-year-selected"),c.find(".imagify-monthly").attr("aria-hidden","false"),c.find(".imagify-yearly").attr("aria-hidden","true"))}),e.populatePayBtn(),b},populateBtnPrice:setInterval(function(){e.populatePayBtn()},1e3),getPeriod:function(){return a(".imagify-offer-monthly").hasClass("imagify-month-selected")?"monthly":"yearly"},getApiKey:function(){return a("#imagify-payment-iframe").data("imagify-api")},switchToView:function(a,b){var c=a.attr("id"),d=e.$modal.children(".imagify-modal-content");a.siblings(".imagify-modal-views").hide().attr("aria-hidden","true"),b&&b.tab&&a.find('a[href="#'+b.tab+'"]').trigger("click.imagify"),"imagify-payment-process-view"===c?d.addClass("imagify-iframe-viewing"):d.removeClass("imagify-iframe-viewing"),"imagify-success-view"===c?(d.addClass("imagify-success-viewing"),e.$modal.attr("aria-labelledby","imagify-success-view")):(d.removeClass("imagify-success-viewing"),e.$modal.removeAttr("aria-labelledby")),a.fadeIn(e.speedFadeIn).attr("aria-hidden","false")},iframeSetSrc:function(b){var d,f,g,h,i,j,k,l=a("#imagify-payment-iframe"),m=l.attr("src"),n=l.data("src"),o=0,p=0;if("string"==typeof b&&""!==m)return k="monthly"===b?"yearly":"monthly",m=m.replace(k,b),void l.attr("src",m);if("object"==typeof b){if(b.monthly&&(o=b.monthly[Object.keys(b.monthly)[0]].id),b.onetime&&(p=b.onetime[Object.keys(b.onetime)[0]].id,p=p+""=="999"?b.onetime[Object.keys(b.onetime)[0]].data:p),!b.period)return void c.imagify.info("No period defined");e.getApiKey(),d=p,f="yearly"===b.period?o:0,g="monthly"===b.period?o:0,h=a("#imagify-coupon-code").val(),i=""===h?"none":h,parseFloat(a(".imagify-global-amount").text()).toFixed(2),n=n+d+"/"+g+"/"+f+"/"+i+"/",j=l.remove().attr("src",n),e.$paymentView.html(j)}},paymentClose:function(){a(".imagify-iframe-viewing .close-btn").trigger("click.imagify"),a(".imagify-iframe-viewing").removeClass("imagify-iframe-viewing")},paymentBack:function(){e.switchToView(e.$preView)},paymentSuccess:function(){e.switchToView(e.$successView)},checkPluginMessage:function(a){var b=a.origin||a.originalEvent.origin;if("https://app.imagify.io"===b||"http://dapp.imagify.io"===b)switch(a.data){case"cancel":e.paymentClose();break;case"back":e.paymentBack();break;case"success":e.paymentSuccess()}}},e.checkCheckbox(e.$checkboxes),e.checkRadio(e.$radios.filter(":checked")),e.checkCoupon(),e.$checkboxes.on("change.imagify",function(){e.checkCheckbox(a(this))}),e.$radios.on("change.imagify",function(){e.checkRadio(a(this))}),a("#imagify-get-pricing-modal").on("click.imagify-ajax",function(){e.getPricing(a(this))}),a(b).on("modalClosed.imagify",".imagify-payment-modal",function(){a(this).find(".imagify-modal-content").removeClass("imagify-success-viewing imagify-iframe-viewing"),setTimeout(function(){a(".imagify-modal-views").hide(),a("#imagify-pre-checkout-view").show()},300)}),a("#imagify-coupon-code").on("blur.imagify",function(){a(this).attr("readonly")||e.checkCoupon()}).on("keydown.imagify",function(b){var c=a(this);if(!c.attr("readonly"))return 13===b.keyCode||32===b.keyCode?(e.checkCoupon(),!1):void(c.val().length>=3?c.closest(".imagify-coupon-input").addClass("imagify-canbe-validate"):c.closest(".imagify-coupon-input").removeClass("imagify-canbe-validate"))}),a("#imagify-coupon-validate").on("click.imagify",function(){e.checkCoupon(),a(this).closest(".imagify-canbe-validate").removeClass("imagify-canbe-validate")}),e.$anotherBtn.on("click.imagify",function(b){var c=a(this).data("imagify-choose"),d="imagify-pricing-tab-"+("plan"===c?"monthly":"onetime");b.preventDefault(),e.switchToView(e.$plansView,{tab:d})}),e.$modal.on("click.imagify",".imagify-payment-btn-select-plan",function(b){var c=a(this),d=c.closest(".imagify-offer-line"),f=c.data("offer"),g=c.attr("data-offer"),h="imagify-pricing-tab-monthly"!==c.closest(".imagify-tab-content").attr("id"),i=h?e.$preView.find(".imagify-offer-onetime"):e.$preView.find(".imagify-offer-monthly"),j=h?null:c.closest(".imagify-pricing-table").hasClass("imagify-month-selected")?"monthly":"yearly",k=h?e.getHtmlPrice(f[Object.keys(f)[0]].price):e.getHtmlPrice(f[Object.keys(f)[0]].prices,j),l=h?"":'<span class="imagify-price-by">'+d.find(".imagify-price-by").text()+"</span>",m=d.find(".imagify-price-discount").html(),n=d.find(".imagify-approx-nb").text(),o=d.find(".imagify-offer-size").text();b.preventDefault(),e.switchToView(e.$preView),i.find(".imagify-number-block").html(k+l),i.find(".imagify-price-discount").html(m),i.find(".imagify-approx-nb").text(n),i.find(".imagify-offer-size").text(o),i.attr("data-offer",g),h||(i.find(".imagify-price-add-data").text(d.find(".imagify-price-add-data").text()),"monthly"===j?i.find("#imagify-subscription-monthly").trigger("click.imagify"):i.find("#imagify-subscription-yearly").trigger("click.imagify"),i.find(".imagify-inline-options").find("input:radio:checked").trigger("change.imagify")),e.populatePayBtn()}),a("#imagify-modal-checkout-btn").on("click.imagify",function(b){var c,d,f;b.preventDefault(),a(this).hasClass("imagify-button-disabled")||(c=a(".imagify-offer-monthly"),d=a(".imagify-offer-onetime"),f={},c.hasClass("imagify-offer-selected")&&(f.monthly=JSON.parse(c.attr("data-offer"))),d.hasClass("imagify-offer-selected")&&(f.onetime=JSON.parse(d.attr("data-offer"))),imagifyPricingModal.userDataCache&&a.post(ajaxurl,{action:imagifyPricingModal.userDataCache.deleteAction,_wpnonce:imagifyPricingModal.userDataCache.deleteNonce}),e.switchToView(e.$paymentView),f.period=e.getPeriod(),e.iframeSetSrc(f))}),a(".imagify-back-to-plans").on("click.imagify",function(b){var c=a(this),d=c.closest(".imagify-cart-item").hasClass("imagify-cart-item-onetime");b.preventDefault(),d?a(".imagify-offer-onetime").find(".imagify-choose-another-plan").trigger("click.imagify"):a(".imagify-offer-monthly").find(".imagify-choose-another-plan").trigger("click.imagify")}),c.addEventListener("message",e.checkPluginMessage,!0))}(jQuery,document,window);
1
+ !function(a,b,c,d){a(b).on("click.imagify",".imagify-tab",function(b){var c,d=a(this);b.preventDefault(),d.hasClass("imagify-current")||(c=d.find("a").attr("href")||"#"+d.find("a").attr("aria-controls"),d.closest(".imagify-tabs").next(".imagify-tabs-contents").find(".imagify-tab-content").hide().attr("aria-hidden","true"),a(c).fadeIn(275).attr("aria-hidden","false"),d.closest(".imagify-tabs").find(".imagify-tab").removeClass("imagify-current").attr("aria-selected","false"),d.addClass("imagify-current").attr("aria-selected","true"))})}(jQuery,document,window),function(a,b,c,d){var e={};a("#imagify-pricing-modal").length&&(e={$modal:a("#imagify-pricing-modal"),$checkboxes:a(".imagify-offer-line .imagify-checkbox"),$radios:a(".imagify-payment-modal .imagify-radio-line input"),$preView:a("#imagify-pre-checkout-view"),$plansView:a("#imagify-plans-selection-view").hide(),$paymentView:a("#imagify-payment-process-view").hide(),$successView:a("#imagify-success-view").hide(),$anotherBtn:a(".imagify-choose-another-plan"),speedFadeIn:300,getHtmlPrice:function(a,b){var c,d,e,f,g;return b||(b=null),"object"!=typeof a?(a+="",a=a.split("."),a[1]=1===a[1].length?a[1]+"0":(""+a[1]).substring(0,2),g='<span class="imagify-price-big">'+a[0]+"</span> ",g+='<span class="imagify-price-mini">.'+a[1]+"</span>"):(c=a.monthly+"",d=a.yearly+"",e="0"===c?["0","00"]:c.split("."),f="0"===d?["0","00"]:d.split("."),g='<span class="imagify-switch-my">',g+='<span aria-hidden="'+("monthly"===b?"false":"true")+'" class="imagify-monthly">',g+='<span class="imagify-price-big">'+e[0]+"</span> ",g+='<span class="imagify-price-mini">.'+(1===e[1].length?e[1]+"0":(""+e[1]).substring(0,2))+"</span>",g+="</span> ",g+='<span aria-hidden="'+("yearly"===b?"false":"true")+'" class="imagify-yearly">',g+='<span class="imagify-price-big">'+f[0]+"</span> ",g+='<span class="imagify-price-mini">.'+(1===f[1].length?f[1]+"0":(""+f[1]).substring(0,2))+"</span>",g+="</span>",g+="</span>")},getHtmlDiscountPrice:function(a,b){var c,d,e="";return b||(b=null),"object"==typeof a?(c=a.monthly+"",d=a.yearly+"",e+='<span class="imagify-price-discount">',e+='<span class="imagify-price-discount-dollar">$</span>',e+='<span class="imagify-switch-my">',e+='<span aria-hidden="'+("monthly"===b?"false":"true")+'" class="imagify-monthly">',e+='<span class="imagify-price-discount-number">'+c+"</span>",e+="</span>",e+='<span aria-hidden="'+("yearly"===b?"false":"true")+'" class="imagify-yearly">',e+='<span class="imagify-price-discount-number">'+d+"</span>",e+="</span>",e+="</span>",e+="</span>"):(a+="",e+='<span class="imagify-price-discount">',e+='<span class="imagify-price-discount-dollar">$</span>',e+='<span class="imagify-price-discount-number">'+a+"</span>",e+="</span>"),e},populateOffer:function(a,b,d,f){var g,h,i,j=c.imagify_discount_datas,k=b.additional_gb,l=b.annual_cost,m=b.id,n=b.label,o=b.monthly_cost,p=b.quota,q=b.cost,r=-1===p?"Unlimited":p>=1e3?p/1e3+" GB":p+" MB",s="monthly"===d?{monthly:o,yearly:Math.round(l/12*100)/100}:q,t=s,u=[];return u=e.getPromoAppliesTo(j),j.is_active&&"percentage"===j.coupon_type&&"monthly"===d&&0<o&&(u.includes(n)||"all"===u[0])&&(g=(100-j.coupon_value)/100,s="monthly"===d?{monthly:o*g,yearly:Math.round(l*g/12*100)/100}:q*g),void 0!==f&&a.addClass("imagify-"+d+"-"+n+f),a.find(".imagify-offer-size").text(r),a.find(".imagify-number-block").html(e.getHtmlPrice(s,"monthly")),a.find(".imagify-price-block").prev(".imagify-price-discount").remove(),j.is_active&&"percentage"===j.coupon_type&&"monthly"===d&&0<o&&(u.includes(n)||"all"===u[0])&&a.find(".imagify-price-block").before(e.getHtmlDiscountPrice(t,"monthly")),a.find(".imagify-approx-nb").text(5*p),"monthly"===d&&a.find(".imagify-price-add-data").text("$"+k),h=a.find(".imagify-payment-btn-select-plan").length?a.find(".imagify-payment-btn-select-plan"):a,i="monthly"===d?'{"'+n+'":{"id":'+m+',"name":"'+r+'","label":"'+n+'","data":'+p+',"dataf":"'+r+'","imgs":'+5*p+',"prices":{"monthly":'+s.monthly+',"yearly":'+s.yearly+',"add":'+k+"}}}":'{"ot'+n+'":{"id":'+m+',"name":"'+r+'","label":"'+n+'","data":'+p+',"dataf":"'+r+'","imgs":'+5*p+',"price":'+s+"}}",h.attr("data-offer",i),a},populatePayBtn:function(){var b,c,d=a(".imagify-offer-monthly"),e=a(".imagify-offer-onetime"),f=0,g=0,h=0;d.length&&(b=JSON.parse(d.attr("data-offer")),d.hasClass("imagify-offer-selected")&&(g=a("#imagify-subscription-monthly").filter(":checked").length?b[Object.keys(b)[0]].prices.monthly:12*b[Object.keys(b)[0]].prices.yearly)),e.length&&(c=JSON.parse(e.attr("data-offer")),e.hasClass("imagify-offer-selected")&&(h=c[Object.keys(c)[0]].price)),f=parseFloat(h+g).toFixed(2),"0.00"===f||0===f?a("#imagify-modal-checkout-btn").prop("disabled",!0).addClass("imagify-button-disabled"):a("#imagify-modal-checkout-btn").prop("disabled",!1).removeClass("imagify-button-disabled")},checkCoupon:function(){var b,c,d,f,g=a("#imagify-coupon-code").val();if(b=a(".imagify-coupon-text"),c=b.find("label"),d=a(".imagify-coupon-section"),""===g)return d.removeClass("validated").removeClass("invalid"),void c.html(imagifyPricingModal.labels.defaultCouponLabel);f=a("#imagify-get-pricing-modal").data("nonce"),b.addClass("checking"),a.post(ajaxurl,{action:"imagify_check_coupon",coupon:g,imagifynonce:f},function(f){var h;if(b.removeClass("checking"),f.success)if(f.data.success){h="percentage"===f.data.coupon_type?f.data.value+"%":"$"+f.data.value;var i=a(".imagify-pre-checkout-view .imagify-pre-checkout-offers .imagify-offer-line"),j=JSON.parse(i.attr("data-offer")),k=e.getPromoAppliesTo(f.data);k.includes(j[Object.keys(j)[0]].label)||"all"===k[0]?(d.removeClass("invalid").addClass("validated"),c.html(imagifyPricingModal.labels.successCouponAPI),c.find(".imagify-coupon-offer").text(h),c.find(".imagify-coupon-word").text(g)):(d.removeClass("validated").addClass("invalid"),c.html(imagifyPricingModal.labels.errorCouponPlan),a("#imagify-coupon-code").val(""))}else d.removeClass("validated").addClass("invalid"),c.text(f.data.detail);else d.removeClass("validated").addClass("invalid"),c.text(imagifyPricingModal.labels.errorCouponAPI)})},getPricing:function(b){var d=b.data("nonce"),f={action:"imagify_get_prices",imagifynonce:d},g={action:"imagify_get_images_counts",imagifynonce:d},h={action:"imagify_get_discount",imagifynonce:d};e.$modal.find(".imagify-modal-loader").hide().show(),e.$modal.addClass("imagify-modal-loading"),a.post(ajaxurl,f,function(b){if(!b.success)return void e.populatePayBtn();a.post(ajaxurl,g,function(d){d.success&&a.post(ajaxurl,h,function(f){var g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x=25,y="",z="";if(f.success){if(g=d.data,h=b.data,i=f.data,j={mo:[],ot:[]},k={month:g.average_month_size.raw/Math.pow(1024,2),total:g.total_library_size.raw/Math.pow(1024,2)},m=a("#imagify-offer-monthly-template"),n=a("#imagify-offer-onetime-template"),o=n.html(),p=m.html(),q=a(".imagify-estimation-block"),a.each(h.monthlies,function(a,b){(void 0===b.active||void 0!==b.active&&!0===b.active)&&("free"===b.label&&(x=b.quota),j.mo.push(b))}),a.each(h.onetimes,function(a,b){(void 0===b.active||void 0!==b.active&&!0===b.active)&&j.ot.push(b)}),q.removeClass("imagify-analyzing"),q.find(".average-month-size").text(g.average_month_size.human),q.find(".total-library-size").text(g.total_library_size.human),k.total+k.month<x?a(".imagify-pre-checkout-offers .imagify-modal-title").addClass("imagify-enough-free"):a(".imagify-enough-free").removeClass("imagify-enough-free"),a(".imagify-offer-selected").removeClass("imagify-offer-selected").find(".imagify-checkbox").prop("checked",!1),null===j.mo||null===j.ot)return r=a(".imagify-pre-checkout-offers"),r.hide().attr("aria-hidden",!0),r.closest(".imagify-modal-views").find(".imagify-popin-message").remove(),r.after('<div class="imagify-popin-message imagify-error"><p>'+imagifyPricingModal.labels.errorPriceAPI+"</p></div>"),e.$modal.find(".imagify-modal-loader").fadeOut(300),void e.$modal.removeClass("imagify-modal-loading");if(c.imagify_discount_datas=i,i.is_active){if(i.applies_to instanceof Array){u=[];for(var A=[],B=0;B<i.applies_to.length;B++)A.push(i.applies_to[B].plan_name);A.forEach(function(a){u.includes(a)||u.push(a)}),u=u.join(", ")}else u=i.applies_to;s=a(".imagify-modal-promotion"),t=i.date_end.split("T")[0],v=i.coupon_value,w="percentage"===i.coupon_type?v+"%":"$"+v,s.addClass("active").attr("aria-hidden","false"),s.find(".imagify-promotion-number").text(w),s.find(".imagify-promotion-plan-name").text(u),s.find(".imagify-promotion-date").text(t)}if(l=e.getSuggestedOffers(j,k,x),0===j.mo.length?(a(".imagify-pre-checkout-offers .imagify-offer-monthly").remove(),a(".imagify-tabs").remove(),a(".imagify-pricing-tab-monthly").remove()):a.each(j.mo,function(b,c){var d,f,g="";if(b-l.mo.index>2)return!0;b===l.mo.index&&(f=a(".imagify-pre-checkout-offers .imagify-offer-monthly"),l.mo.selected&&(g=" imagify-offer-selected",f.addClass("imagify-offer-selected").find(".imagify-checkbox").prop("checked",!0)),e.populateOffer(f,c,"monthly")),d=a(p).clone(),d=e.populateOffer(d,c,"monthly",g),z+=d[0].outerHTML}),0===j.ot.length?(a(".imagify-pre-checkout-offers .imagify-offer-onetime").remove(),a(".imagify-tabs").remove(),a(".imagify-pricing-tab-onetime").remove()):a.each(j.ot,function(b,c){var d,f,g="";b===l.ot.index&&(f=a(".imagify-pre-checkout-offers .imagify-offer-onetime"),l.ot.selected&&(g=" imagify-offer-selected",f.addClass("imagify-offer-selected").find(".imagify-checkbox").prop("checked",!0)),e.populateOffer(f,c,"onetime")),d=a(o).clone(),d=e.populateOffer(d,c,"onetime",g),y+=d[0].outerHTML}),i){var C=e.getPromoAppliesTo(i);(C.includes(l.mo.plan_label)||C.includes(l.ot.plan_label)||"all"===C[0])&&a("#imagify-coupon-code").val(i.label),i.is_active&&e.checkCoupon()}m.parent().find(".imagify-offer-line")&&m.parent().find(".imagify-offer-line").remove(),m.before(z),n.parent().find(".imagify-offer-line")&&n.parent().find(".imagify-offer-line").remove(),n.before(y),e.$modal.find(".imagify-modal-loader").fadeOut(300),e.$modal.removeClass("imagify-modal-loading")}})}),e.populatePayBtn()})},getSuggestedOffers:function(b,c,d){var e,f,g=c.total+c.month,h={quota:0},i={mo:!1,ot:!1};if(0>b.ot.length)var j=b.ot[b.ot.length-1].id,k=b.ot[b.ot.length-1].label;if(0>b.ot.length)var l=b.mo[b.mo.length-1].id,m=b.mo[b.mo.length-1].label;return a.each(b.mo,function(a,b){return 0>b.quota&&(f={index:a,selected:1,plan_id:b.id,plan_label:b.label}),b.quota>h.quota&&(h={index:a,selected:1,quota:b.quota,plan_id:b.id,plan_label:b.label}),0===b.monthly_cost&&0===b.annual_cost||(0>=b.quota&&c.month>b.quota||c.total>b.quota||(!(0<=b.quota&&c.month<b.quota&&c.total<b.quota)||((void 0===e||e.quota>b.quota)&&(e=b,i.mo={index:a,selected:d>c.month&&d>c.total?0:1,plan_id:b.id,plan_label:b.label}),!0)))}),!1===i.mo&&(i.mo=void 0!==f?f:h),g-=b.mo[i.mo.index].quota,0===b.ot.length?i:g<=0?(a.each(b.ot,function(a,b){return b.quota<c.total||(i.ot={index:a,selected:0,plan_id:b.id,plan_label:b.label},!1)}),!1===i.ot&&(i.ot={index:b.ot.length-1,selected:0,plan_id:j,plan_label:k}),i):(a.each(b.ot,function(a,b){return b.quota<g||(i.ot={index:a,selected:1,plan_id:b.id,plan_label:b.label},!1)}),!1!==i.ot?i:(i.ot={index:b.ot.length-1,selected:1,plan_id:j,plan_label:k},i.mo=!1,g=c.total+c.month-b.ot[i.ot.index].quota,a.each(b.mo,function(a,b){return b.quota<g||(i.mo={index:a,selected:1,plan_id:b.id,plan_label:b.label},!1)}),!1===i.mo&&(i.mo={index:b.mo.length-1,selected:1,plan_id:l,plan_label:m}),i))},checkCheckbox:function(b){b.each(function(){var b=a(this);b.is(":checked")?b.closest(".imagify-offer-line").addClass("imagify-offer-selected"):b.closest(".imagify-offer-line").removeClass("imagify-offer-selected")}),e.populatePayBtn()},checkRadio:function(b){return b.each(function(){var b,c,d=a(this);b=d.parent(".imagify-cart-list-switcher").length?d.closest(".imagify-cart"):d.parent(".imagify-small-options").length?d.parent(".imagify-small-options").next(".imagify-pricing-table"):d.closest(".imagify-offer-line"),c=b.find(".imagify-switch-my"),"yearly"===d.val()?(b.addClass("imagify-year-selected").removeClass("imagify-month-selected"),c.find(".imagify-monthly").attr("aria-hidden","true"),c.find(".imagify-yearly").attr("aria-hidden","false")):(b.addClass("imagify-month-selected").removeClass("imagify-year-selected"),c.find(".imagify-monthly").attr("aria-hidden","false"),c.find(".imagify-yearly").attr("aria-hidden","true"))}),e.populatePayBtn(),b},populateBtnPrice:setInterval(function(){e.populatePayBtn()},1e3),getPeriod:function(){return a(".imagify-offer-monthly").hasClass("imagify-month-selected")?"monthly":"yearly"},getApiKey:function(){return a("#imagify-payment-iframe").data("imagify-api")},switchToView:function(a,b){var c=a.attr("id"),d=e.$modal.children(".imagify-modal-content");a.siblings(".imagify-modal-views").hide().attr("aria-hidden","true"),b&&b.tab&&a.find('a[href="#'+b.tab+'"]').trigger("click.imagify"),"imagify-payment-process-view"===c?d.addClass("imagify-iframe-viewing"):d.removeClass("imagify-iframe-viewing"),"imagify-success-view"===c?(d.addClass("imagify-success-viewing"),e.$modal.attr("aria-labelledby","imagify-success-view")):(d.removeClass("imagify-success-viewing"),e.$modal.removeAttr("aria-labelledby")),a.fadeIn(e.speedFadeIn).attr("aria-hidden","false")},iframeSetSrc:function(b){var d,f,g,h,i,j,k,l=a("#imagify-payment-iframe"),m=l.attr("src"),n=l.data("src"),o=0,p=0;if("string"==typeof b&&""!==m)return k="monthly"===b?"yearly":"monthly",m=m.replace(k,b),void l.attr("src",m);if("object"==typeof b){if(b.monthly&&(o=b.monthly[Object.keys(b.monthly)[0]].id),b.onetime&&(p=b.onetime[Object.keys(b.onetime)[0]].id,p=p+""=="999"?b.onetime[Object.keys(b.onetime)[0]].data:p),!b.period)return void c.imagify.info("No period defined");e.getApiKey(),d=p,f="yearly"===b.period?o:0,g="monthly"===b.period?o:0,h=a("#imagify-coupon-code").val(),i=""===h?"none":h,parseFloat(a(".imagify-global-amount").text()).toFixed(2),n=n+d+"/"+g+"/"+f+"/"+i+"/",j=l.remove().attr("src",n),e.$paymentView.html(j)}},paymentClose:function(){a(".imagify-iframe-viewing .close-btn").trigger("click.imagify"),a(".imagify-iframe-viewing").removeClass("imagify-iframe-viewing")},paymentBack:function(){e.switchToView(e.$preView)},paymentSuccess:function(){e.switchToView(e.$successView)},checkPluginMessage:function(a){var b=a.origin||a.originalEvent.origin;if(imagifyPricingModal.imagify_app_domain===b)switch(a.data){case"cancel":e.paymentClose();break;case"back":e.paymentBack();break;case"success":e.paymentSuccess()}},getPromoAppliesTo:function(a){var b=[];if(a.applies_to instanceof Array){for(var c=[],d=0;d<a.applies_to.length;d++)c.push(a.applies_to[d].plan_name);c.forEach(function(a){b.includes(a)||b.push(a)})}else b=[a.applies_to];return b}},e.checkCheckbox(e.$checkboxes),e.checkRadio(e.$radios.filter(":checked")),e.checkCoupon(),e.$checkboxes.on("change.imagify",function(){e.checkCheckbox(a(this))}),e.$radios.on("change.imagify",function(){e.checkRadio(a(this))}),a("#imagify-get-pricing-modal").on("click.imagify-ajax",function(){e.getPricing(a(this))}),a(b).on("modalClosed.imagify",".imagify-payment-modal",function(){a("#imagify-coupon-code").val(""),a(this).find(".imagify-modal-content").removeClass("imagify-success-viewing imagify-iframe-viewing"),setTimeout(function(){a(".imagify-modal-views").hide(),a("#imagify-pre-checkout-view").show()},300),setTimeout(function(){a(".imagify-payment-modal").find(".imagify-modal-content").scrollTop(0)},400)}),a("#imagify-coupon-code").on("blur.imagify",function(){a(this).attr("readonly")||e.checkCoupon()}).on("keydown.imagify",function(b){var c=a(this);if(!c.attr("readonly"))return 13===b.keyCode||32===b.keyCode?(e.checkCoupon(),!1):void(c.val().length>=3?c.closest(".imagify-coupon-input").addClass("imagify-canbe-validate"):c.closest(".imagify-coupon-input").removeClass("imagify-canbe-validate"))}),a("#imagify-coupon-validate").on("click.imagify",function(){e.checkCoupon(),a(this).closest(".imagify-canbe-validate").removeClass("imagify-canbe-validate")}),e.$anotherBtn.on("click.imagify",function(b){var c=a(this).data("imagify-choose"),d="imagify-pricing-tab-"+("plan"===c?"monthly":"onetime");b.preventDefault(),e.switchToView(e.$plansView,{tab:d})}),e.$modal.on("click.imagify",".imagify-payment-btn-select-plan",function(b){var d=a(this),f=d.closest(".imagify-offer-line"),g=d.data("offer"),h=d.attr("data-offer"),i="imagify-pricing-tab-monthly"!==d.closest(".imagify-tab-content").attr("id"),j=i?e.$preView.find(".imagify-offer-onetime"):e.$preView.find(".imagify-offer-monthly"),k=i?null:d.closest(".imagify-pricing-table").hasClass("imagify-month-selected")?"monthly":"yearly",l=i?e.getHtmlPrice(g[Object.keys(g)[0]].price):e.getHtmlPrice(g[Object.keys(g)[0]].prices,k),m=i?"":'<span class="imagify-price-by">'+f.find(".imagify-price-by").text()+"</span>",n=f.find(".imagify-price-discount").html(),o=f.find(".imagify-approx-nb").text(),p=f.find(".imagify-offer-size").text(),q=a("#imagify-coupon-code");if(b.preventDefault(),e.switchToView(e.$preView),j.find(".imagify-number-block").html(l+m),n?(j.find(".imagify-price-discount").length<=0&&j.find(".imagify-col-price").prepend('<span class="imagify-price-discount"></span>'),j.find(".imagify-price-discount").html(n),j.find(".imagify-price-discount").show()):j.find(".imagify-price-discount").hide(),j.find(".imagify-approx-nb").text(o),j.find(".imagify-offer-size").text(p),j.attr("data-offer",h),i||(j.find(".imagify-price-add-data").text(f.find(".imagify-price-add-data").text()),"monthly"===k?j.find("#imagify-subscription-monthly").trigger("click.imagify"):j.find("#imagify-subscription-yearly").trigger("click.imagify"),j.find(".imagify-inline-options").find("input:radio:checked").trigger("change.imagify")),q=a("#imagify-coupon-code"),q.val(""),c.imagify_discount_datas){var r=e.getPromoAppliesTo(c.imagify_discount_datas);(r.includes(g[Object.keys(g)[0]].label)||"all"===r[0])&&q.val(c.imagify_discount_datas.label)}e.checkCoupon(),e.populatePayBtn()}),a("#imagify-modal-checkout-btn").on("click.imagify",function(b){var c,d,f;b.preventDefault(),a(this).hasClass("imagify-button-disabled")||(c=a(".imagify-offer-monthly"),d=a(".imagify-offer-onetime"),f={},c.hasClass("imagify-offer-selected")&&(f.monthly=JSON.parse(c.attr("data-offer"))),d.hasClass("imagify-offer-selected")&&(f.onetime=JSON.parse(d.attr("data-offer"))),imagifyPricingModal.userDataCache&&a.post(ajaxurl,{action:imagifyPricingModal.userDataCache.deleteAction,_wpnonce:imagifyPricingModal.userDataCache.deleteNonce}),e.switchToView(e.$paymentView),f.period=e.getPeriod(),e.iframeSetSrc(f))}),a(".imagify-back-to-plans").on("click.imagify",function(b){var c=a(this),d=c.closest(".imagify-cart-item").hasClass("imagify-cart-item-onetime");b.preventDefault(),d?a(".imagify-offer-onetime").find(".imagify-choose-another-plan").trigger("click.imagify"):a(".imagify-offer-monthly").find(".imagify-choose-another-plan").trigger("click.imagify")}),c.addEventListener("message",e.checkPluginMessage,!0))}(jQuery,document,window);
classes/Bulk/BulkInterface.php CHANGED
@@ -24,7 +24,7 @@ interface BulkInterface {
24
  public function get_unoptimized_media_ids( $optimization_level );
25
 
26
  /**
27
- * Get ids of all optimized media without webp versions.
28
  *
29
  * @since 1.9
30
  * @since 1.9.5 The method doesn't return the IDs directly anymore.
@@ -42,7 +42,7 @@ interface BulkInterface {
42
  public function get_optimized_media_ids_without_webp();
43
 
44
  /**
45
- * Tell if there are optimized media without webp versions.
46
  *
47
  * @since 1.9
48
  * @access public
24
  public function get_unoptimized_media_ids( $optimization_level );
25
 
26
  /**
27
+ * Get ids of all optimized media without WebP versions.
28
  *
29
  * @since 1.9
30
  * @since 1.9.5 The method doesn't return the IDs directly anymore.
42
  public function get_optimized_media_ids_without_webp();
43
 
44
  /**
45
+ * Tell if there are optimized media without WebP versions.
46
  *
47
  * @since 1.9
48
  * @access public
classes/Bulk/CustomFolders.php CHANGED
@@ -76,7 +76,7 @@ class CustomFolders extends AbstractBulk {
76
  }
77
 
78
  /**
79
- * Get ids of all optimized media without webp versions.
80
  *
81
  * @since 1.9
82
  * @since 1.9.5 The method doesn't return the IDs directly anymore.
@@ -142,7 +142,7 @@ class CustomFolders extends AbstractBulk {
142
  $backup_path = \Imagify_Custom_Folders::get_file_backup_path( $file_path );
143
 
144
  if ( ! $this->filesystem->exists( $backup_path ) ) {
145
- // No backup, no webp.
146
  $data['errors']['no_backup'][] = $file_id;
147
  continue;
148
  }
@@ -154,7 +154,7 @@ class CustomFolders extends AbstractBulk {
154
  }
155
 
156
  /**
157
- * Tell if there are optimized media without webp versions.
158
  *
159
  * @since 1.9
160
  * @access public
76
  }
77
 
78
  /**
79
+ * Get ids of all optimized media without WebP versions.
80
  *
81
  * @since 1.9
82
  * @since 1.9.5 The method doesn't return the IDs directly anymore.
142
  $backup_path = \Imagify_Custom_Folders::get_file_backup_path( $file_path );
143
 
144
  if ( ! $this->filesystem->exists( $backup_path ) ) {
145
+ // No backup, no WebP.
146
  $data['errors']['no_backup'][] = $file_id;
147
  continue;
148
  }
154
  }
155
 
156
  /**
157
+ * Tell if there are optimized media without WebP versions.
158
  *
159
  * @since 1.9
160
  * @access public
classes/Bulk/Noop.php CHANGED
@@ -26,7 +26,7 @@ class Noop implements BulkInterface {
26
  }
27
 
28
  /**
29
- * Get ids of all optimized media without webp versions.
30
  *
31
  * @since 1.9
32
  * @since 1.9.5 The method doesn't return the IDs directly anymore.
@@ -52,7 +52,7 @@ class Noop implements BulkInterface {
52
  }
53
 
54
  /**
55
- * Tell if there are optimized media without webp versions.
56
  *
57
  * @since 1.9
58
  * @access public
26
  }
27
 
28
  /**
29
+ * Get ids of all optimized media without WebP versions.
30
  *
31
  * @since 1.9
32
  * @since 1.9.5 The method doesn't return the IDs directly anymore.
52
  }
53
 
54
  /**
55
+ * Tell if there are optimized media without WebP versions.
56
  *
57
  * @since 1.9
58
  * @access public
classes/Bulk/WP.php CHANGED
@@ -171,7 +171,7 @@ class WP extends AbstractBulk {
171
  }
172
 
173
  /**
174
- * Get ids of all optimized media without webp versions.
175
  *
176
  * @since 1.9
177
  * @since 1.9.5 The method doesn't return the IDs directly anymore.
@@ -271,7 +271,7 @@ class WP extends AbstractBulk {
271
  $backup_path = get_imagify_attachment_backup_path( $file_path );
272
 
273
  if ( ! $this->filesystem->exists( $backup_path ) ) {
274
- // No backup, no webp.
275
  $data['errors']['no_backup'][] = $id;
276
  continue;
277
  }
@@ -283,7 +283,7 @@ class WP extends AbstractBulk {
283
  }
284
 
285
  /**
286
- * Tell if there are optimized media without webp versions.
287
  *
288
  * @since 1.9
289
  * @access public
171
  }
172
 
173
  /**
174
+ * Get ids of all optimized media without WebP versions.
175
  *
176
  * @since 1.9
177
  * @since 1.9.5 The method doesn't return the IDs directly anymore.
271
  $backup_path = get_imagify_attachment_backup_path( $file_path );
272
 
273
  if ( ! $this->filesystem->exists( $backup_path ) ) {
274
+ // No backup, no WebP.
275
  $data['errors']['no_backup'][] = $id;
276
  continue;
277
  }
283
  }
284
 
285
  /**
286
+ * Tell if there are optimized media without WebP versions.
287
  *
288
  * @since 1.9
289
  * @access public
classes/Job/MediaOptimization.php CHANGED
@@ -211,7 +211,7 @@ class MediaOptimization extends \Imagify_Abstract_Background_Process {
211
  $item['error'] = $data;
212
 
213
  } elseif ( 'already_optimized' === $data['status'] ) {
214
- // Status is "already_optimized", try to create webp versions only.
215
  $item['sizes'] = array_filter( $item['sizes'], [ $this->optimization_process, 'is_size_webp' ] );
216
 
217
  } elseif ( 'success' !== $data['status'] ) {
211
  $item['error'] = $data;
212
 
213
  } elseif ( 'already_optimized' === $data['status'] ) {
214
+ // Status is "already_optimized", try to create WebP versions only.
215
  $item['sizes'] = array_filter( $item['sizes'], [ $this->optimization_process, 'is_size_webp' ] );
216
 
217
  } elseif ( 'success' !== $data['status'] ) {
classes/Optimization/Data/AbstractData.php CHANGED
@@ -280,7 +280,7 @@ abstract class AbstractData implements DataInterface {
280
 
281
  /**
282
  * Get the file size of the full size file.
283
- * If the webp size is available, it is used.
284
  *
285
  * @since 1.9
286
  * @access public
@@ -288,7 +288,7 @@ abstract class AbstractData implements DataInterface {
288
  *
289
  * @param bool $human_format True to display the image human format size (1Mb).
290
  * @param int $decimals Precision of number of decimal places.
291
- * @param bool $use_webp Use the webp size if available.
292
  * @return string|int
293
  */
294
  public function get_optimized_size( $human_format = true, $decimals = 2, $use_webp = true ) {
@@ -320,7 +320,7 @@ abstract class AbstractData implements DataInterface {
320
  $filepath = false;
321
 
322
  if ( $use_webp && ! empty( $data['sizes'][ $webp_size_name ]['success'] ) ) {
323
- // Try with the webp file first.
324
  $filepath = $media->get_raw_fullsize_path();
325
  $filepath = $filepath ? imagify_path_to_webp( $filepath ) : false;
326
 
@@ -330,7 +330,7 @@ abstract class AbstractData implements DataInterface {
330
  }
331
 
332
  if ( ! $filepath ) {
333
- // No webp? The full size then.
334
  $filepath = $media->get_fullsize_path();
335
  }
336
 
280
 
281
  /**
282
  * Get the file size of the full size file.
283
+ * If the WebP size is available, it is used.
284
  *
285
  * @since 1.9
286
  * @access public
288
  *
289
  * @param bool $human_format True to display the image human format size (1Mb).
290
  * @param int $decimals Precision of number of decimal places.
291
+ * @param bool $use_webp Use the WebP size if available.
292
  * @return string|int
293
  */
294
  public function get_optimized_size( $human_format = true, $decimals = 2, $use_webp = true ) {
320
  $filepath = false;
321
 
322
  if ( $use_webp && ! empty( $data['sizes'][ $webp_size_name ]['success'] ) ) {
323
+ // Try with the WebP file first.
324
  $filepath = $media->get_raw_fullsize_path();
325
  $filepath = $filepath ? imagify_path_to_webp( $filepath ) : false;
326
 
330
  }
331
 
332
  if ( ! $filepath ) {
333
+ // No WebP? The full size then.
334
  $filepath = $media->get_fullsize_path();
335
  }
336
 
classes/Optimization/Data/CustomFolders.php CHANGED
@@ -175,7 +175,7 @@ class CustomFolders extends AbstractData {
175
  }
176
  } else {
177
  /**
178
- * Webp version or any other size.
179
  */
180
  $old_data['data'] = ! empty( $old_data['data'] ) && is_array( $old_data['data'] ) ? $old_data['data'] : [];
181
  $old_data['data']['sizes'] = ! empty( $old_data['data']['sizes'] ) && is_array( $old_data['data']['sizes'] ) ? $old_data['data']['sizes'] : [];
175
  }
176
  } else {
177
  /**
178
+ * WebP version or any other size.
179
  */
180
  $old_data['data'] = ! empty( $old_data['data'] ) && is_array( $old_data['data'] ) ? $old_data['data'] : [];
181
  $old_data['data']['sizes'] = ! empty( $old_data['data']['sizes'] ) && is_array( $old_data['data']['sizes'] ) ? $old_data['data']['sizes'] : [];
classes/Optimization/Data/DataInterface.php CHANGED
@@ -208,7 +208,7 @@ interface DataInterface {
208
 
209
  /**
210
  * Get the file size of the full size file.
211
- * If the webp size is available, it is used.
212
  *
213
  * @since 1.9
214
  * @access public
@@ -216,7 +216,7 @@ interface DataInterface {
216
  *
217
  * @param bool $human_format True to display the image human format size (1Mb).
218
  * @param int $decimals Precision of number of decimal places.
219
- * @param bool $use_webp Use the webp size if available.
220
  * @return string|int
221
  */
222
  public function get_optimized_size( $human_format = true, $decimals = 2, $use_webp = true );
208
 
209
  /**
210
  * Get the file size of the full size file.
211
+ * If the WebP size is available, it is used.
212
  *
213
  * @since 1.9
214
  * @access public
216
  *
217
  * @param bool $human_format True to display the image human format size (1Mb).
218
  * @param int $decimals Precision of number of decimal places.
219
+ * @param bool $use_webp Use the WebP size if available.
220
  * @return string|int
221
  */
222
  public function get_optimized_size( $human_format = true, $decimals = 2, $use_webp = true );
classes/Optimization/Data/Noop.php CHANGED
@@ -208,7 +208,7 @@ class Noop implements DataInterface {
208
 
209
  /**
210
  * Get the file size of the full size file.
211
- * If the webp size is available, it is used.
212
  *
213
  * @since 1.9
214
  * @access public
@@ -216,7 +216,7 @@ class Noop implements DataInterface {
216
  *
217
  * @param bool $human_format True to display the image human format size (1Mb).
218
  * @param int $decimals Precision of number of decimal places.
219
- * @param bool $use_webp Use the webp size if available.
220
  * @return string|int
221
  */
222
  public function get_optimized_size( $human_format = true, $decimals = 2, $use_webp = true ) {
208
 
209
  /**
210
  * Get the file size of the full size file.
211
+ * If the WebP size is available, it is used.
212
  *
213
  * @since 1.9
214
  * @access public
216
  *
217
  * @param bool $human_format True to display the image human format size (1Mb).
218
  * @param int $decimals Precision of number of decimal places.
219
+ * @param bool $use_webp Use the WebP size if available.
220
  * @return string|int
221
  */
222
  public function get_optimized_size( $human_format = true, $decimals = 2, $use_webp = true ) {
classes/Optimization/File.php CHANGED
@@ -454,7 +454,7 @@ class File {
454
  * @type string $backup_path If a backup must be done, this is the path to use. Default is the backup path used for the WP Media Library.
455
  * @type int $optimization_level The optimization level (2=ultra, 1=aggressive, 0=normal).
456
  * @type bool $keep_exif To keep exif data or not.
457
- * @type string $convert Set to 'webp' to convert the image to webp.
458
  * @type string $context The context.
459
  * @type int $original_size The file size, sent to the API.
460
  * }
@@ -768,7 +768,7 @@ class File {
768
  }
769
 
770
  /**
771
- * Replace the file extension by webp.
772
  *
773
  * @since 1.9
774
  * @access public
@@ -789,7 +789,7 @@ class File {
789
  }
790
 
791
  /**
792
- * Tell if the file is a webp image.
793
  * Rejects "path/to/.webp" files.
794
  *
795
  * @since 1.9
454
  * @type string $backup_path If a backup must be done, this is the path to use. Default is the backup path used for the WP Media Library.
455
  * @type int $optimization_level The optimization level (2=ultra, 1=aggressive, 0=normal).
456
  * @type bool $keep_exif To keep exif data or not.
457
+ * @type string $convert Set to 'webp' to convert the image to WebP.
458
  * @type string $context The context.
459
  * @type int $original_size The file size, sent to the API.
460
  * }
768
  }
769
 
770
  /**
771
+ * Replace the file extension by WebP.
772
  *
773
  * @since 1.9
774
  * @access public
789
  }
790
 
791
  /**
792
+ * Tell if the file is a WebP image.
793
  * Rejects "path/to/.webp" files.
794
  *
795
  * @since 1.9
classes/Optimization/Process/AbstractProcess.php CHANGED
@@ -289,12 +289,12 @@ abstract class AbstractProcess implements ProcessInterface {
289
  }
290
 
291
  if ( $data->is_already_optimized() && $this->has_webp() ) {
292
- // If already optimized but has webp, delete webp versions and optimization data.
293
  $data->delete_optimization_data();
294
  $deleted = $this->delete_webp_files();
295
 
296
  if ( is_wp_error( $deleted ) ) {
297
- return new \WP_Error( 'webp_not_deleted', __( 'Previous webp files could not be deleted.', 'imagify' ) );
298
  }
299
  }
300
 
@@ -395,7 +395,7 @@ abstract class AbstractProcess implements ProcessInterface {
395
 
396
  if ( $media->is_image() ) {
397
  if ( $this->get_option( 'convert_to_webp' ) ) {
398
- // Add webp convertion.
399
  $files = $media->get_media_files();
400
 
401
  foreach ( $sizes as $size_name ) {
@@ -416,7 +416,7 @@ abstract class AbstractProcess implements ProcessInterface {
416
  if ( ! $media->get_context_instance()->can_backup() && ! $media->get_backup_path() && ! $this->get_data()->get_size_data( 'full', 'success' ) ) {
417
  /**
418
  * Backup is NOT activated, and a backup file does NOT exist yet, and the full size is NOT optimized yet.
419
- * Webp conversion needs a backup file, even a temporary one: we’ll create one.
420
  */
421
  $webp = false;
422
 
@@ -428,7 +428,7 @@ abstract class AbstractProcess implements ProcessInterface {
428
  }
429
 
430
  if ( $webp ) {
431
- // We have at least one webp conversion to do: create a temporary backup.
432
  $backuped = $this->get_original_file()->backup( $media->get_raw_backup_path() );
433
 
434
  if ( $backuped ) {
@@ -499,7 +499,7 @@ abstract class AbstractProcess implements ProcessInterface {
499
 
500
  if ( $webp ) {
501
  // We'll make sure the file is an image later.
502
- $thumb_size = $webp; // Contains the name of the non-webp size.
503
  $webp = true;
504
  }
505
 
@@ -522,7 +522,7 @@ abstract class AbstractProcess implements ProcessInterface {
522
  'size_is_successfully_optimized',
523
  sprintf(
524
  /* translators: %s is a size name. */
525
- __( 'The webp format for the size %s already exists.', 'imagify' ),
526
  '<code>' . esc_html( $thumb_size ) . '</code>'
527
  )
528
  );
@@ -546,11 +546,11 @@ abstract class AbstractProcess implements ProcessInterface {
546
  $optimization_level = $this->sanitize_optimization_level( $optimization_level );
547
 
548
  if ( $webp && $this->get_data()->get_size_data( $thumb_size, 'success' ) ) {
549
- // We want a webp version but the source file is already optimized by Imagify.
550
  $result = $this->create_temporary_copy( $thumb_size, $sizes );
551
 
552
  if ( ! $result ) { // Bail out.
553
- // Could not create a copy of the non-webp version.
554
  $response = new \WP_Error(
555
  'non_webp_copy_failed',
556
  sprintf(
@@ -610,7 +610,7 @@ abstract class AbstractProcess implements ProcessInterface {
610
 
611
  $response = new \WP_Error(
612
  'no_webp',
613
- __( 'This file is not an image and cannot be converted to webp format.', 'imagify' )
614
  );
615
 
616
  $this->update_size_optimization_data( $response, $size, $optimization_level );
@@ -629,10 +629,10 @@ abstract class AbstractProcess implements ProcessInterface {
629
  *
630
  * @param null|\WP_Error $response Null by default. Return a \WP_Error object to prevent optimization.
631
  * @param ProcessInterface $process The optimization process instance.
632
- * @param File $file The file instance. If $webp is true, $file references the non-webp file.
633
  * @param string $thumb_size The media size.
634
  * @param int $optimization_level The optimization level (0=normal, 1=aggressive, 2=ultra).
635
- * @param bool $webp The image will be converted to webp.
636
  * @param bool $is_disabled Tell if this size is disabled from optimization.
637
  */
638
  $response = apply_filters( 'imagify_before_optimize_size', null, $this, $file, $thumb_size, $optimization_level, $webp, $is_disabled );
@@ -660,7 +660,7 @@ abstract class AbstractProcess implements ProcessInterface {
660
  } elseif ( $webp && ! $this->can_create_webp_version( $file->get_path() ) ) {
661
  $response = new \WP_Error(
662
  'is_animated_gif',
663
- __( 'This file is an animated gif: since Imagify does not support animated webp, webp creation for animated gif is disabled.', 'imagify' )
664
  );
665
  } elseif ( ! $this->filesystem->is_writable( $file->get_path() ) ) {
666
  $response = new \WP_Error(
@@ -712,7 +712,7 @@ abstract class AbstractProcess implements ProcessInterface {
712
  * @param File $file The file instance.
713
  * @param string $thumb_size The media size.
714
  * @param int $optimization_level The optimization level (0=normal, 1=aggressive, 2=ultra).
715
- * @param bool $webp The image was supposed to be converted to webp.
716
  * @param bool $is_disabled Tell if this size is disabled from optimization.
717
  */
718
  do_action( 'imagify_after_optimize_size', $this, $file, $thumb_size, $optimization_level, $webp, $is_disabled );
@@ -737,7 +737,7 @@ abstract class AbstractProcess implements ProcessInterface {
737
  }
738
 
739
  /**
740
- * Compare the file size of a file and its webp version: if the webp version is heavier than the non-webp file, delete it.
741
  *
742
  * @since 1.9.4
743
  * @access protected
@@ -748,9 +748,9 @@ abstract class AbstractProcess implements ProcessInterface {
748
  *
749
  * @type \sdtClass|\WP_Error $response Optimized image data. A \WP_Error object on error.
750
  * @type File $file The File instance of the file currently being optimized.
751
- * @type bool $is_webp Tell if we're requesting a webp file.
752
- * @type string $non_webp_thumb_size Name of the corresponding non-webp thumbnail size. If we're not creating a webp file, this corresponds to the current thumbnail size.
753
- * @type string $non_webp_file_path Path to the corresponding non-webp file. If we're not creating a webp file, this corresponds to the current file path.
754
  * @type string $optimization_level The optimization level.
755
  * }
756
  * @return \sdtClass|\WP_Error Optimized image data. A \WP_Error object on error.
@@ -760,7 +760,7 @@ abstract class AbstractProcess implements ProcessInterface {
760
 
761
  if ( ! isset( $keep_large_webp ) ) {
762
  /**
763
- * Allow to not store webp images that are larger than their non-webp version.
764
  *
765
  * @since 1.9.4
766
  * @author Grégory Viguier
@@ -777,55 +777,55 @@ abstract class AbstractProcess implements ProcessInterface {
777
  // Optimization succeeded.
778
  if ( $args['is_webp'] ) {
779
  /**
780
- * We just created a webp version:
781
- * Check if it is lighter than the (maybe optimized) non-webp file.
782
  */
783
  $data = $this->get_data()->get_size_data( $args['non_webp_thumb_size'] );
784
 
785
  if ( ! $data ) {
786
- // We haven’t tried to optimize the non-webp size yet.
787
  return $args['response'];
788
  }
789
 
790
  if ( ! empty( $data['optimized_size'] ) ) {
791
- // The non-webp size is optimized, we know the file size.
792
  $non_webp_file_size = $data['optimized_size'];
793
  } else {
794
- // The non-webp size is "already optimized" or "error": grab the file size directly from the file.
795
  $non_webp_file_size = $this->filesystem->size( $args['non_webp_file_path'] );
796
  }
797
 
798
  if ( ! $non_webp_file_size || $non_webp_file_size > $args['response']->new_size ) {
799
- // The new webp file is lighter.
800
  return $args['response'];
801
  }
802
 
803
- // The new webp file is heavier than the non-webp file: delete it and return an error.
804
  $this->filesystem->delete( $args['file']->get_path() );
805
 
806
  return new \WP_Error(
807
  'webp_heavy',
808
  sprintf(
809
  /* translators: %s is a size name. */
810
- __( 'The webp version of the size %s is heavier than its non-webp version.', 'imagify' ),
811
  '<code>' . esc_html( $args['non_webp_thumb_size'] ) . '</code>'
812
  )
813
  );
814
  }
815
 
816
  /**
817
- * We just created a non-webp version:
818
- * Check if its webp version file is lighter than this one.
819
  */
820
  $webp_size = $args['non_webp_thumb_size'] . static::WEBP_SUFFIX;
821
  $webp_file_size = $this->get_data()->get_size_data( $webp_size, 'optimized_size' );
822
 
823
  if ( ! $webp_file_size || $webp_file_size < $args['response']->new_size ) {
824
- // The webp file is lighter than this one.
825
  return $args['response'];
826
  }
827
 
828
- // The new optimized file is lighter than the webp file: delete the webp file and store an error.
829
  $webp_path = $args['file']->get_path_to_webp();
830
 
831
  if ( $webp_path && $this->filesystem->is_writable( $webp_path ) ) {
@@ -836,7 +836,7 @@ abstract class AbstractProcess implements ProcessInterface {
836
  'webp_heavy',
837
  sprintf(
838
  /* translators: %s is a size name. */
839
- __( 'The webp version of the size %s is heavier than its non-webp version.', 'imagify' ),
840
  '<code>' . esc_html( $args['non_webp_thumb_size'] ) . '</code>'
841
  )
842
  );
@@ -932,7 +932,7 @@ abstract class AbstractProcess implements ProcessInterface {
932
  // Restore the original dimensions in the database.
933
  $media->update_dimensions();
934
 
935
- // Delete the webp version.
936
  $this->delete_webp_file( $original_path );
937
 
938
  // Restore the thumbnails.
@@ -972,9 +972,9 @@ abstract class AbstractProcess implements ProcessInterface {
972
  $media = $this->get_media();
973
 
974
  /**
975
- * Delete the webp versions.
976
  * If the full size file and the original file are not the same, the full size is considered like a thumbnail.
977
- * In that case we must also delete the webp file associated to the full size.
978
  */
979
  $keep_full_webp = $media->get_raw_original_path() === $media->get_raw_fullsize_path();
980
  $this->delete_webp_files( $keep_full_webp );
@@ -1013,8 +1013,8 @@ abstract class AbstractProcess implements ProcessInterface {
1013
  /** ----------------------------------------------------------------------------------------- */
1014
 
1015
  /**
1016
- * If we need to create a webp version, we must create it from an unoptimized image.
1017
- * The full size is always optimized before the webp version creation, and in some cases it’s the same for the thumbnails.
1018
  * Then we use the backup file to create temporary files.
1019
  */
1020
 
@@ -1082,7 +1082,7 @@ abstract class AbstractProcess implements ProcessInterface {
1082
 
1083
  if ( 'full' === $size ) {
1084
  /**
1085
- * We create a copy of the backup to be able to create a webp version from it.
1086
  * That means the optimization process will resize the file if needed, so there is nothing more to do here.
1087
  */
1088
  return true;
@@ -1335,7 +1335,7 @@ abstract class AbstractProcess implements ProcessInterface {
1335
  }
1336
 
1337
  if ( 'full' !== $size && 'full' . static::WEBP_SUFFIX !== $size ) {
1338
- // We resize only the main file and its webp version.
1339
  return false;
1340
  }
1341
 
@@ -1385,7 +1385,7 @@ abstract class AbstractProcess implements ProcessInterface {
1385
  }
1386
 
1387
  if ( 'full' !== $size && 'full' . static::WEBP_SUFFIX !== $size ) {
1388
- // We keep exif only on the main file and its webp version.
1389
  return false;
1390
  }
1391
 
@@ -1398,7 +1398,7 @@ abstract class AbstractProcess implements ProcessInterface {
1398
  /** ----------------------------------------------------------------------------------------- */
1399
 
1400
  /**
1401
- * Generate webp images if they are missing.
1402
  *
1403
  * @since 1.9
1404
  * @access public
@@ -1414,7 +1414,7 @@ abstract class AbstractProcess implements ProcessInterface {
1414
  $media = $this->get_media();
1415
 
1416
  if ( ! $media->is_image() ) {
1417
- return new \WP_Error( 'no_webp', __( 'This media is not an image and cannot be converted to webp format.', 'imagify' ) );
1418
  }
1419
 
1420
  if ( ! $media->has_backup() ) {
@@ -1428,7 +1428,7 @@ abstract class AbstractProcess implements ProcessInterface {
1428
  }
1429
 
1430
  if ( $this->has_webp() ) {
1431
- return new \WP_Error( 'has_webp', __( 'This media already has webp versions.', 'imagify' ) );
1432
  }
1433
 
1434
  $files = $media->get_media_files();
@@ -1444,7 +1444,7 @@ abstract class AbstractProcess implements ProcessInterface {
1444
  }
1445
 
1446
  if ( ! $sizes ) {
1447
- return new \WP_Error( 'no_sizes', __( 'This media does not have files that can be converted to webp format.', 'imagify' ) );
1448
  }
1449
 
1450
  $optimization_level = $data->get_optimization_level();
@@ -1454,7 +1454,7 @@ abstract class AbstractProcess implements ProcessInterface {
1454
  }
1455
 
1456
  /**
1457
- * Delete the webp images.
1458
  * This doesn't delete the related optimization data.
1459
  *
1460
  * @since 1.9
@@ -1513,7 +1513,7 @@ abstract class AbstractProcess implements ProcessInterface {
1513
  }
1514
 
1515
  /**
1516
- * Delete a webp image, given its non-webp version's path.
1517
  * This doesn't delete the related optimization data.
1518
  *
1519
  * @since 1.9
@@ -1521,19 +1521,19 @@ abstract class AbstractProcess implements ProcessInterface {
1521
  * @access protected
1522
  * @author Grégory Viguier
1523
  *
1524
- * @param string $file_path Path to the non-webp file.
1525
  * @return bool|\WP_Error True on success. A \WP_Error object on failure.
1526
  */
1527
  protected function delete_webp_file( $file_path ) {
1528
  if ( ! $file_path ) {
1529
- return new \WP_Error( 'no_path', __( 'Path to non-webp file not provided.', 'imagify' ) );
1530
  }
1531
 
1532
  $webp_file = new File( $file_path );
1533
  $webp_path = $webp_file->get_path_to_webp();
1534
 
1535
  if ( ! $webp_path ) {
1536
- return new \WP_Error( 'no_webp_path', __( 'Could not get the path to the webp file.', 'imagify' ) );
1537
  }
1538
 
1539
  if ( ! $this->filesystem->exists( $webp_path ) ) {
@@ -1579,14 +1579,14 @@ abstract class AbstractProcess implements ProcessInterface {
1579
  }
1580
 
1581
  /**
1582
- * Tell if a thumbnail size is an "Imagify webp" size.
1583
  *
1584
  * @since 1.9
1585
  * @access public
1586
  * @author Grégory Viguier
1587
  *
1588
  * @param string $size_name The size name.
1589
- * @return string|bool The unsuffixed name of the size if webp. False if not webp.
1590
  */
1591
  public function is_size_webp( $size_name ) {
1592
  static $suffix;
@@ -1603,7 +1603,7 @@ abstract class AbstractProcess implements ProcessInterface {
1603
  }
1604
 
1605
  /**
1606
- * Tell if the media has webp versions.
1607
  *
1608
  * @since 1.9
1609
  * @access public
@@ -1633,7 +1633,7 @@ abstract class AbstractProcess implements ProcessInterface {
1633
  }
1634
 
1635
  /**
1636
- * Tell if a webp version can be created for the given file.
1637
  * Make sure the file is an image before using this method.
1638
  *
1639
  * @since 1.9.5
@@ -1649,13 +1649,13 @@ abstract class AbstractProcess implements ProcessInterface {
1649
  }
1650
 
1651
  /**
1652
- * Tell if a webp version can be created for the given file.
1653
  * The file is an image.
1654
  *
1655
  * @since 1.9.5
1656
  * @author Grégory Viguier
1657
  *
1658
- * @param bool $can True to create a webp version, false otherwise. Null by default.
1659
  * @param string $file_path Path to the file.
1660
  */
1661
  $can = apply_filters( 'imagify_pre_can_create_webp_version', null, $file_path );
289
  }
290
 
291
  if ( $data->is_already_optimized() && $this->has_webp() ) {
292
+ // If already optimized but has WebP, delete WebP versions and optimization data.
293
  $data->delete_optimization_data();
294
  $deleted = $this->delete_webp_files();
295
 
296
  if ( is_wp_error( $deleted ) ) {
297
+ return new \WP_Error( 'webp_not_deleted', __( 'Previous WebP files could not be deleted.', 'imagify' ) );
298
  }
299
  }
300
 
395
 
396
  if ( $media->is_image() ) {
397
  if ( $this->get_option( 'convert_to_webp' ) ) {
398
+ // Add WebP convertion.
399
  $files = $media->get_media_files();
400
 
401
  foreach ( $sizes as $size_name ) {
416
  if ( ! $media->get_context_instance()->can_backup() && ! $media->get_backup_path() && ! $this->get_data()->get_size_data( 'full', 'success' ) ) {
417
  /**
418
  * Backup is NOT activated, and a backup file does NOT exist yet, and the full size is NOT optimized yet.
419
+ * WebP conversion needs a backup file, even a temporary one: we’ll create one.
420
  */
421
  $webp = false;
422
 
428
  }
429
 
430
  if ( $webp ) {
431
+ // We have at least one WebP conversion to do: create a temporary backup.
432
  $backuped = $this->get_original_file()->backup( $media->get_raw_backup_path() );
433
 
434
  if ( $backuped ) {
499
 
500
  if ( $webp ) {
501
  // We'll make sure the file is an image later.
502
+ $thumb_size = $webp; // Contains the name of the non-WebP size.
503
  $webp = true;
504
  }
505
 
522
  'size_is_successfully_optimized',
523
  sprintf(
524
  /* translators: %s is a size name. */
525
+ __( 'The WebP format for the size %s already exists.', 'imagify' ),
526
  '<code>' . esc_html( $thumb_size ) . '</code>'
527
  )
528
  );
546
  $optimization_level = $this->sanitize_optimization_level( $optimization_level );
547
 
548
  if ( $webp && $this->get_data()->get_size_data( $thumb_size, 'success' ) ) {
549
+ // We want a WebP version but the source file is already optimized by Imagify.
550
  $result = $this->create_temporary_copy( $thumb_size, $sizes );
551
 
552
  if ( ! $result ) { // Bail out.
553
+ // Could not create a copy of the non-WebP version.
554
  $response = new \WP_Error(
555
  'non_webp_copy_failed',
556
  sprintf(
610
 
611
  $response = new \WP_Error(
612
  'no_webp',
613
+ __( 'This file is not an image and cannot be converted to WebP format.', 'imagify' )
614
  );
615
 
616
  $this->update_size_optimization_data( $response, $size, $optimization_level );
629
  *
630
  * @param null|\WP_Error $response Null by default. Return a \WP_Error object to prevent optimization.
631
  * @param ProcessInterface $process The optimization process instance.
632
+ * @param File $file The file instance. If $webp is true, $file references the non-WebP file.
633
  * @param string $thumb_size The media size.
634
  * @param int $optimization_level The optimization level (0=normal, 1=aggressive, 2=ultra).
635
+ * @param bool $webp The image will be converted to WebP.
636
  * @param bool $is_disabled Tell if this size is disabled from optimization.
637
  */
638
  $response = apply_filters( 'imagify_before_optimize_size', null, $this, $file, $thumb_size, $optimization_level, $webp, $is_disabled );
660
  } elseif ( $webp && ! $this->can_create_webp_version( $file->get_path() ) ) {
661
  $response = new \WP_Error(
662
  'is_animated_gif',
663
+ __( 'This file is an animated gif: since Imagify does not support animated WebP, WebP creation for animated gif is disabled.', 'imagify' )
664
  );
665
  } elseif ( ! $this->filesystem->is_writable( $file->get_path() ) ) {
666
  $response = new \WP_Error(
712
  * @param File $file The file instance.
713
  * @param string $thumb_size The media size.
714
  * @param int $optimization_level The optimization level (0=normal, 1=aggressive, 2=ultra).
715
+ * @param bool $webp The image was supposed to be converted to WebP.
716
  * @param bool $is_disabled Tell if this size is disabled from optimization.
717
  */
718
  do_action( 'imagify_after_optimize_size', $this, $file, $thumb_size, $optimization_level, $webp, $is_disabled );
737
  }
738
 
739
  /**
740
+ * Compare the file size of a file and its WebP version: if the WebP version is heavier than the non-WebP file, delete it.
741
  *
742
  * @since 1.9.4
743
  * @access protected
748
  *
749
  * @type \sdtClass|\WP_Error $response Optimized image data. A \WP_Error object on error.
750
  * @type File $file The File instance of the file currently being optimized.
751
+ * @type bool $is_webp Tell if we're requesting a WebP file.
752
+ * @type string $non_webp_thumb_size Name of the corresponding non-WebP thumbnail size. If we're not creating a WebP file, this corresponds to the current thumbnail size.
753
+ * @type string $non_webp_file_path Path to the corresponding non-WebP file. If we're not creating a WebP file, this corresponds to the current file path.
754
  * @type string $optimization_level The optimization level.
755
  * }
756
  * @return \sdtClass|\WP_Error Optimized image data. A \WP_Error object on error.
760
 
761
  if ( ! isset( $keep_large_webp ) ) {
762
  /**
763
+ * Allow to not store WebP images that are larger than their non-WebP version.
764
  *
765
  * @since 1.9.4
766
  * @author Grégory Viguier
777
  // Optimization succeeded.
778
  if ( $args['is_webp'] ) {
779
  /**
780
+ * We just created a WebP version:
781
+ * Check if it is lighter than the (maybe optimized) non-WebP file.
782
  */
783
  $data = $this->get_data()->get_size_data( $args['non_webp_thumb_size'] );
784
 
785
  if ( ! $data ) {
786
+ // We haven’t tried to optimize the non-WebP size yet.
787
  return $args['response'];
788
  }
789
 
790
  if ( ! empty( $data['optimized_size'] ) ) {
791
+ // The non-WebP size is optimized, we know the file size.
792
  $non_webp_file_size = $data['optimized_size'];
793
  } else {
794
+ // The non-WebP size is "already optimized" or "error": grab the file size directly from the file.
795
  $non_webp_file_size = $this->filesystem->size( $args['non_webp_file_path'] );
796
  }
797
 
798
  if ( ! $non_webp_file_size || $non_webp_file_size > $args['response']->new_size ) {
799
+ // The new WebP file is lighter.
800
  return $args['response'];
801
  }
802
 
803
+ // The new WebP file is heavier than the non-WebP file: delete it and return an error.
804
  $this->filesystem->delete( $args['file']->get_path() );
805
 
806
  return new \WP_Error(
807
  'webp_heavy',
808
  sprintf(
809
  /* translators: %s is a size name. */
810
+ __( 'The WebP version of the size %s is heavier than its non-WebP version.', 'imagify' ),
811
  '<code>' . esc_html( $args['non_webp_thumb_size'] ) . '</code>'
812
  )
813
  );
814
  }
815
 
816
  /**
817
+ * We just created a non-WebP version:
818
+ * Check if its WebP version file is lighter than this one.
819
  */
820
  $webp_size = $args['non_webp_thumb_size'] . static::WEBP_SUFFIX;
821
  $webp_file_size = $this->get_data()->get_size_data( $webp_size, 'optimized_size' );
822
 
823
  if ( ! $webp_file_size || $webp_file_size < $args['response']->new_size ) {
824
+ // The WebP file is lighter than this one.
825
  return $args['response'];
826
  }
827
 
828
+ // The new optimized file is lighter than the WebP file: delete the WebP file and store an error.
829
  $webp_path = $args['file']->get_path_to_webp();
830
 
831
  if ( $webp_path && $this->filesystem->is_writable( $webp_path ) ) {
836
  'webp_heavy',
837
  sprintf(
838
  /* translators: %s is a size name. */
839
+ __( 'The WebP version of the size %s is heavier than its non-WebP version.', 'imagify' ),
840
  '<code>' . esc_html( $args['non_webp_thumb_size'] ) . '</code>'
841
  )
842
  );
932
  // Restore the original dimensions in the database.
933
  $media->update_dimensions();
934
 
935
+ // Delete the WebP version.
936
  $this->delete_webp_file( $original_path );
937
 
938
  // Restore the thumbnails.
972
  $media = $this->get_media();
973
 
974
  /**
975
+ * Delete the WebP versions.
976
  * If the full size file and the original file are not the same, the full size is considered like a thumbnail.
977
+ * In that case we must also delete the WebP file associated to the full size.
978
  */
979
  $keep_full_webp = $media->get_raw_original_path() === $media->get_raw_fullsize_path();
980
  $this->delete_webp_files( $keep_full_webp );
1013
  /** ----------------------------------------------------------------------------------------- */
1014
 
1015
  /**
1016
+ * If we need to create a WebP version, we must create it from an unoptimized image.
1017
+ * The full size is always optimized before the WebP version creation, and in some cases it’s the same for the thumbnails.
1018
  * Then we use the backup file to create temporary files.
1019
  */
1020
 
1082
 
1083
  if ( 'full' === $size ) {
1084
  /**
1085
+ * We create a copy of the backup to be able to create a WebP version from it.
1086
  * That means the optimization process will resize the file if needed, so there is nothing more to do here.
1087
  */
1088
  return true;
1335
  }
1336
 
1337
  if ( 'full' !== $size && 'full' . static::WEBP_SUFFIX !== $size ) {
1338
+ // We resize only the main file and its WebP version.
1339
  return false;
1340
  }
1341
 
1385
  }
1386
 
1387
  if ( 'full' !== $size && 'full' . static::WEBP_SUFFIX !== $size ) {
1388
+ // We keep exif only on the main file and its WebP version.
1389
  return false;
1390
  }
1391
 
1398
  /** ----------------------------------------------------------------------------------------- */
1399
 
1400
  /**
1401
+ * Generate WebP images if they are missing.
1402
  *
1403
  * @since 1.9
1404
  * @access public
1414
  $media = $this->get_media();
1415
 
1416
  if ( ! $media->is_image() ) {
1417
+ return new \WP_Error( 'no_webp', __( 'This media is not an image and cannot be converted to WebP format.', 'imagify' ) );
1418
  }
1419
 
1420
  if ( ! $media->has_backup() ) {
1428
  }
1429
 
1430
  if ( $this->has_webp() ) {
1431
+ return new \WP_Error( 'has_webp', __( 'This media already has WebP versions.', 'imagify' ) );
1432
  }
1433
 
1434
  $files = $media->get_media_files();
1444
  }
1445
 
1446
  if ( ! $sizes ) {
1447
+ return new \WP_Error( 'no_sizes', __( 'This media does not have files that can be converted to WebP format.', 'imagify' ) );
1448
  }
1449
 
1450
  $optimization_level = $data->get_optimization_level();
1454
  }
1455
 
1456
  /**
1457
+ * Delete the WebP images.
1458
  * This doesn't delete the related optimization data.
1459
  *
1460
  * @since 1.9
1513
  }
1514
 
1515
  /**
1516
+ * Delete a WebP image, given its non-WebP version's path.
1517
  * This doesn't delete the related optimization data.
1518
  *
1519
  * @since 1.9
1521
  * @access protected
1522
  * @author Grégory Viguier
1523
  *
1524
+ * @param string $file_path Path to the non-WebP file.
1525
  * @return bool|\WP_Error True on success. A \WP_Error object on failure.
1526
  */
1527
  protected function delete_webp_file( $file_path ) {
1528
  if ( ! $file_path ) {
1529
+ return new \WP_Error( 'no_path', __( 'Path to non-WebP file not provided.', 'imagify' ) );
1530
  }
1531
 
1532
  $webp_file = new File( $file_path );
1533
  $webp_path = $webp_file->get_path_to_webp();
1534
 
1535
  if ( ! $webp_path ) {
1536
+ return new \WP_Error( 'no_webp_path', __( 'Could not get the path to the WebP file.', 'imagify' ) );
1537
  }
1538
 
1539
  if ( ! $this->filesystem->exists( $webp_path ) ) {
1579
  }
1580
 
1581
  /**
1582
+ * Tell if a thumbnail size is an "Imagify WebP" size.
1583
  *
1584
  * @since 1.9
1585
  * @access public
1586
  * @author Grégory Viguier
1587
  *
1588
  * @param string $size_name The size name.
1589
+ * @return string|bool The unsuffixed name of the size if WebP. False if not WebP.
1590
  */
1591
  public function is_size_webp( $size_name ) {
1592
  static $suffix;
1603
  }
1604
 
1605
  /**
1606
+ * Tell if the media has WebP versions.
1607
  *
1608
  * @since 1.9
1609
  * @access public
1633
  }
1634
 
1635
  /**
1636
+ * Tell if a WebP version can be created for the given file.
1637
  * Make sure the file is an image before using this method.
1638
  *
1639
  * @since 1.9.5
1649
  }
1650
 
1651
  /**
1652
+ * Tell if a WebP version can be created for the given file.
1653
  * The file is an image.
1654
  *
1655
  * @since 1.9.5
1656
  * @author Grégory Viguier
1657
  *
1658
+ * @param bool $can True to create a WebP version, false otherwise. Null by default.
1659
  * @param string $file_path Path to the file.
1660
  */
1661
  $can = apply_filters( 'imagify_pre_can_create_webp_version', null, $file_path );
classes/Optimization/Process/Noop.php CHANGED
@@ -287,7 +287,7 @@ class Noop implements ProcessInterface {
287
  /** ----------------------------------------------------------------------------------------- */
288
 
289
  /**
290
- * Generate webp images if they are missing.
291
  *
292
  * @since 1.9
293
  * @access public
@@ -300,7 +300,7 @@ class Noop implements ProcessInterface {
300
  }
301
 
302
  /**
303
- * Delete the webp images.
304
  *
305
  * @since 1.9
306
  * @access public
@@ -309,14 +309,14 @@ class Noop implements ProcessInterface {
309
  public function delete_webp_files() {}
310
 
311
  /**
312
- * Tell if a thumbnail size is an "Imagify webp" size.
313
  *
314
  * @since 1.9
315
  * @access public
316
  * @author Grégory Viguier
317
  *
318
  * @param string $size_name The size name.
319
- * @return string|bool The unsuffixed name of the size if webp. False if not webp.
320
  */
321
  public function is_size_webp( $size_name ) {
322
  return false;
287
  /** ----------------------------------------------------------------------------------------- */
288
 
289
  /**
290
+ * Generate WebP images if they are missing.
291
  *
292
  * @since 1.9
293
  * @access public
300
  }
301
 
302
  /**
303
+ * Delete the WebP images.
304
  *
305
  * @since 1.9
306
  * @access public
309
  public function delete_webp_files() {}
310
 
311
  /**
312
+ * Tell if a thumbnail size is an "Imagify WebP" size.
313
  *
314
  * @since 1.9
315
  * @access public
316
  * @author Grégory Viguier
317
  *
318
  * @param string $size_name The size name.
319
+ * @return string|bool The unsuffixed name of the size if WebP. False if not WebP.
320
  */
321
  public function is_size_webp( $size_name ) {
322
  return false;
classes/Optimization/Process/ProcessInterface.php CHANGED
@@ -238,7 +238,7 @@ interface ProcessInterface {
238
  /** ----------------------------------------------------------------------------------------- */
239
 
240
  /**
241
- * Generate webp images if they are missing.
242
  *
243
  * @since 1.9
244
  * @access public
@@ -249,7 +249,7 @@ interface ProcessInterface {
249
  public function generate_webp_versions();
250
 
251
  /**
252
- * Delete the webp images.
253
  * This doesn't delete the related optimization data.
254
  *
255
  * @since 1.9
@@ -263,19 +263,19 @@ interface ProcessInterface {
263
  public function delete_webp_files( $keep_full = false );
264
 
265
  /**
266
- * Tell if a thumbnail size is an "Imagify webp" size.
267
  *
268
  * @since 1.9
269
  * @access public
270
  * @author Grégory Viguier
271
  *
272
  * @param string $size_name The size name.
273
- * @return string|bool The unsuffixed name of the size if webp. False if not webp.
274
  */
275
  public function is_size_webp( $size_name );
276
 
277
  /**
278
- * Tell if the media has webp versions.
279
  *
280
  * @since 1.9
281
  * @access public
238
  /** ----------------------------------------------------------------------------------------- */
239
 
240
  /**
241
+ * Generate WebP images if they are missing.
242
  *
243
  * @since 1.9
244
  * @access public
249
  public function generate_webp_versions();
250
 
251
  /**
252
+ * Delete the WebP images.
253
  * This doesn't delete the related optimization data.
254
  *
255
  * @since 1.9
263
  public function delete_webp_files( $keep_full = false );
264
 
265
  /**
266
+ * Tell if a thumbnail size is an "Imagify WebP" size.
267
  *
268
  * @since 1.9
269
  * @access public
270
  * @author Grégory Viguier
271
  *
272
  * @param string $size_name The size name.
273
+ * @return string|bool The unsuffixed name of the size if WebP. False if not WebP.
274
  */
275
  public function is_size_webp( $size_name );
276
 
277
  /**
278
+ * Tell if the media has WebP versions.
279
  *
280
  * @since 1.9
281
  * @access public
classes/Stats/OptimizedMediaWithoutWebp.php CHANGED
@@ -4,7 +4,7 @@ namespace Imagify\Stats;
4
  defined( 'ABSPATH' ) || die( 'Cheatin’ uh?' );
5
 
6
  /**
7
- * Class to get and cache the number of optimized media without webp versions.
8
  *
9
  * @since 1.9
10
  * @author Grégory Viguier
@@ -41,7 +41,7 @@ class OptimizedMediaWithoutWebp implements StatInterface {
41
  /** ----------------------------------------------------------------------------------------- */
42
 
43
  /**
44
- * Get the number of optimized media without webp versions.
45
  *
46
  * @since 1.9
47
  * @access public
@@ -62,7 +62,7 @@ class OptimizedMediaWithoutWebp implements StatInterface {
62
  }
63
 
64
  /**
65
- * Get and cache the number of optimized media without webp versions.
66
  *
67
  * @since 1.9
68
  * @access public
@@ -128,9 +128,9 @@ class OptimizedMediaWithoutWebp implements StatInterface {
128
 
129
  if ( ! isset( $new_sizes['full'] ) && ! empty( $new_sizes[ $size_name ]['success'] ) ) {
130
  /**
131
- * We just successfully generated the webp version of the full size.
132
  * The full size was not optimized at the same time, that means it was optimized previously.
133
- * Meaning: we just added a webp version to a media that was previously optimized, so there is one less optimized media without webp.
134
  */
135
  $this->clear_cache();
136
  return;
@@ -138,7 +138,7 @@ class OptimizedMediaWithoutWebp implements StatInterface {
138
 
139
  if ( ! empty( $new_sizes['full']['success'] ) && empty( $new_sizes[ $size_name ]['success'] ) ) {
140
  /**
141
- * We now have a new optimized media without webp.
142
  */
143
  $this->clear_cache();
144
  }
@@ -166,7 +166,7 @@ class OptimizedMediaWithoutWebp implements StatInterface {
166
 
167
  if ( ! empty( $sizes['full']['success'] ) && empty( $sizes[ $size_name ]['success'] ) ) {
168
  /**
169
- * This media had no webp versions.
170
  */
171
  $this->clear_cache();
172
  }
@@ -192,7 +192,7 @@ class OptimizedMediaWithoutWebp implements StatInterface {
192
 
193
  if ( ! empty( $sizes['full']['success'] ) && empty( $sizes[ $size_name ]['success'] ) ) {
194
  /**
195
- * This media had no webp versions.
196
  */
197
  $this->clear_cache();
198
  }
4
  defined( 'ABSPATH' ) || die( 'Cheatin’ uh?' );
5
 
6
  /**
7
+ * Class to get and cache the number of optimized media without WebP versions.
8
  *
9
  * @since 1.9
10
  * @author Grégory Viguier
41
  /** ----------------------------------------------------------------------------------------- */
42
 
43
  /**
44
+ * Get the number of optimized media without WebP versions.
45
  *
46
  * @since 1.9
47
  * @access public
62
  }
63
 
64
  /**
65
+ * Get and cache the number of optimized media without WebP versions.
66
  *
67
  * @since 1.9
68
  * @access public
128
 
129
  if ( ! isset( $new_sizes['full'] ) && ! empty( $new_sizes[ $size_name ]['success'] ) ) {
130
  /**
131
+ * We just successfully generated the WebP version of the full size.
132
  * The full size was not optimized at the same time, that means it was optimized previously.
133
+ * Meaning: we just added a WebP version to a media that was previously optimized, so there is one less optimized media without WebP.
134
  */
135
  $this->clear_cache();
136
  return;
138
 
139
  if ( ! empty( $new_sizes['full']['success'] ) && empty( $new_sizes[ $size_name ]['success'] ) ) {
140
  /**
141
+ * We now have a new optimized media without WebP.
142
  */
143
  $this->clear_cache();
144
  }
166
 
167
  if ( ! empty( $sizes['full']['success'] ) && empty( $sizes[ $size_name ]['success'] ) ) {
168
  /**
169
+ * This media had no WebP versions.
170
  */
171
  $this->clear_cache();
172
  }
192
 
193
  if ( ! empty( $sizes['full']['success'] ) && empty( $sizes[ $size_name ]['success'] ) ) {
194
  /**
195
+ * This media had no WebP versions.
196
  */
197
  $this->clear_cache();
198
  }
classes/Webp/Apache.php CHANGED
@@ -4,7 +4,7 @@ namespace Imagify\Webp;
4
  defined( 'ABSPATH' ) || die( 'Cheatin’ uh?' );
5
 
6
  /**
7
- * Add and remove contents to the .htaccess file to display webp images on the site.
8
  *
9
  * @since 1.9
10
  * @author Grégory Viguier
4
  defined( 'ABSPATH' ) || die( 'Cheatin’ uh?' );
5
 
6
  /**
7
+ * Add and remove contents to the .htaccess file to display WebP images on the site.
8
  *
9
  * @since 1.9
10
  * @author Grégory Viguier
classes/Webp/Display.php CHANGED
@@ -4,7 +4,7 @@ namespace Imagify\Webp;
4
  defined( 'ABSPATH' ) || die( 'Cheatin’ uh?' );
5
 
6
  /**
7
- * Display webp images on the site.
8
  *
9
  * @since 1.9
10
  * @author Grégory Viguier
@@ -44,7 +44,7 @@ class Display {
44
  /** ----------------------------------------------------------------------------------------- */
45
 
46
  /**
47
- * If display webp images, add the webp type to the .htaccess/etc file.
48
  *
49
  * @since 1.9
50
  * @access public
@@ -68,10 +68,10 @@ class Display {
68
  }
69
 
70
  if ( $new_value ) {
71
- // Add the webp file type.
72
  $result = $this->get_server_conf()->add();
73
  } else {
74
- // Remove the webp file type.
75
  $result = $this->get_server_conf()->remove();
76
  }
77
 
@@ -209,7 +209,7 @@ class Display {
209
  }
210
 
211
  /**
212
- * Get the webp display method by validating the given value.
213
  *
214
  * @since 1.9
215
  * @access public
4
  defined( 'ABSPATH' ) || die( 'Cheatin’ uh?' );
5
 
6
  /**
7
+ * Display WebP images on the site.
8
  *
9
  * @since 1.9
10
  * @author Grégory Viguier
44
  /** ----------------------------------------------------------------------------------------- */
45
 
46
  /**
47
+ * If display WebP images, add the WebP type to the .htaccess/etc file.
48
  *
49
  * @since 1.9
50
  * @access public
68
  }
69
 
70
  if ( $new_value ) {
71
+ // Add the WebP file type.
72
  $result = $this->get_server_conf()->add();
73
  } else {
74
+ // Remove the WebP file type.
75
  $result = $this->get_server_conf()->remove();
76
  }
77
 
209
  }
210
 
211
  /**
212
+ * Get the WebP display method by validating the given value.
213
  *
214
  * @since 1.9
215
  * @access public
classes/Webp/IIS.php CHANGED
@@ -4,7 +4,7 @@ namespace Imagify\Webp;
4
  defined( 'ABSPATH' ) || die( 'Cheatin’ uh?' );
5
 
6
  /**
7
- * Add and remove contents to the web.config file to display webp images on the site.
8
  *
9
  * @since 1.9
10
  * @author Grégory Viguier
4
  defined( 'ABSPATH' ) || die( 'Cheatin’ uh?' );
5
 
6
  /**
7
+ * Add and remove contents to the web.config file to display WebP images on the site.
8
  *
9
  * @since 1.9
10
  * @author Grégory Viguier
classes/Webp/Picture/Display.php CHANGED
@@ -4,7 +4,7 @@ namespace Imagify\Webp\Picture;
4
  defined( 'ABSPATH' ) || die( 'Cheatin’ uh?' );
5
 
6
  /**
7
- * Display webp images on the site with <picture> tags.
8
  *
9
  * @since 1.9
10
  * @author Grégory Viguier
@@ -136,7 +136,8 @@ class Display {
136
  * @return string
137
  */
138
  public function process_content( $content ) {
139
- $images = $this->get_images( $content );
 
140
 
141
  if ( ! $images ) {
142
  return $content;
@@ -147,7 +148,28 @@ class Display {
147
  $content = str_replace( $image['tag'], $tag, $content );
148
  }
149
 
150
- return $content;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
151
  }
152
 
153
  /** ----------------------------------------------------------------------------------------- */
@@ -194,6 +216,17 @@ class Display {
194
  */
195
  $attributes = apply_filters( 'imagify_picture_attributes', $attributes, $image );
196
 
 
 
 
 
 
 
 
 
 
 
 
197
  $output = '<picture' . $this->build_attributes( $attributes ) . ">\n";
198
  /**
199
  * Allow to add more <source> tags to the <picture> tag.
@@ -289,14 +322,27 @@ class Display {
289
  * @return string A <img> tag.
290
  */
291
  protected function build_img_tag( $image ) {
292
- $to_remove = [
293
- 'class' => '',
294
- 'id' => '',
295
- 'style' => '',
296
- 'title' => '',
297
- ];
 
 
 
298
 
299
- $attributes = array_diff_key( $image['attributes'], $to_remove );
 
 
 
 
 
 
 
 
 
 
300
 
301
  /**
302
  * Filter the attributes to be added to the <img> tag.
@@ -415,19 +461,19 @@ class Display {
415
  *
416
  * @param string $image An image html tag.
417
  * @return array|false {
418
- * An array of data if the image has a webp version. False otherwise.
419
  *
420
  * @type string $tag The image tag.
421
  * @type array $attributes The image attributes (minus src and srcset).
422
  * @type array $src {
423
  * @type string $url URL to the original image.
424
- * @type string $webp_url URL to the webp version.
425
  * }
426
  * @type array $srcset {
427
  * An array or arrays. Not set if not applicable.
428
  *
429
  * @type string $url URL to the original image.
430
- * @type string $webp_url URL to the webp version. Not set if not applicable.
431
  * @type string $descriptor A src descriptor.
432
  * }
433
  * }
4
  defined( 'ABSPATH' ) || die( 'Cheatin’ uh?' );
5
 
6
  /**
7
+ * Display WebP images on the site with <picture> tags.
8
  *
9
  * @since 1.9
10
  * @author Grégory Viguier
136
  * @return string
137
  */
138
  public function process_content( $content ) {
139
+ $html_no_picture_tags = $this->remove_picture_tags( $content );
140
+ $images = $this->get_images( $html_no_picture_tags );
141
 
142
  if ( ! $images ) {
143
  return $content;
148
  $content = str_replace( $image['tag'], $tag, $content );
149
  }
150
 
151
+ return $content; }
152
+
153
+ /**
154
+ * Remove pre-existing <picture> tags.
155
+ *
156
+ * We shouldn't replace images already nested inside picture tags
157
+ * that are already in the page.
158
+ *
159
+ * @since 1.10.0
160
+ *
161
+ * @param string $html Content of the page.
162
+ *
163
+ * @return string HTML content without pre-existing <picture> tags.
164
+ */
165
+ private function remove_picture_tags( $html ) {
166
+ $replace = preg_replace( '#<picture[^>]*>.*?<\/picture\s*>#mis', '', $html );
167
+
168
+ if ( null === $replace ) {
169
+ return $html;
170
+ }
171
+
172
+ return $replace;
173
  }
174
 
175
  /** ----------------------------------------------------------------------------------------- */
216
  */
217
  $attributes = apply_filters( 'imagify_picture_attributes', $attributes, $image );
218
 
219
+ /**
220
+ * Remove Gutenberg specific attributes from picture tag, leave them on img tag.
221
+ * Optional: $attributes['class'] = 'imagify-webp-cover-wrapper'; for website admin styling ease.
222
+ */
223
+ if ( ! empty( $image['attributes']['class'] ) && strpos( $image['attributes']['class'], 'wp-block-cover__image-background' ) !== false ) {
224
+ unset( $attributes['style'] );
225
+ unset( $attributes['class'] );
226
+ unset( $attributes['data-object-fit'] );
227
+ unset( $attributes['data-object-position'] );
228
+ }
229
+
230
  $output = '<picture' . $this->build_attributes( $attributes ) . ">\n";
231
  /**
232
  * Allow to add more <source> tags to the <picture> tag.
322
  * @return string A <img> tag.
323
  */
324
  protected function build_img_tag( $image ) {
325
+ /**
326
+ * Gutenberg fix.
327
+ * Check for the 'wp-block-cover__image-background' class on the original image, and leave that class and style attributes if found.
328
+ */
329
+ if ( ! empty( $image['attributes']['class'] ) && strpos( $image['attributes']['class'], 'wp-block-cover__image-background' ) !== false ) {
330
+ $to_remove = [
331
+ 'id' => '',
332
+ 'title' => '',
333
+ ];
334
 
335
+ $attributes = array_diff_key( $image['attributes'], $to_remove );
336
+ } else {
337
+ $to_remove = [
338
+ 'class' => '',
339
+ 'id' => '',
340
+ 'style' => '',
341
+ 'title' => '',
342
+ ];
343
+
344
+ $attributes = array_diff_key( $image['attributes'], $to_remove );
345
+ }
346
 
347
  /**
348
  * Filter the attributes to be added to the <img> tag.
461
  *
462
  * @param string $image An image html tag.
463
  * @return array|false {
464
+ * An array of data if the image has a WebP version. False otherwise.
465
  *
466
  * @type string $tag The image tag.
467
  * @type array $attributes The image attributes (minus src and srcset).
468
  * @type array $src {
469
  * @type string $url URL to the original image.
470
+ * @type string $webp_url URL to the WebP version.
471
  * }
472
  * @type array $srcset {
473
  * An array or arrays. Not set if not applicable.
474
  *
475
  * @type string $url URL to the original image.
476
+ * @type string $webp_url URL to the WebP version. Not set if not applicable.
477
  * @type string $descriptor A src descriptor.
478
  * }
479
  * }
classes/Webp/RewriteRules/Apache.php CHANGED
@@ -4,7 +4,7 @@ namespace Imagify\Webp\RewriteRules;
4
  defined( 'ABSPATH' ) || die( 'Cheatin’ uh?' );
5
 
6
  /**
7
- * Add and remove rewrite rules to the .htaccess file to display webp images on the site.
8
  *
9
  * @since 1.9
10
  * @author Grégory Viguier
4
  defined( 'ABSPATH' ) || die( 'Cheatin’ uh?' );
5
 
6
  /**
7
+ * Add and remove rewrite rules to the .htaccess file to display WebP images on the site.
8
  *
9
  * @since 1.9
10
  * @author Grégory Viguier
classes/Webp/RewriteRules/Display.php CHANGED
@@ -4,7 +4,7 @@ namespace Imagify\Webp\RewriteRules;
4
  defined( 'ABSPATH' ) || die( 'Cheatin’ uh?' );
5
 
6
  /**
7
- * Display webp images on the site with rewrite rules.
8
  *
9
  * @since 1.9
10
  * @author Grégory Viguier
@@ -40,7 +40,7 @@ class Display {
40
  /** ----------------------------------------------------------------------------------------- */
41
 
42
  /**
43
- * If display webp images via rewrite rules, add the rules to the .htaccess/etc file.
44
  *
45
  * @since 1.9
46
  * @access public
@@ -52,7 +52,7 @@ class Display {
52
  public function maybe_add_rewrite_rules( $values ) {
53
  global $is_apache, $is_iis7, $is_nginx;
54
 
55
- // Display webp?
56
  $was_enabled = (bool) get_imagify_option( 'display_webp' );
57
  // See \Imagify_Options->validate_values_on_update() for why we use 'convert_to_webp' here.
58
  $is_enabled = ! empty( $values['display_webp'] ) && ! empty( $values['convert_to_webp'] );
@@ -67,10 +67,10 @@ class Display {
67
  $add_or_remove = false;
68
 
69
  if ( $is_enabled && $is_rewrite && ( ! $was_enabled || ! $was_rewrite ) ) {
70
- // Display webp & use rewrite method, but only if one of the values changed: add rules.
71
  $add_or_remove = 'add';
72
  } elseif ( $was_enabled && $was_rewrite && ( ! $is_enabled || ! $is_rewrite ) ) {
73
- // Was displaying webp & was using rewrite method, but only if one of the values changed: remove rules.
74
  $add_or_remove = 'remove';
75
  } else {
76
  return $values;
4
  defined( 'ABSPATH' ) || die( 'Cheatin’ uh?' );
5
 
6
  /**
7
+ * Display WebP images on the site with rewrite rules.
8
  *
9
  * @since 1.9
10
  * @author Grégory Viguier
40
  /** ----------------------------------------------------------------------------------------- */
41
 
42
  /**
43
+ * If display WebP images via rewrite rules, add the rules to the .htaccess/etc file.
44
  *
45
  * @since 1.9
46
  * @access public
52
  public function maybe_add_rewrite_rules( $values ) {
53
  global $is_apache, $is_iis7, $is_nginx;
54
 
55
+ // Display WebP?
56
  $was_enabled = (bool) get_imagify_option( 'display_webp' );
57
  // See \Imagify_Options->validate_values_on_update() for why we use 'convert_to_webp' here.
58
  $is_enabled = ! empty( $values['display_webp'] ) && ! empty( $values['convert_to_webp'] );
67
  $add_or_remove = false;
68
 
69
  if ( $is_enabled && $is_rewrite && ( ! $was_enabled || ! $was_rewrite ) ) {
70
+ // Display WebP & use rewrite method, but only if one of the values changed: add rules.
71
  $add_or_remove = 'add';
72
  } elseif ( $was_enabled && $was_rewrite && ( ! $is_enabled || ! $is_rewrite ) ) {
73
+ // Was displaying WebP & was using rewrite method, but only if one of the values changed: remove rules.
74
  $add_or_remove = 'remove';
75
  } else {
76
  return $values;
classes/Webp/RewriteRules/IIS.php CHANGED
@@ -4,7 +4,7 @@ namespace Imagify\Webp\RewriteRules;
4
  defined( 'ABSPATH' ) || die( 'Cheatin’ uh?' );
5
 
6
  /**
7
- * Add and remove rewrite rules to the web.config file to display webp images on the site.
8
  *
9
  * @since 1.9
10
  * @author Grégory Viguier
4
  defined( 'ABSPATH' ) || die( 'Cheatin’ uh?' );
5
 
6
  /**
7
+ * Add and remove rewrite rules to the web.config file to display WebP images on the site.
8
  *
9
  * @since 1.9
10
  * @author Grégory Viguier
classes/Webp/RewriteRules/Nginx.php CHANGED
@@ -4,7 +4,7 @@ namespace Imagify\Webp\RewriteRules;
4
  defined( 'ABSPATH' ) || die( 'Cheatin’ uh?' );
5
 
6
  /**
7
- * Add and remove rewrite rules to the imagify.conf file to display webp images on the site.
8
  *
9
  * @since 1.9
10
  * @author Grégory Viguier
4
  defined( 'ABSPATH' ) || die( 'Cheatin’ uh?' );
5
 
6
  /**
7
+ * Add and remove rewrite rules to the imagify.conf file to display WebP images on the site.
8
  *
9
  * @since 1.9
10
  * @author Grégory Viguier
imagify.php CHANGED
@@ -3,9 +3,9 @@
3
  * Plugin Name: Imagify
4
  * Plugin URI: https://wordpress.org/plugins/imagify/
5
  * Description: Dramatically 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.
6
- * Version: 1.9.14
7
- * Requires at least: 4.0.0
8
- * Requires PHP: 5.4
9
  * Author: WP Media
10
  * Author URI: https://wp-media.me/
11
  * Licence: GPLv2
@@ -21,7 +21,7 @@
21
  defined( 'ABSPATH' ) || die( 'Cheatin’ uh?' );
22
 
23
  // Imagify defines.
24
- define( 'IMAGIFY_VERSION', '1.9.14' );
25
  define( 'IMAGIFY_SLUG', 'imagify' );
26
  define( 'IMAGIFY_FILE', __FILE__ );
27
  define( 'IMAGIFY_PATH', realpath( plugin_dir_path( IMAGIFY_FILE ) ) . '/' );
@@ -29,6 +29,10 @@ define( 'IMAGIFY_URL', plugin_dir_url( IMAGIFY_FILE ) );
29
  define( 'IMAGIFY_ASSETS_IMG_URL', IMAGIFY_URL . 'assets/images/' );
30
  define( 'IMAGIFY_MAX_BYTES', 5242880 );
31
  define( 'IMAGIFY_INT_MAX', PHP_INT_MAX - 30 );
 
 
 
 
32
 
33
  add_action( 'plugins_loaded', '_imagify_init' );
34
  /**
@@ -109,8 +113,8 @@ function imagify_pass_requirements() {
109
  'plugin_name' => 'Imagify',
110
  'plugin_file' => IMAGIFY_FILE,
111
  'plugin_version' => IMAGIFY_VERSION,
112
- 'wp_version' => '4.0',
113
- 'php_version' => '5.4',
114
  )
115
  );
116
 
3
  * Plugin Name: Imagify
4
  * Plugin URI: https://wordpress.org/plugins/imagify/
5
  * Description: Dramatically 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.
6
+ * Version: 1.10
7
+ * Requires at least: 5.3
8
+ * Requires PHP: 7.0
9
  * Author: WP Media
10
  * Author URI: https://wp-media.me/
11
  * Licence: GPLv2
21
  defined( 'ABSPATH' ) || die( 'Cheatin’ uh?' );
22
 
23
  // Imagify defines.
24
+ define( 'IMAGIFY_VERSION', '1.10' );
25
  define( 'IMAGIFY_SLUG', 'imagify' );
26
  define( 'IMAGIFY_FILE', __FILE__ );
27
  define( 'IMAGIFY_PATH', realpath( plugin_dir_path( IMAGIFY_FILE ) ) . '/' );
29
  define( 'IMAGIFY_ASSETS_IMG_URL', IMAGIFY_URL . 'assets/images/' );
30
  define( 'IMAGIFY_MAX_BYTES', 5242880 );
31
  define( 'IMAGIFY_INT_MAX', PHP_INT_MAX - 30 );
32
+ if ( ! defined( 'IMAGIFY_APP_DOMAIN' ) ) {
33
+ define( 'IMAGIFY_APP_DOMAIN', 'https://app.imagify.io' );
34
+ }
35
+ define( 'IMAGIFY_APP_API_URL', IMAGIFY_APP_DOMAIN . '/api/' );
36
 
37
  add_action( 'plugins_loaded', '_imagify_init' );
38
  /**
113
  'plugin_name' => 'Imagify',
114
  'plugin_file' => IMAGIFY_FILE,
115
  'plugin_version' => IMAGIFY_VERSION,
116
+ 'wp_version' => '5.3',
117
+ 'php_version' => '7.0',
118
  )
119
  );
120
 
inc/3rd-party/3rd-party.php CHANGED
@@ -14,6 +14,7 @@ require IMAGIFY_PATH . 'inc/3rd-party/screets-lc.php';
14
  require IMAGIFY_PATH . 'inc/3rd-party/wp-real-media-library.php';
15
  require IMAGIFY_PATH . 'inc/3rd-party/wp-rocket/wp-rocket.php';
16
  require IMAGIFY_PATH . 'inc/3rd-party/yoast-seo.php';
 
17
 
18
  /**
19
  * Hosting.
14
  require IMAGIFY_PATH . 'inc/3rd-party/wp-real-media-library.php';
15
  require IMAGIFY_PATH . 'inc/3rd-party/wp-rocket/wp-rocket.php';
16
  require IMAGIFY_PATH . 'inc/3rd-party/yoast-seo.php';
17
+ require IMAGIFY_PATH . 'inc/3rd-party/WooCommerce/class-woocommerce.php';
18
 
19
  /**
20
  * Hosting.
inc/3rd-party/WooCommerce/class-woocommerce.php ADDED
@@ -0,0 +1,95 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ namespace Imagify\ThirdParty\WooCommerce;
3
+
4
+ /**
5
+ * Compatibility for WooCommerce.
6
+ *
7
+ * @since 1.10.0
8
+ */
9
+ class WooCommerce {
10
+ /**
11
+ * Initialize compatibility functionality.
12
+ *
13
+ * @since 1.10.0
14
+ *
15
+ * @return void
16
+ */
17
+ public function init() {
18
+ add_action( 'woocommerce_single_product_summary', [ $this, 'variable_products_webp_compat' ] );
19
+ }
20
+
21
+ /**
22
+ * Add Variable Products Webp Compatibility.
23
+ *
24
+ * @since 1.10.0
25
+ *
26
+ * @return void
27
+ */
28
+ public function variable_products_webp_compat() {
29
+ global $product;
30
+
31
+ if ( ! isset( $product ) || ! $product->is_type( 'variable' ) ) {
32
+ return;
33
+ }
34
+
35
+ add_filter( 'imagify_picture_attributes', [ $this, 'remove_wp_post_image_class' ], 10, 2 );
36
+ add_filter(
37
+ 'imagify_picture_source_attributes',
38
+ [ $this, 'maybe_add_wp_post_image_class_on_picture_internal_tags' ],
39
+ 10,
40
+ 2
41
+ );
42
+ add_filter(
43
+ 'imagify_picture_img_attributes',
44
+ [ $this, 'maybe_add_wp_post_image_class_on_picture_internal_tags' ],
45
+ 10,
46
+ 2
47
+ );
48
+ }
49
+
50
+ /**
51
+ * Remove wp-post-image class from picture tags.
52
+ *
53
+ * @since 1.10.0
54
+ *
55
+ * @param array $attributes The picture tag attributes.
56
+ *
57
+ * @return array The picture tage attributes with modified or removed 'class'.
58
+ */
59
+ public function remove_wp_post_image_class( $attributes ) {
60
+ if ( isset( $attributes['class'] ) ) {
61
+ $attributes['class'] = str_replace( 'wp-post-image', '', $attributes['class'] );
62
+ }
63
+
64
+ if ( empty( $attributes['class'] ) ) {
65
+ unset( $attributes['class'] );
66
+ }
67
+
68
+ return $attributes;
69
+ }
70
+
71
+ /**
72
+ * Add wp-post-image class to source and image tags internal to a picture tag.
73
+ *
74
+ * @since 1.10.0
75
+ *
76
+ * @param array $attributes The source or img tag attributes.
77
+ * @param array $image The original image tag data.
78
+ *
79
+ * @return array Source or image tag attributes with modified 'class'.
80
+ */
81
+ public function maybe_add_wp_post_image_class_on_picture_internal_tags( $attributes, $image ) {
82
+ if (
83
+ ! empty( $image['attributes']['class'] )
84
+ && strpos( $image['attributes']['class'], 'wp-post-image' ) !== false
85
+ ) {
86
+ $attributes['class'] = isset( $attributes['class'] )
87
+ ? $attributes['class'] . ' wp-post-image'
88
+ : 'wp-post-image';
89
+ }
90
+
91
+ return $attributes;
92
+ }
93
+ }
94
+
95
+ ( new WooCommerce() )->init();
inc/3rd-party/amazon-s3-and-cloudfront/classes/Main.php CHANGED
@@ -60,7 +60,7 @@ class Main extends \Imagify_AS3CF_Deprecated {
60
  $done = true;
61
 
62
  /**
63
- * Webp images to display with a <picture> tag.
64
  */
65
  add_action( 'as3cf_init', [ $this, 'store_s3_settings' ] );
66
  add_filter( 'imagify_webp_picture_process_image', [ $this, 'picture_tag_webp_image' ] );
@@ -82,7 +82,7 @@ class Main extends \Imagify_AS3CF_Deprecated {
82
  add_action( 'imagify_after_restore_media', [ $this, 'maybe_send_media_to_cdn_after_restore' ], 8, 4 );
83
 
84
  /**
85
- * Webp support.
86
  */
87
  add_filter( 'as3cf_attachment_file_paths', [ $this, 'add_webp_images_to_attachment' ], 8, 3 );
88
  add_filter( 'mime_types', [ $this, 'add_webp_support' ] );
@@ -119,7 +119,7 @@ class Main extends \Imagify_AS3CF_Deprecated {
119
  }
120
 
121
  /**
122
- * Webp images to display with a <picture> tag.
123
  *
124
  * @since 1.9
125
  * @see \Imagify\Webp\Picture\Display->process_image()
@@ -168,7 +168,7 @@ class Main extends \Imagify_AS3CF_Deprecated {
168
  $webp_size_name = 'full' . $webp_size_suffix;
169
 
170
  if ( ! empty( $imagify_data['sizes'][ $webp_size_name ]['success'] ) ) {
171
- // We have a webp image.
172
  $data['src']['webp_exists'] = true;
173
  }
174
 
@@ -233,7 +233,7 @@ class Main extends \Imagify_AS3CF_Deprecated {
233
  $webp_size_name = $size_name . $webp_size_suffix;
234
 
235
  if ( ! empty( $imagify_data['sizes'][ $webp_size_name ]['success'] ) ) {
236
- // We have a webp image.
237
  $data['srcset'][ $i ]['webp_exists'] = true;
238
  }
239
  }
@@ -275,7 +275,7 @@ class Main extends \Imagify_AS3CF_Deprecated {
275
  * @param File $file The file instance. If $webp is true, $file references the non-webp file.
276
  * @param string $thumb_size The media size.
277
  * @param int $optimization_level The optimization level (0=normal, 1=aggressive, 2=ultra).
278
- * @param bool $webp The image will be converted to webp.
279
  * @return null|\WP_Error Null. A \WP_Error object on error.
280
  */
281
  public function maybe_copy_file_from_cdn_before_optimization( $response, $process, $file, $thumb_size, $optimization_level, $webp ) {
@@ -336,7 +336,7 @@ class Main extends \Imagify_AS3CF_Deprecated {
336
  * After restoring a media:
337
  * - Save some data,
338
  * - Upload the files to the CDN,
339
- * - Maybe delete webp files from the CDN.
340
  *
341
  * @since 1.9
342
  * @access public
@@ -372,16 +372,16 @@ class Main extends \Imagify_AS3CF_Deprecated {
372
 
373
  $cdn->send_to_cdn( false );
374
 
375
- // Remove webp files from CDN.
376
  $webp_files = [];
377
 
378
  if ( $files ) {
379
- // Get the paths to the webp files.
380
  foreach ( $files as $size_name => $file ) {
381
  $webp_size_name = $size_name . $process::WEBP_SUFFIX;
382
 
383
  if ( empty( $data['sizes'][ $webp_size_name ]['success'] ) ) {
384
- // This size has no webp version.
385
  continue;
386
  }
387
 
@@ -406,7 +406,7 @@ class Main extends \Imagify_AS3CF_Deprecated {
406
  /** ----------------------------------------------------------------------------------------- */
407
 
408
  /**
409
- * Add the webp files to the list of files that the CDN must handle.
410
  *
411
  * @since 1.9
412
  * @access public
@@ -454,7 +454,7 @@ class Main extends \Imagify_AS3CF_Deprecated {
454
  $webp_size_name = $size_name . $process::WEBP_SUFFIX;
455
 
456
  if ( empty( $data['sizes'][ $webp_size_name ]['success'] ) ) {
457
- // This size has no webp version.
458
  continue;
459
  }
460
 
@@ -469,7 +469,7 @@ class Main extends \Imagify_AS3CF_Deprecated {
469
  }
470
 
471
  /**
472
- * Add webp format to the list of allowed mime types.
473
  *
474
  * @since 1.9
475
  * @access public
60
  $done = true;
61
 
62
  /**
63
+ * WebP images to display with a <picture> tag.
64
  */
65
  add_action( 'as3cf_init', [ $this, 'store_s3_settings' ] );
66
  add_filter( 'imagify_webp_picture_process_image', [ $this, 'picture_tag_webp_image' ] );
82
  add_action( 'imagify_after_restore_media', [ $this, 'maybe_send_media_to_cdn_after_restore' ], 8, 4 );
83
 
84
  /**
85
+ * WebP support.
86
  */
87
  add_filter( 'as3cf_attachment_file_paths', [ $this, 'add_webp_images_to_attachment' ], 8, 3 );
88
  add_filter( 'mime_types', [ $this, 'add_webp_support' ] );
119
  }
120
 
121
  /**
122
+ * WebP images to display with a <picture> tag.
123
  *
124
  * @since 1.9
125
  * @see \Imagify\Webp\Picture\Display->process_image()
168
  $webp_size_name = 'full' . $webp_size_suffix;
169
 
170
  if ( ! empty( $imagify_data['sizes'][ $webp_size_name ]['success'] ) ) {
171
+ // We have a WebP image.
172
  $data['src']['webp_exists'] = true;
173
  }
174
 
233
  $webp_size_name = $size_name . $webp_size_suffix;
234
 
235
  if ( ! empty( $imagify_data['sizes'][ $webp_size_name ]['success'] ) ) {
236
+ // We have a WebP image.
237
  $data['srcset'][ $i ]['webp_exists'] = true;
238
  }
239
  }
275
  * @param File $file The file instance. If $webp is true, $file references the non-webp file.
276
  * @param string $thumb_size The media size.
277
  * @param int $optimization_level The optimization level (0=normal, 1=aggressive, 2=ultra).
278
+ * @param bool $webp The image will be converted to WebP.
279
  * @return null|\WP_Error Null. A \WP_Error object on error.
280
  */
281
  public function maybe_copy_file_from_cdn_before_optimization( $response, $process, $file, $thumb_size, $optimization_level, $webp ) {
336
  * After restoring a media:
337
  * - Save some data,
338
  * - Upload the files to the CDN,
339
+ * - Maybe delete WebP files from the CDN.
340
  *
341
  * @since 1.9
342
  * @access public
372
 
373
  $cdn->send_to_cdn( false );
374
 
375
+ // Remove WebP files from CDN.
376
  $webp_files = [];
377
 
378
  if ( $files ) {
379
+ // Get the paths to the WebP files.
380
  foreach ( $files as $size_name => $file ) {
381
  $webp_size_name = $size_name . $process::WEBP_SUFFIX;
382
 
383
  if ( empty( $data['sizes'][ $webp_size_name ]['success'] ) ) {
384
+ // This size has no WebP version.
385
  continue;
386
  }
387
 
406
  /** ----------------------------------------------------------------------------------------- */
407
 
408
  /**
409
+ * Add the WebP files to the list of files that the CDN must handle.
410
  *
411
  * @since 1.9
412
  * @access public
454
  $webp_size_name = $size_name . $process::WEBP_SUFFIX;
455
 
456
  if ( empty( $data['sizes'][ $webp_size_name ]['success'] ) ) {
457
+ // This size has no WebP version.
458
  continue;
459
  }
460
 
469
  }
470
 
471
  /**
472
+ * Add WebP format to the list of allowed mime types.
473
  *
474
  * @since 1.9
475
  * @access public
inc/3rd-party/enable-media-replace/classes/Main.php CHANGED
@@ -40,7 +40,7 @@ class Main extends Imagify_Enable_Media_Replace_Deprecated {
40
  protected $old_backup_path;
41
 
42
  /**
43
- * List of paths to the old webp files.
44
  *
45
  * @var array
46
  * @since 1.9.8
@@ -84,18 +84,18 @@ class Main extends Imagify_Enable_Media_Replace_Deprecated {
84
  }
85
 
86
  /**
87
- * Keep track of existing webp files.
88
  *
89
- * Whether the user chooses to rename the files or not, we will need to delete the current webp files before creating new ones:
90
  * - Rename the files: the old ones must be removed, they are useless now.
91
  * - Do not rename the files: the thumbnails may still get new names because of the suffix containing the image dimensions, which may differ (for example when thumbnails are scaled, not cropped).
92
- * In this last case, the thumbnails with the old dimensions are removed from the drive and from the WP’s post meta, so there is no need of keeping orphan webp files that would stay on the drive for ever, even after the attachment is deleted from WP.
93
  */
94
  foreach ( $this->process->get_media()->get_media_files() as $media_file ) {
95
  $this->old_webp_paths[] = imagify_path_to_webp( $media_file['path'] );
96
  }
97
 
98
- // Delete the old backup file and old webp files.
99
  add_action( 'imagify_before_auto_optimization', [ $this, 'delete_backup' ] );
100
  add_action( 'imagify_not_optimized_attachment_updated', [ $this, 'delete_backup' ] );
101
  }
@@ -106,7 +106,7 @@ class Main extends Imagify_Enable_Media_Replace_Deprecated {
106
  /** ----------------------------------------------------------------------------------------- */
107
 
108
  /**
109
- * Delete previous backup file and webp files.
110
  * This is done after the images have been already replaced by Enable Media Replace.
111
  *
112
  * @since 1.8.4
@@ -127,7 +127,7 @@ class Main extends Imagify_Enable_Media_Replace_Deprecated {
127
  }
128
 
129
  if ( ! empty( $this->old_webp_paths ) ) {
130
- // Delete old webp files.
131
  $this->old_webp_paths = array_filter( $this->old_webp_paths, [ $filesystem, 'exists' ] );
132
  array_map( [ $filesystem, 'delete' ], $this->old_webp_paths );
133
  $this->old_webp_paths = [];
40
  protected $old_backup_path;
41
 
42
  /**
43
+ * List of paths to the old WebP files.
44
  *
45
  * @var array
46
  * @since 1.9.8
84
  }
85
 
86
  /**
87
+ * Keep track of existing WebP files.
88
  *
89
+ * Whether the user chooses to rename the files or not, we will need to delete the current WebP files before creating new ones:
90
  * - Rename the files: the old ones must be removed, they are useless now.
91
  * - Do not rename the files: the thumbnails may still get new names because of the suffix containing the image dimensions, which may differ (for example when thumbnails are scaled, not cropped).
92
+ * In this last case, the thumbnails with the old dimensions are removed from the drive and from the WP’s post meta, so there is no need of keeping orphan WebP files that would stay on the drive for ever, even after the attachment is deleted from WP.
93
  */
94
  foreach ( $this->process->get_media()->get_media_files() as $media_file ) {
95
  $this->old_webp_paths[] = imagify_path_to_webp( $media_file['path'] );
96
  }
97
 
98
+ // Delete the old backup file and old WebP files.
99
  add_action( 'imagify_before_auto_optimization', [ $this, 'delete_backup' ] );
100
  add_action( 'imagify_not_optimized_attachment_updated', [ $this, 'delete_backup' ] );
101
  }
106
  /** ----------------------------------------------------------------------------------------- */
107
 
108
  /**
109
+ * Delete previous backup file and WebP files.
110
  * This is done after the images have been already replaced by Enable Media Replace.
111
  *
112
  * @since 1.8.4
127
  }
128
 
129
  if ( ! empty( $this->old_webp_paths ) ) {
130
+ // Delete old WebP files.
131
  $this->old_webp_paths = array_filter( $this->old_webp_paths, [ $filesystem, 'exists' ] );
132
  array_map( [ $filesystem, 'delete' ], $this->old_webp_paths );
133
  $this->old_webp_paths = [];
inc/3rd-party/nextgen-gallery/classes/Bulk/NGG.php CHANGED
@@ -106,7 +106,7 @@ class NGG extends \Imagify\Bulk\AbstractBulk {
106
  }
107
 
108
  /**
109
- * Get ids of all optimized media without webp versions.
110
  *
111
  * @since 1.9
112
  * @since 1.9.5 The method doesn't return the IDs directly anymore.
@@ -171,7 +171,7 @@ class NGG extends \Imagify\Bulk\AbstractBulk {
171
  $backup_path = get_imagify_ngg_attachment_backup_path( $file_path );
172
 
173
  if ( ! $this->filesystem->exists( $backup_path ) ) {
174
- // No backup, no webp.
175
  $data['errors']['no_backup'][] = $file_id;
176
  continue;
177
  }
@@ -183,7 +183,7 @@ class NGG extends \Imagify\Bulk\AbstractBulk {
183
  }
184
 
185
  /**
186
- * Tell if there are optimized media without webp versions.
187
  *
188
  * @since 1.9
189
  * @access public
106
  }
107
 
108
  /**
109
+ * Get ids of all optimized media without WebP versions.
110
  *
111
  * @since 1.9
112
  * @since 1.9.5 The method doesn't return the IDs directly anymore.
171
  $backup_path = get_imagify_ngg_attachment_backup_path( $file_path );
172
 
173
  if ( ! $this->filesystem->exists( $backup_path ) ) {
174
+ // No backup, no WebP.
175
  $data['errors']['no_backup'][] = $file_id;
176
  continue;
177
  }
183
  }
184
 
185
  /**
186
+ * Tell if there are optimized media without WebP versions.
187
  *
188
  * @since 1.9
189
  * @access public
inc/3rd-party/nextgen-gallery/inc/common/attachments.php CHANGED
@@ -150,7 +150,7 @@ function _imagify_ngg_media_library_imported_image_data( $image, $attachment ) {
150
  }
151
 
152
  /**
153
- * Webp for the full size.
154
  * Look for an existing copy locally:
155
  * - if it exists, copy it (and its optimization data),
156
  * - if not, add it to the optimization queue.
@@ -158,12 +158,12 @@ function _imagify_ngg_media_library_imported_image_data( $image, $attachment ) {
158
  $add_full_webp = $wp_media->is_image() && get_imagify_option( 'convert_to_webp' );
159
 
160
  if ( $add_full_webp ) {
161
- // It's a supported image and webp conversion is enabled.
162
  $wp_full_path_webp = false;
163
  $webp_size_name = 'full' . $wp_process::WEBP_SUFFIX;
164
  $wp_webp_data = $wp_data->get_size_data( $webp_size_name );
165
 
166
- // Get the path to the webp image if it exists.
167
  $wp_full_path_webp = $wp_process->get_fullsize_file()->get_path_to_webp();
168
 
169
  if ( $wp_full_path_webp && ! $filesystem->exists( $wp_full_path_webp ) ) {
@@ -171,11 +171,11 @@ function _imagify_ngg_media_library_imported_image_data( $image, $attachment ) {
171
  }
172
 
173
  if ( $wp_full_path_webp ) {
174
- // We know we have a webp version. Make sure we have the right data.
175
  $wp_webp_data['success'] = true;
176
 
177
  if ( empty( $wp_webp_data['original_size'] ) ) {
178
- // The webp data is missing.
179
  $full_size_weight = $wp_full_size_data['original_size'];
180
 
181
  if ( ! $full_size_weight && $wp_backup_path ) {
@@ -189,7 +189,7 @@ function _imagify_ngg_media_library_imported_image_data( $image, $attachment ) {
189
  }
190
 
191
  if ( ! empty( $wp_webp_data['original_size'] ) && empty( $wp_webp_data['optimized_size'] ) ) {
192
- // The webp file size.
193
  $wp_webp_data['optimized_size'] = $filesystem->size( $wp_full_path_webp );
194
  }
195
 
@@ -216,7 +216,7 @@ function _imagify_ngg_media_library_imported_image_data( $image, $attachment ) {
216
  }
217
 
218
  if ( ! $add_full_webp ) {
219
- // The webp file has been successfully copied: now, copy the data.
220
  $ngg_process->get_data()->update_size_optimization_data( $webp_size_name, $wp_webp_data );
221
  }
222
  }
@@ -227,7 +227,7 @@ function _imagify_ngg_media_library_imported_image_data( $image, $attachment ) {
227
  unset( $sizes['full'] );
228
 
229
  if ( $add_full_webp ) {
230
- // We could not use a local webp copy: ask for a new one.
231
  $sizes[ $webp_size_name ] = [];
232
  }
233
 
@@ -282,7 +282,7 @@ function imagify_ngg_cleanup_after_media_deletion( $image_id, $image ) {
282
 
283
  /**
284
  * The backup file has already been deleted by NGG.
285
- * Delete the webp versions and the optimization data.
286
  */
287
  $process->delete_webp_files();
288
  $process->get_data()->delete_optimization_data();
150
  }
151
 
152
  /**
153
+ * WebP for the full size.
154
  * Look for an existing copy locally:
155
  * - if it exists, copy it (and its optimization data),
156
  * - if not, add it to the optimization queue.
158
  $add_full_webp = $wp_media->is_image() && get_imagify_option( 'convert_to_webp' );
159
 
160
  if ( $add_full_webp ) {
161
+ // It's a supported image and WebP conversion is enabled.
162
  $wp_full_path_webp = false;
163
  $webp_size_name = 'full' . $wp_process::WEBP_SUFFIX;
164
  $wp_webp_data = $wp_data->get_size_data( $webp_size_name );
165
 
166
+ // Get the path to the WebP image if it exists.
167
  $wp_full_path_webp = $wp_process->get_fullsize_file()->get_path_to_webp();
168
 
169
  if ( $wp_full_path_webp && ! $filesystem->exists( $wp_full_path_webp ) ) {
171
  }
172
 
173
  if ( $wp_full_path_webp ) {
174
+ // We know we have a WebP version. Make sure we have the right data.
175
  $wp_webp_data['success'] = true;
176
 
177
  if ( empty( $wp_webp_data['original_size'] ) ) {
178
+ // The WebP data is missing.
179
  $full_size_weight = $wp_full_size_data['original_size'];
180
 
181
  if ( ! $full_size_weight && $wp_backup_path ) {
189
  }
190
 
191
  if ( ! empty( $wp_webp_data['original_size'] ) && empty( $wp_webp_data['optimized_size'] ) ) {
192
+ // The WebP file size.
193
  $wp_webp_data['optimized_size'] = $filesystem->size( $wp_full_path_webp );
194
  }
195
 
216
  }
217
 
218
  if ( ! $add_full_webp ) {
219
+ // The WebP file has been successfully copied: now, copy the data.
220
  $ngg_process->get_data()->update_size_optimization_data( $webp_size_name, $wp_webp_data );
221
  }
222
  }
227
  unset( $sizes['full'] );
228
 
229
  if ( $add_full_webp ) {
230
+ // We could not use a local WebP copy: ask for a new one.
231
  $sizes[ $webp_size_name ] = [];
232
  }
233
 
282
 
283
  /**
284
  * The backup file has already been deleted by NGG.
285
+ * Delete the WebP versions and the optimization data.
286
  */
287
  $process->delete_webp_files();
288
  $process->get_data()->delete_optimization_data();
inc/3rd-party/regenerate-thumbnails/classes/Main.php CHANGED
@@ -158,7 +158,7 @@ class Main extends \Imagify_Regenerate_Thumbnails_Deprecated {
158
  /**
159
  * Optimize the sizes that have been regenerated.
160
  */
161
- // If the media has webp versions, recreate them for the sizes that have been regenerated.
162
  $data = $process->get_data();
163
  $optimization_data = $data->get_optimization_data();
164
 
@@ -170,7 +170,7 @@ class Main extends \Imagify_Regenerate_Thumbnails_Deprecated {
170
  continue;
171
  }
172
 
173
- // Add the webp size.
174
  $sizes[ $size_name ] = [];
175
  }
176
  }
158
  /**
159
  * Optimize the sizes that have been regenerated.
160
  */
161
+ // If the media has WebP versions, recreate them for the sizes that have been regenerated.
162
  $data = $process->get_data();
163
  $optimization_data = $data->get_optimization_data();
164
 
170
  continue;
171
  }
172
 
173
+ // Add the WebP size.
174
  $sizes[ $size_name ] = [];
175
  }
176
  }
inc/3rd-party/yoast-seo.php CHANGED
@@ -10,6 +10,9 @@ if ( defined( 'WPSEO_VERSION' ) && is_admin() && ! wp_doing_ajax() ) :
10
  * @since 1.4.1
11
  */
12
  function _imagify_dequeue_yoastseo_script() {
 
 
 
13
  $current_screen = get_current_screen();
14
 
15
  if ( isset( $current_screen ) && 'post' === $current_screen->base && 'attachment' === $current_screen->post_type ) {
10
  * @since 1.4.1
11
  */
12
  function _imagify_dequeue_yoastseo_script() {
13
+ if ( ! function_exists( 'get_current_screen' ) ) {
14
+ return;
15
+ }
16
  $current_screen = get_current_screen();
17
 
18
  if ( isset( $current_screen ) && 'post' === $current_screen->base && 'attachment' === $current_screen->post_type ) {
inc/classes/class-imagify-abstract-cron.php CHANGED
@@ -262,7 +262,7 @@ abstract class Imagify_Abstract_Cron {
262
  * @return int Timestamp.
263
  */
264
  public static function get_next_timestamp( $event_time = '00:00' ) {
265
- $current_time_int = (int) date( 'Gis' );
266
  $event_time_int = (int) str_replace( ':', '', $event_time . '00' );
267
  $event_time = explode( ':', $event_time );
268
  $event_hour = (int) $event_time[0];
@@ -271,7 +271,7 @@ abstract class Imagify_Abstract_Cron {
271
 
272
  if ( $event_time_int <= $current_time_int ) {
273
  // The event time is passed, we need to schedule the event tomorrow.
274
- return mktime( $event_hour, $event_minute, 0, (int) date( 'n' ), (int) date( 'j' ) + 1 ) - $offset;
275
  }
276
 
277
  // We haven't passed the event time yet, schedule the event today.
262
  * @return int Timestamp.
263
  */
264
  public static function get_next_timestamp( $event_time = '00:00' ) {
265
+ $current_time_int = (int) gmdate( 'Gis' );
266
  $event_time_int = (int) str_replace( ':', '', $event_time . '00' );
267
  $event_time = explode( ':', $event_time );
268
  $event_hour = (int) $event_time[0];
271
 
272
  if ( $event_time_int <= $current_time_int ) {
273
  // The event time is passed, we need to schedule the event tomorrow.
274
+ return mktime( $event_hour, $event_minute, 0, (int) gmdate( 'n' ), (int) gmdate( 'j' ) + 1 ) - $offset;
275
  }
276
 
277
  // We haven't passed the event time yet, schedule the event today.
inc/classes/class-imagify-admin-ajax-post.php CHANGED
@@ -224,7 +224,7 @@ class Imagify_Admin_Ajax_Post extends Imagify_Admin_Ajax_Post_Deprecated {
224
  }
225
 
226
  /**
227
- * Generate webp images if they are missing.
228
  *
229
  * @since 1.9
230
  * @access protected
@@ -239,7 +239,7 @@ class Imagify_Admin_Ajax_Post extends Imagify_Admin_Ajax_Post_Deprecated {
239
  }
240
 
241
  /**
242
- * Delete webp images for media that are "already_optimize".
243
  *
244
  * @since 1.9.6
245
  * @access protected
@@ -270,7 +270,7 @@ class Imagify_Admin_Ajax_Post extends Imagify_Admin_Ajax_Post_Deprecated {
270
  $deleted = $process->delete_webp_files();
271
 
272
  if ( is_wp_error( $deleted ) ) {
273
- return new \WP_Error( 'webp_not_deleted', __( 'Previous webp files could not be deleted.', 'imagify' ) );
274
  }
275
 
276
  return true;
@@ -329,7 +329,7 @@ class Imagify_Admin_Ajax_Post extends Imagify_Admin_Ajax_Post_Deprecated {
329
  $data = $bulk->get_optimized_media_ids_without_webp();
330
 
331
  if ( ! $data['ids'] && $data['errors']['no_backup'] ) {
332
- // No backup, no webp.
333
  $data = 'no-backup';
334
  } elseif ( ! $data['ids'] && $data['errors']['no_file_path'] ) {
335
  // Error.
@@ -454,7 +454,7 @@ class Imagify_Admin_Ajax_Post extends Imagify_Admin_Ajax_Post_Deprecated {
454
  imagify_check_nonce( 'imagify-bulk-optimize' );
455
 
456
  $folder_types = filter_input( INPUT_GET, 'types', FILTER_SANITIZE_STRING, FILTER_REQUIRE_ARRAY );
457
- $folder_types = is_array( $folder_types ) ? array_filter( $folder_types ) : [];
458
 
459
  if ( ! $folder_types ) {
460
  imagify_die( __( 'Invalid request', 'imagify' ) );
@@ -582,7 +582,7 @@ class Imagify_Admin_Ajax_Post extends Imagify_Admin_Ajax_Post_Deprecated {
582
  }
583
 
584
  /**
585
- * Generate webp images if they are missing.
586
  *
587
  * @since 1.9
588
  * @access public
@@ -617,7 +617,7 @@ class Imagify_Admin_Ajax_Post extends Imagify_Admin_Ajax_Post_Deprecated {
617
  }
618
 
619
  /**
620
- * Generate webp images if they are missing.
621
  *
622
  * @since 1.9.6
623
  * @access public
224
  }
225
 
226
  /**
227
+ * Generate WebP images if they are missing.
228
  *
229
  * @since 1.9
230
  * @access protected
239
  }
240
 
241
  /**
242
+ * Delete WebP images for media that are "already_optimize".
243
  *
244
  * @since 1.9.6
245
  * @access protected
270
  $deleted = $process->delete_webp_files();
271
 
272
  if ( is_wp_error( $deleted ) ) {
273
+ return new \WP_Error( 'webp_not_deleted', __( 'Previous WebP files could not be deleted.', 'imagify' ) );
274
  }
275
 
276
  return true;
329
  $data = $bulk->get_optimized_media_ids_without_webp();
330
 
331
  if ( ! $data['ids'] && $data['errors']['no_backup'] ) {
332
+ // No backup, no WebP.
333
  $data = 'no-backup';
334
  } elseif ( ! $data['ids'] && $data['errors']['no_file_path'] ) {
335
  // Error.
454
  imagify_check_nonce( 'imagify-bulk-optimize' );
455
 
456
  $folder_types = filter_input( INPUT_GET, 'types', FILTER_SANITIZE_STRING, FILTER_REQUIRE_ARRAY );
457
+ $folder_types = is_array( $folder_types ) ? array_filter( $folder_types, 'is_string' ) : [];
458
 
459
  if ( ! $folder_types ) {
460
  imagify_die( __( 'Invalid request', 'imagify' ) );
582
  }
583
 
584
  /**
585
+ * Generate WebP images if they are missing.
586
  *
587
  * @since 1.9
588
  * @access public
617
  }
618
 
619
  /**
620
+ * Generate WebP images if they are missing.
621
  *
622
  * @since 1.9.6
623
  * @access public
inc/classes/class-imagify-cron-rating.php CHANGED
@@ -103,7 +103,7 @@ class Imagify_Cron_Rating extends Imagify_Abstract_Cron {
103
 
104
  $user = get_imagify_user();
105
 
106
- if ( ! is_wp_error( $user ) && (int) $user->image_count > 100 ) {
107
  set_site_transient( 'imagify_user_images_count', $user->image_count );
108
  }
109
  }
103
 
104
  $user = get_imagify_user();
105
 
106
+ if ( ! is_wp_error( $user ) && isset( $user->image_count ) && (int) $user->image_count > 100 ) {
107
  set_site_transient( 'imagify_user_images_count', $user->image_count );
108
  }
109
  }
inc/classes/class-imagify-custom-folders.php CHANGED
@@ -261,7 +261,7 @@ class Imagify_Custom_Folders {
261
  $filesystem->delete( $args['backup_path'] );
262
  }
263
 
264
- // Webp.
265
  $mime_type = $filesystem->get_mime_type( $args['file_path'] );
266
  $is_image = $mime_type && strpos( $mime_type, 'image/' ) === 0;
267
  $webp_path = $is_image ? imagify_path_to_webp( $args['file_path'] ) : false;
@@ -321,7 +321,7 @@ class Imagify_Custom_Folders {
321
  // Remove the corresponding folder if inactive and have no files left.
322
  self::remove_empty_inactive_folders( $folder_id );
323
 
324
- // Delete the webp version.
325
  if ( $has_webp ) {
326
  $filesystem->delete( $webp_path );
327
  }
@@ -382,7 +382,7 @@ class Imagify_Custom_Folders {
382
  self::remove_empty_inactive_folders( $old_data['folder_id'] );
383
  }
384
 
385
- // Delete the webp version.
386
  if ( $has_webp ) {
387
  $filesystem->delete( $webp_path );
388
  }
@@ -402,7 +402,7 @@ class Imagify_Custom_Folders {
402
  if ( $is_image ) {
403
  $size = $filesystem->get_image_size( $file_path );
404
 
405
- // Delete the webp version.
406
  if ( $has_webp ) {
407
  $filesystem->delete( $webp_path );
408
  }
@@ -445,7 +445,7 @@ class Imagify_Custom_Folders {
445
  'original_size' => $filesystem->size( $path ),
446
  ] );
447
 
448
- // Webp.
449
  $webp_size = 'full' . $process::WEBP_SUFFIX;
450
 
451
  if ( $has_webp && empty( $old_data['data'][ $webp_size ]['success'] ) ) {
261
  $filesystem->delete( $args['backup_path'] );
262
  }
263
 
264
+ // WebP.
265
  $mime_type = $filesystem->get_mime_type( $args['file_path'] );
266
  $is_image = $mime_type && strpos( $mime_type, 'image/' ) === 0;
267
  $webp_path = $is_image ? imagify_path_to_webp( $args['file_path'] ) : false;
321
  // Remove the corresponding folder if inactive and have no files left.
322
  self::remove_empty_inactive_folders( $folder_id );
323
 
324
+ // Delete the WebP version.
325
  if ( $has_webp ) {
326
  $filesystem->delete( $webp_path );
327
  }
382
  self::remove_empty_inactive_folders( $old_data['folder_id'] );
383
  }
384
 
385
+ // Delete the WebP version.
386
  if ( $has_webp ) {
387
  $filesystem->delete( $webp_path );
388
  }
402
  if ( $is_image ) {
403
  $size = $filesystem->get_image_size( $file_path );
404
 
405
+ // Delete the WebP version.
406
  if ( $has_webp ) {
407
  $filesystem->delete( $webp_path );
408
  }
445
  'original_size' => $filesystem->size( $path ),
446
  ] );
447
 
448
+ // WebP.
449
  $webp_size = 'full' . $process::WEBP_SUFFIX;
450
 
451
  if ( $has_webp && empty( $old_data['data'][ $webp_size ]['success'] ) ) {
inc/classes/class-imagify-files-list-table.php CHANGED
@@ -643,7 +643,7 @@ class Imagify_Files_List_Table extends WP_List_Table {
643
  $has_webp = $item->process->has_webp() ? __( 'Yes', 'imagify' ) : __( 'No', 'imagify' );
644
  ?>
645
  <li class="imagify-data-item">
646
- <span class="data"><?php esc_html_e( 'Webp generated:', 'imagify' ); ?></span>
647
  <strong class="data-value"><?php echo esc_html( $has_webp ); ?></strong>
648
  </li>
649
  <?php
@@ -854,7 +854,7 @@ class Imagify_Files_List_Table extends WP_List_Table {
854
  }
855
 
856
  /**
857
- * Prints a button to generate webp versions if they are missing.
858
  *
859
  * @since 1.7
860
  * @access protected
@@ -871,7 +871,7 @@ class Imagify_Files_List_Table extends WP_List_Table {
871
  }
872
 
873
  /**
874
- * Prints a button to delete webp versions when the status is "already_optimized".
875
  *
876
  * @since 1.9.6
877
  * @access protected
643
  $has_webp = $item->process->has_webp() ? __( 'Yes', 'imagify' ) : __( 'No', 'imagify' );
644
  ?>
645
  <li class="imagify-data-item">
646
+ <span class="data"><?php esc_html_e( 'WebP generated:', 'imagify' ); ?></span>
647
  <strong class="data-value"><?php echo esc_html( $has_webp ); ?></strong>
648
  </li>
649
  <?php
854
  }
855
 
856
  /**
857
+ * Prints a button to generate WebP versions if they are missing.
858
  *
859
  * @since 1.7
860
  * @access protected
871
  }
872
 
873
  /**
874
+ * Prints a button to delete WebP versions when the status is "already_optimized".
875
  *
876
  * @since 1.9.6
877
  * @access protected
inc/classes/class-imagify-notices.php CHANGED
@@ -861,7 +861,10 @@ class Imagify_Notices extends Imagify_Notices_Deprecated {
861
  * Get all notice IDs.
862
  *
863
  * @since 1.6.10
 
864
  * @author Grégory Viguier
 
 
865
  */
866
  protected function get_notice_ids() {
867
  /**
@@ -872,7 +875,7 @@ class Imagify_Notices extends Imagify_Notices_Deprecated {
872
  *
873
  * @param array $notice_ids An array of notice "IDs".
874
  */
875
- return apply_filters( 'imagify_notices', self::$notice_ids );
876
  }
877
 
878
  /**
861
  * Get all notice IDs.
862
  *
863
  * @since 1.6.10
864
+ * @since 1.10 Cast return value to array.
865
  * @author Grégory Viguier
866
+ *
867
+ * @return array The filtered notice ids.
868
  */
869
  protected function get_notice_ids() {
870
  /**
875
  *
876
  * @param array $notice_ids An array of notice "IDs".
877
  */
878
+ return (array) apply_filters( 'imagify_notices', self::$notice_ids );
879
  }
880
 
881
  /**
inc/classes/class-imagify-plugin.php CHANGED
@@ -110,7 +110,6 @@ class Imagify_Plugin {
110
 
111
  require_once $inc_path . 'deprecated/deprecated.php';
112
  require_once $inc_path . 'deprecated/3rd-party.php';
113
- require_once $inc_path . 'functions/compat.php';
114
  require_once $inc_path . 'functions/common.php';
115
  require_once $inc_path . 'functions/options.php';
116
  require_once $inc_path . 'functions/formatting.php';
110
 
111
  require_once $inc_path . 'deprecated/deprecated.php';
112
  require_once $inc_path . 'deprecated/3rd-party.php';
 
113
  require_once $inc_path . 'functions/common.php';
114
  require_once $inc_path . 'functions/options.php';
115
  require_once $inc_path . 'functions/formatting.php';
inc/classes/class-imagify-user.php CHANGED
@@ -190,6 +190,8 @@ class Imagify_User {
190
  $percent = min( max( 0, $percent ), 100 );
191
  }
192
 
 
 
193
  if ( $done ) {
194
  return $percent;
195
  }
190
  $percent = min( max( 0, $percent ), 100 );
191
  }
192
 
193
+ $percent = (float) $percent;
194
+
195
  if ( $done ) {
196
  return $percent;
197
  }
inc/classes/class-imagify.php CHANGED
@@ -12,7 +12,7 @@ class Imagify {
12
  *
13
  * @var string
14
  */
15
- const API_ENDPOINT = 'https://app.imagify.io/api/';
16
 
17
  /**
18
  * The Imagify API key.
12
  *
13
  * @var string
14
  */
15
+ const API_ENDPOINT = IMAGIFY_APP_API_URL;
16
 
17
  /**
18
  * The Imagify API key.
inc/common/attachments.php CHANGED
@@ -22,7 +22,7 @@ function imagify_trigger_delete_attachment_hook( $post_id ) {
22
 
23
  add_action( 'imagify_delete_media', 'imagify_cleanup_after_media_deletion' );
24
  /**
25
- * Delete the backup file and the webp files when an attachement is deleted.
26
  *
27
  * @since 1.9
28
  * @author Grégory Viguier
@@ -36,7 +36,7 @@ function imagify_cleanup_after_media_deletion( $process ) {
36
 
37
  /**
38
  * The optimization data will be automatically deleted by WP (post metas).
39
- * Delete the webp versions and the backup file.
40
  */
41
  $process->delete_webp_files();
42
  $process->delete_backup();
@@ -44,7 +44,7 @@ function imagify_cleanup_after_media_deletion( $process ) {
44
 
45
  add_filter( 'ext2type', 'imagify_add_webp_type' );
46
  /**
47
- * Add the webp extension to wp_get_ext_types().
48
  *
49
  * @since 1.9
50
  * @author Grégory Viguier
22
 
23
  add_action( 'imagify_delete_media', 'imagify_cleanup_after_media_deletion' );
24
  /**
25
+ * Delete the backup file and the WebP files when an attachement is deleted.
26
  *
27
  * @since 1.9
28
  * @author Grégory Viguier
36
 
37
  /**
38
  * The optimization data will be automatically deleted by WP (post metas).
39
+ * Delete the WebP versions and the backup file.
40
  */
41
  $process->delete_webp_files();
42
  $process->delete_backup();
44
 
45
  add_filter( 'ext2type', 'imagify_add_webp_type' );
46
  /**
47
+ * Add the WebP extension to wp_get_ext_types().
48
  *
49
  * @since 1.9
50
  * @author Grégory Viguier
inc/deprecated/classes/class-imagify-enable-media-replace-deprecated.php CHANGED
@@ -141,7 +141,7 @@ class Imagify_Enable_Media_Replace_Deprecated {
141
  if ( $backup_path ) {
142
  $this->old_backup_path = $backup_path;
143
 
144
- // Keep track of existing webp files.
145
  $media_files = $media->get_media_files();
146
 
147
  if ( $media_files ) {
141
  if ( $backup_path ) {
142
  $this->old_backup_path = $backup_path;
143
 
144
+ // Keep track of existing WebP files.
145
  $media_files = $media->get_media_files();
146
 
147
  if ( $media_files ) {
inc/functions/admin-ui.php CHANGED
@@ -90,7 +90,7 @@ function get_imagify_attachment_optimization_text( $process ) {
90
 
91
  if ( $media->is_image() ) {
92
  $has_webp = $process->has_webp() ? __( 'Yes', 'imagify' ) : __( 'No', 'imagify' );
93
- $output .= $output_before . '<span class="data">' . __( 'Webp generated:', 'imagify' ) . '</span> <strong class="big">' . esc_html( $has_webp ) . '</strong>' . $output_after;
94
 
95
  $total_optimized_thumbnails = $data->get_optimized_sizes_count();
96
 
@@ -310,7 +310,7 @@ function get_imagify_attachment_optimize_missing_thumbnails_link( $process ) {
310
  }
311
 
312
  /**
313
- * Get the link to generate webp versions if they are missing.
314
  *
315
  * @since 1.9
316
  * @author Grégory Viguier
@@ -346,7 +346,7 @@ function get_imagify_attachment_generate_webp_versions_link( $process ) {
346
  $context = $media->get_context();
347
 
348
  /**
349
- * Allow to not display the "Generate webp versions" link.
350
  *
351
  * @since 1.9
352
  * @author Grégory Viguier
@@ -375,7 +375,7 @@ function get_imagify_attachment_generate_webp_versions_link( $process ) {
375
  }
376
 
377
  /**
378
- * Get the link to delete webp versions when the status is "already_optimized".
379
  *
380
  * @since 1.9.6
381
  * @author Grégory Viguier
90
 
91
  if ( $media->is_image() ) {
92
  $has_webp = $process->has_webp() ? __( 'Yes', 'imagify' ) : __( 'No', 'imagify' );
93
+ $output .= $output_before . '<span class="data">' . __( 'WebP generated:', 'imagify' ) . '</span> <strong class="big">' . esc_html( $has_webp ) . '</strong>' . $output_after;
94
 
95
  $total_optimized_thumbnails = $data->get_optimized_sizes_count();
96
 
310
  }
311
 
312
  /**
313
+ * Get the link to generate WebP versions if they are missing.
314
  *
315
  * @since 1.9
316
  * @author Grégory Viguier
346
  $context = $media->get_context();
347
 
348
  /**
349
+ * Allow to not display the "Generate WebP versions" link.
350
  *
351
  * @since 1.9
352
  * @author Grégory Viguier
375
  }
376
 
377
  /**
378
+ * Get the link to delete WebP versions when the status is "already_optimized".
379
  *
380
  * @since 1.9.6
381
  * @author Grégory Viguier
inc/functions/common.php CHANGED
@@ -169,7 +169,7 @@ function imagify_get_filesystem() {
169
  }
170
 
171
  /**
172
- * Convert a path (or URL) to its webp version.
173
  * To keep the function simple:
174
  * - Not tested if it's an image.
175
  * - File existance is not tested.
@@ -223,8 +223,8 @@ function imagify_can_optimize_custom_folders() {
223
  * @return string The URL.
224
  */
225
  function imagify_get_external_url( $target, $query_args = array() ) {
226
- $site_url = 'https://imagify.io/';
227
- $app_url = 'https://app.imagify.io/#/';
228
 
229
  switch ( $target ) {
230
  case 'plugin':
169
  }
170
 
171
  /**
172
+ * Convert a path (or URL) to its WebP version.
173
  * To keep the function simple:
174
  * - Not tested if it's an image.
175
  * - File existance is not tested.
223
  * @return string The URL.
224
  */
225
  function imagify_get_external_url( $target, $query_args = array() ) {
226
+ $site_url = IMAGIFY_APP_DOMAIN . '/';
227
+ $app_url = IMAGIFY_APP_DOMAIN . '/#/';
228
 
229
  switch ( $target ) {
230
  case 'plugin':
inc/functions/compat.php DELETED
@@ -1,545 +0,0 @@
1
- <?php
2
- defined( 'ABSPATH' ) || die( 'Cheatin’ uh?' );
3
-
4
- /** --------------------------------------------------------------------------------------------- */
5
- /** PHP ========================================================================================= */
6
- /** --------------------------------------------------------------------------------------------- */
7
-
8
- if ( ! function_exists( 'curl_file_create' ) ) :
9
- /**
10
- * PHP-agnostic version of curl_file_create(): create a CURLFile object.
11
- *
12
- * @since 1.0
13
- * @since PHP 5.5
14
- * @source http://dk2.php.net/manual/en/function.curl-file-create.php
15
- *
16
- * @param string $filename Path to the file which will be uploaded.
17
- * @param string $mimetype Mimetype of the file.
18
- * @param string $postname Name of the file to be used in the upload data.
19
- * @return string The CURLFile object.
20
- */
21
- function curl_file_create( $filename, $mimetype = '', $postname = '' ) {
22
- return "@$filename;filename="
23
- . ( $postname ? $postname : basename( $filename ) )
24
- . ( $mimetype ? ";type=$mimetype" : '' );
25
- }
26
- endif;
27
-
28
- /** --------------------------------------------------------------------------------------------- */
29
- /** WORDPRESS =================================================================================== */
30
- /** --------------------------------------------------------------------------------------------- */
31
-
32
- if ( ! function_exists( 'wp_json_encode' ) ) :
33
- /**
34
- * Encode a variable into JSON, with some sanity checks.
35
- *
36
- * @since 1.6.5
37
- * @since WP 4.1.0
38
- *
39
- * @param mixed $data Variable (usually an array or object) to encode as JSON.
40
- * @param int $options Optional. Options to be passed to json_encode(). Default 0.
41
- * @param int $depth Optional. Maximum depth to walk through $data. Must be greater than 0. Default 512.
42
- * @return string|false The JSON encoded string, or false if it cannot be encoded.
43
- */
44
- function wp_json_encode( $data, $options = 0, $depth = 512 ) {
45
- /*
46
- * json_encode() has had extra params added over the years.
47
- * $options was added in 5.3, and $depth in 5.5.
48
- * We need to make sure we call it with the correct arguments.
49
- */
50
- if ( version_compare( PHP_VERSION, '5.5', '>=' ) ) {
51
- $args = array( $data, $options, $depth );
52
- } elseif ( version_compare( PHP_VERSION, '5.3', '>=' ) ) {
53
- $args = array( $data, $options );
54
- } else {
55
- $args = array( $data );
56
- }
57
-
58
- // Prepare the data for JSON serialization.
59
- $args[0] = _wp_json_prepare_data( $data );
60
-
61
- $json = @call_user_func_array( 'json_encode', $args );
62
-
63
- // If json_encode() was successful, no need to do more sanity checking.
64
- // ... unless we're in an old version of PHP, and json_encode() returned
65
- // a string containing 'null'. Then we need to do more sanity checking.
66
- if ( false !== $json && ( version_compare( PHP_VERSION, '5.5', '>=' ) || false === strpos( $json, 'null' ) ) ) {
67
- return $json;
68
- }
69
-
70
- try {
71
- $args[0] = _wp_json_sanity_check( $data, $depth );
72
- } catch ( Exception $e ) {
73
- return false;
74
- }
75
-
76
- return call_user_func_array( 'json_encode', $args );
77
- }
78
- endif;
79
-
80
- if ( ! function_exists( '_wp_json_prepare_data' ) ) :
81
- /**
82
- * Prepares response data to be serialized to JSON.
83
- *
84
- * This supports the JsonSerializable interface for PHP 5.2-5.3 as well.
85
- *
86
- * @since 1.6.5
87
- * @since WP 4.4.0
88
- * @access private
89
- *
90
- * @param mixed $data Native representation.
91
- * @return bool|int|float|null|string|array Data ready for `json_encode()`.
92
- */
93
- function _wp_json_prepare_data( $data ) {
94
- if ( ! defined( 'WP_JSON_SERIALIZE_COMPATIBLE' ) || WP_JSON_SERIALIZE_COMPATIBLE === false ) {
95
- return $data;
96
- }
97
-
98
- switch ( gettype( $data ) ) {
99
- case 'boolean':
100
- case 'integer':
101
- case 'double':
102
- case 'string':
103
- case 'NULL':
104
- // These values can be passed through.
105
- return $data;
106
-
107
- case 'array':
108
- // Arrays must be mapped in case they also return objects.
109
- return array_map( '_wp_json_prepare_data', $data );
110
-
111
- case 'object':
112
- // If this is an incomplete object (__PHP_Incomplete_Class), bail.
113
- if ( ! is_object( $data ) ) {
114
- return null;
115
- }
116
-
117
- if ( $data instanceof JsonSerializable ) {
118
- $data = $data->jsonSerialize();
119
- } else {
120
- $data = get_object_vars( $data );
121
- }
122
-
123
- // Now, pass the array (or whatever was returned from jsonSerialize through).
124
- return _wp_json_prepare_data( $data );
125
-
126
- default:
127
- return null;
128
- }
129
- }
130
- endif;
131
-
132
- if ( ! function_exists( '_wp_json_sanity_check' ) ) :
133
- /**
134
- * Perform sanity checks on data that shall be encoded to JSON.
135
- *
136
- * @since 1.6.5
137
- * @since WP 4.1.0
138
- * @access private
139
- * @throws Exception If the depth limit is reached.
140
- *
141
- * @see wp_json_encode()
142
- *
143
- * @param mixed $data Variable (usually an array or object) to encode as JSON.
144
- * @param int $depth Maximum depth to walk through $data. Must be greater than 0.
145
- * @return mixed The sanitized data that shall be encoded to JSON.
146
- */
147
- function _wp_json_sanity_check( $data, $depth ) {
148
- if ( $depth < 0 ) {
149
- throw new Exception( 'Reached depth limit' );
150
- }
151
-
152
- if ( is_array( $data ) ) {
153
- $output = array();
154
- foreach ( $data as $id => $el ) {
155
- // Don't forget to sanitize the ID!
156
- if ( is_string( $id ) ) {
157
- $clean_id = _wp_json_convert_string( $id );
158
- } else {
159
- $clean_id = $id;
160
- }
161
-
162
- // Check the element type, so that we're only recursing if we really have to.
163
- if ( is_array( $el ) || is_object( $el ) ) {
164
- $output[ $clean_id ] = _wp_json_sanity_check( $el, $depth - 1 );
165
- } elseif ( is_string( $el ) ) {
166
- $output[ $clean_id ] = _wp_json_convert_string( $el );
167
- } else {
168
- $output[ $clean_id ] = $el;
169
- }
170
- }
171
- } elseif ( is_object( $data ) ) {
172
- $output = new stdClass();
173
- foreach ( $data as $id => $el ) {
174
- if ( is_string( $id ) ) {
175
- $clean_id = _wp_json_convert_string( $id );
176
- } else {
177
- $clean_id = $id;
178
- }
179
-
180
- if ( is_array( $el ) || is_object( $el ) ) {
181
- $output->$clean_id = _wp_json_sanity_check( $el, $depth - 1 );
182
- } elseif ( is_string( $el ) ) {
183
- $output->$clean_id = _wp_json_convert_string( $el );
184
- } else {
185
- $output->$clean_id = $el;
186
- }
187
- }
188
- } elseif ( is_string( $data ) ) {
189
- return _wp_json_convert_string( $data );
190
- } else {
191
- return $data;
192
- } // End if().
193
-
194
- return $output;
195
- }
196
- endif;
197
-
198
- if ( ! function_exists( '_wp_json_convert_string' ) ) :
199
- /**
200
- * Convert a string to UTF-8, so that it can be safely encoded to JSON.
201
- *
202
- * @since 1.6.5
203
- * @since WP 4.1.0
204
- * @access private
205
- *
206
- * @see _wp_json_sanity_check()
207
- *
208
- * @staticvar bool $use_mb
209
- *
210
- * @param string $string The string which is to be converted.
211
- * @return string The checked string.
212
- */
213
- function _wp_json_convert_string( $string ) {
214
- static $use_mb = null;
215
- if ( is_null( $use_mb ) ) {
216
- $use_mb = function_exists( 'mb_convert_encoding' );
217
- }
218
-
219
- if ( $use_mb ) {
220
- $encoding = mb_detect_encoding( $string, mb_detect_order(), true );
221
- if ( $encoding ) {
222
- return mb_convert_encoding( $string, 'UTF-8', $encoding );
223
- } else {
224
- return mb_convert_encoding( $string, 'UTF-8', 'UTF-8' );
225
- }
226
- } else {
227
- return wp_check_invalid_utf8( $string, true );
228
- }
229
- }
230
- endif;
231
-
232
- if ( ! function_exists( 'wp_parse_url' ) ) :
233
- /**
234
- * A wrapper for PHP's parse_url() function that handles consistency in the return
235
- * values across PHP versions.
236
- *
237
- * PHP 5.4.7 expanded parse_url()'s ability to handle non-absolute url's, including
238
- * schemeless and relative url's with :// in the path. This function works around
239
- * those limitations providing a standard output on PHP 5.2~5.4+.
240
- *
241
- * Secondly, across various PHP versions, schemeless URLs starting containing a ":"
242
- * in the query are being handled inconsistently. This function works around those
243
- * differences as well.
244
- *
245
- * Error suppression is used as prior to PHP 5.3.3, an E_WARNING would be generated
246
- * when URL parsing failed.
247
- *
248
- * @since 1.6.9
249
- * @since WP 4.4.0
250
- * @since WP 4.7.0 The $component parameter was added for parity with PHP's parse_url().
251
- *
252
- * @param (string) $url The URL to parse.
253
- * @param (int) $component The specific component to retrieve. Use one of the PHP
254
- * predefined constants to specify which one.
255
- * Defaults to -1 (= return all parts as an array).
256
- * @see http://php.net/manual/en/function.parse-url.php
257
- *
258
- * @return (mixed) False on parse failure; Array of URL components on success;
259
- * When a specific component has been requested: null if the component
260
- * doesn't exist in the given URL; a sting or - in the case of
261
- * PHP_URL_PORT - integer when it does. See parse_url()'s return values.
262
- */
263
- function wp_parse_url( $url, $component = -1 ) {
264
- $to_unset = array();
265
- $url = strval( $url );
266
-
267
- if ( '//' === substr( $url, 0, 2 ) ) {
268
- $to_unset[] = 'scheme';
269
- $url = 'placeholder:' . $url;
270
- } elseif ( '/' === substr( $url, 0, 1 ) ) {
271
- $to_unset[] = 'scheme';
272
- $to_unset[] = 'host';
273
- $url = 'placeholder://placeholder' . $url;
274
- }
275
-
276
- $parts = @parse_url( $url );
277
-
278
- if ( false === $parts ) {
279
- // Parsing failure.
280
- return $parts;
281
- }
282
-
283
- // Remove the placeholder values.
284
- if ( $to_unset ) {
285
- foreach ( $to_unset as $key ) {
286
- unset( $parts[ $key ] );
287
- }
288
- }
289
-
290
- return _get_component_from_parsed_url_array( $parts, $component );
291
- }
292
- endif;
293
-
294
- if ( ! function_exists( '_get_component_from_parsed_url_array' ) ) :
295
- /**
296
- * Retrieve a specific component from a parsed URL array.
297
- *
298
- * @since 1.6.9
299
- * @since WP 4.7.0
300
- *
301
- * @param (array|false) $url_parts The parsed URL. Can be false if the URL failed to parse.
302
- * @param (int) $component The specific component to retrieve. Use one of the PHP
303
- * predefined constants to specify which one.
304
- * Defaults to -1 (= return all parts as an array).
305
- * @see http://php.net/manual/en/function.parse-url.php
306
- *
307
- * @return (mixed) False on parse failure; Array of URL components on success;
308
- * When a specific component has been requested: null if the component
309
- * doesn't exist in the given URL; a sting or - in the case of
310
- * PHP_URL_PORT - integer when it does. See parse_url()'s return values.
311
- */
312
- function _get_component_from_parsed_url_array( $url_parts, $component = -1 ) {
313
- if ( -1 === $component ) {
314
- return $url_parts;
315
- }
316
-
317
- $key = _wp_translate_php_url_constant_to_key( $component );
318
-
319
- if ( false !== $key && is_array( $url_parts ) && isset( $url_parts[ $key ] ) ) {
320
- return $url_parts[ $key ];
321
- } else {
322
- return null;
323
- }
324
- }
325
- endif;
326
-
327
- if ( ! function_exists( '_wp_translate_php_url_constant_to_key' ) ) :
328
- /**
329
- * Translate a PHP_URL_* constant to the named array keys PHP uses.
330
- *
331
- * @since 1.6.9
332
- * @since WP 4.7.0
333
- * @see http://php.net/manual/en/url.constants.php
334
- *
335
- * @param (int) $constant PHP_URL_* constant.
336
- *
337
- * @return (string|bool) The named key or false.
338
- */
339
- function _wp_translate_php_url_constant_to_key( $constant ) {
340
- $translation = array(
341
- PHP_URL_SCHEME => 'scheme',
342
- PHP_URL_HOST => 'host',
343
- PHP_URL_PORT => 'port',
344
- PHP_URL_USER => 'user',
345
- PHP_URL_PASS => 'pass',
346
- PHP_URL_PATH => 'path',
347
- PHP_URL_QUERY => 'query',
348
- PHP_URL_FRAGMENT => 'fragment',
349
- );
350
-
351
- if ( isset( $translation[ $constant ] ) ) {
352
- return $translation[ $constant ];
353
- } else {
354
- return false;
355
- }
356
- }
357
- endif;
358
-
359
- if ( ! function_exists( 'wp_get_additional_image_sizes' ) ) :
360
- /**
361
- * Retrieve additional image sizes.
362
- *
363
- * @since 1.6.10
364
- * @since WP 4.7.0
365
- *
366
- * @global array $_wp_additional_image_sizes
367
- *
368
- * @return array Additional images size data.
369
- */
370
- function wp_get_additional_image_sizes() {
371
- global $_wp_additional_image_sizes;
372
- if ( ! $_wp_additional_image_sizes ) {
373
- $_wp_additional_image_sizes = array(); // WPCS: override ok.
374
- }
375
- return $_wp_additional_image_sizes;
376
- }
377
- endif;
378
-
379
- if ( ! function_exists( 'wp_scripts' ) ) :
380
- /**
381
- * Initialize $wp_scripts if it has not been set.
382
- *
383
- * @global WP_Scripts $wp_scripts
384
- *
385
- * @since 1.6.11
386
- * @since WP 4.2.0
387
- *
388
- * @return WP_Scripts WP_Scripts instance.
389
- */
390
- function wp_scripts() {
391
- global $wp_scripts;
392
- if ( ! ( $wp_scripts instanceof WP_Scripts ) ) {
393
- $wp_scripts = new WP_Scripts(); // WPCS: override ok.
394
- }
395
- return $wp_scripts;
396
- }
397
- endif;
398
-
399
- if ( ! function_exists( 'wp_doing_ajax' ) ) :
400
- /**
401
- * Determines whether the current request is a WordPress Ajax request.
402
- *
403
- * @since 1.7
404
- * @since WP 4.7.0
405
- *
406
- * @return bool True if it's a WordPress Ajax request, false otherwise.
407
- */
408
- function wp_doing_ajax() {
409
- /**
410
- * Filters whether the current request is a WordPress Ajax request.
411
- *
412
- * @since 1.7
413
- * @since WP 4.7.0
414
- *
415
- * @param bool $wp_doing_ajax Whether the current request is a WordPress Ajax request.
416
- */
417
- return apply_filters( 'wp_doing_ajax', defined( 'DOING_AJAX' ) && DOING_AJAX );
418
- }
419
- endif;
420
-
421
- if ( ! function_exists( '_deprecated_hook' ) ) :
422
- /**
423
- * Marks a deprecated action or filter hook as deprecated and throws a notice.
424
- *
425
- * Use the {@see 'deprecated_hook_run'} action to get the backtrace describing where
426
- * the deprecated hook was called.
427
- *
428
- * Default behavior is to trigger a user error if `WP_DEBUG` is true.
429
- *
430
- * This function is called by the do_action_deprecated() and apply_filters_deprecated()
431
- * functions, and so generally does not need to be called directly.
432
- *
433
- * @since 1.7
434
- * @since WP 4.6.0
435
- * @access private
436
- *
437
- * @param string $hook The hook that was used.
438
- * @param string $version The version of WordPress that deprecated the hook.
439
- * @param string $replacement Optional. The hook that should have been used.
440
- * @param string $message Optional. A message regarding the change.
441
- */
442
- function _deprecated_hook( $hook, $version, $replacement = null, $message = null ) {
443
- /**
444
- * Fires when a deprecated hook is called.
445
- *
446
- * @since 1.7
447
- * @since WP 4.6.0
448
- *
449
- * @param string $hook The hook that was called.
450
- * @param string $replacement The hook that should be used as a replacement.
451
- * @param string $version The version of WordPress that deprecated the argument used.
452
- * @param string $message A message regarding the change.
453
- */
454
- do_action( 'deprecated_hook_run', $hook, $replacement, $version, $message );
455
-
456
- /**
457
- * Filters whether to trigger deprecated hook errors.
458
- *
459
- * @since 1.7
460
- * @since WP 4.6.0
461
- *
462
- * @param bool $trigger Whether to trigger deprecated hook errors. Requires
463
- * `WP_DEBUG` to be defined true.
464
- */
465
- if ( WP_DEBUG && apply_filters( 'deprecated_hook_trigger_error', true ) ) {
466
- $message = empty( $message ) ? '' : ' ' . $message;
467
- if ( ! is_null( $replacement ) ) {
468
- /* translators: 1: WordPress hook name, 2: version number, 3: alternative hook name */
469
- trigger_error( sprintf( __( '%1$s is <strong>deprecated</strong> since version %2$s! Use %3$s instead.', 'imagify' ), $hook, $version, $replacement ) . $message );
470
- } else {
471
- /* translators: 1: WordPress hook name, 2: version number */
472
- trigger_error( sprintf( __( '%1$s is <strong>deprecated</strong> since version %2$s with no alternative available.', 'imagify' ), $hook, $version ) . $message );
473
- }
474
- }
475
- }
476
- endif;
477
-
478
- if ( ! function_exists( 'do_action_deprecated' ) ) :
479
- /**
480
- * Fires functions attached to a deprecated action hook.
481
- *
482
- * When an action hook is deprecated, the do_action() call is replaced with
483
- * do_action_deprecated(), which triggers a deprecation notice and then fires
484
- * the original hook.
485
- *
486
- * @since 1.9
487
- * @since WP 4.6.0
488
- *
489
- * @see _deprecated_hook()
490
- *
491
- * @param string $tag The name of the action hook.
492
- * @param array $args Array of additional function arguments to be passed to do_action().
493
- * @param string $version The version of WordPress that deprecated the hook.
494
- * @param string $replacement Optional. The hook that should have been used.
495
- * @param string $message Optional. A message regarding the change.
496
- */
497
- function do_action_deprecated( $tag, $args, $version, $replacement = false, $message = null ) {
498
- if ( ! has_action( $tag ) ) {
499
- return;
500
- }
501
-
502
- _deprecated_hook( $tag, $version, $replacement, $message );
503
-
504
- do_action_ref_array( $tag, $args );
505
- }
506
- endif;
507
-
508
- if ( ! function_exists( 'apply_filters_deprecated' ) ) :
509
- /**
510
- * Fires functions attached to a deprecated filter hook.
511
- *
512
- * When a filter hook is deprecated, the apply_filters() call is replaced with
513
- * apply_filters_deprecated(), which triggers a deprecation notice and then fires
514
- * the original filter hook.
515
- *
516
- * Note: the value and extra arguments passed to the original apply_filters() call
517
- * must be passed here to `$args` as an array. For example:
518
- *
519
- * // Old filter.
520
- * return apply_filters( 'wpdocs_filter', $value, $extra_arg );
521
- *
522
- * // Deprecated.
523
- * return apply_filters_deprecated( 'wpdocs_filter', array( $value, $extra_arg ), '4.9', 'wpdocs_new_filter' );
524
- *
525
- * @since 1.7
526
- * @since WP 4.6.0
527
- *
528
- * @see _deprecated_hook()
529
- *
530
- * @param string $tag The name of the filter hook.
531
- * @param array $args Array of additional function arguments to be passed to apply_filters().
532
- * @param string $version The version of WordPress that deprecated the hook.
533
- * @param string $replacement Optional. The hook that should have been used. Default false.
534
- * @param string $message Optional. A message regarding the change. Default null.
535
- */
536
- function apply_filters_deprecated( $tag, $args, $version, $replacement = false, $message = null ) {
537
- if ( ! has_filter( $tag ) ) {
538
- return $args[0];
539
- }
540
-
541
- _deprecated_hook( $tag, $version, $replacement, $message );
542
-
543
- return apply_filters_ref_array( $tag, $args );
544
- }
545
- endif;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
inc/functions/i18n.php CHANGED
@@ -106,8 +106,8 @@ function get_imagify_localize_script_translations( $context ) {
106
  'overQuotaTitle' => __( 'You have used all your credits!', 'imagify' ),
107
  'processing' => __( 'Imagify is still processing. Are you sure you want to leave this page?', 'imagify' ),
108
  'nothingToDoTitle' => __( 'Hold on!', 'imagify' ),
109
- 'nothingToDoText' => __( 'All your optimized images already have a webp version. Congratulations!', 'imagify' ),
110
- 'nothingToDoNoBackupText' => __( 'Because the selected images did not have a backup copy, Imagify was unable to create webp versions.', 'imagify' ),
111
  'error' => __( 'Error', 'imagify' ),
112
  'ajaxErrorText' => __( 'The operation failed.', 'imagify' ),
113
  'getUnoptimizedImagesErrorTitle' => __( 'Oops, There is something wrong!', 'imagify' ),
@@ -116,7 +116,7 @@ function get_imagify_localize_script_translations( $context ) {
116
  ];
117
 
118
  /**
119
- * Filter the number of parallel queries generating webp images by bulk method.
120
  *
121
  * @since 1.9
122
  * @author Grégory Viguier
@@ -131,11 +131,14 @@ function get_imagify_localize_script_translations( $context ) {
131
 
132
  case 'pricing-modal':
133
  $translations = [
 
134
  'labels' => [
135
  'errorCouponAPI' => __( 'Error with checking this coupon.', 'imagify' ),
136
  /* translators: 1 is a percentage, 2 is a coupon code. */
137
  'successCouponAPI' => sprintf( _x( '%1$s off with %2$s', 'coupon validated', 'imagify' ), '<span class="imagify-coupon-offer"></span>', '<strong class="imagify-coupon-word"></strong>' ),
138
  'errorPriceAPI' => __( 'Something went wrong with getting our updated offers. Please retry later.', 'imagify' ),
 
 
139
  ],
140
  ];
141
 
@@ -253,7 +256,7 @@ function get_imagify_localize_script_translations( $context ) {
253
  'nothingToDoTitle' => __( 'Hold on!', 'imagify' ),
254
  'nothingToDoText' => [
255
  'optimize' => __( 'All your media files have been optimized by Imagify. Congratulations!', 'imagify' ),
256
- 'generate_webp' => __( 'All your optimized images already have a webp version. Congratulations!', 'imagify' ),
257
  ],
258
  'optimizing' => __( 'Optimizing', 'imagify' ),
259
  'error' => __( 'Error', 'imagify' ),
106
  'overQuotaTitle' => __( 'You have used all your credits!', 'imagify' ),
107
  'processing' => __( 'Imagify is still processing. Are you sure you want to leave this page?', 'imagify' ),
108
  'nothingToDoTitle' => __( 'Hold on!', 'imagify' ),
109
+ 'nothingToDoText' => __( 'All your optimized images already have a WebP version. Congratulations!', 'imagify' ),
110
+ 'nothingToDoNoBackupText' => __( 'Because the selected images did not have a backup copy, Imagify was unable to create WebP versions.', 'imagify' ),
111
  'error' => __( 'Error', 'imagify' ),
112
  'ajaxErrorText' => __( 'The operation failed.', 'imagify' ),
113
  'getUnoptimizedImagesErrorTitle' => __( 'Oops, There is something wrong!', 'imagify' ),
116
  ];
117
 
118
  /**
119
+ * Filter the number of parallel queries generating WebP images by bulk method.
120
  *
121
  * @since 1.9
122
  * @author Grégory Viguier
131
 
132
  case 'pricing-modal':
133
  $translations = [
134
+ 'imagify_app_domain' => IMAGIFY_APP_DOMAIN,
135
  'labels' => [
136
  'errorCouponAPI' => __( 'Error with checking this coupon.', 'imagify' ),
137
  /* translators: 1 is a percentage, 2 is a coupon code. */
138
  'successCouponAPI' => sprintf( _x( '%1$s off with %2$s', 'coupon validated', 'imagify' ), '<span class="imagify-coupon-offer"></span>', '<strong class="imagify-coupon-word"></strong>' ),
139
  'errorPriceAPI' => __( 'Something went wrong with getting our updated offers. Please retry later.', 'imagify' ),
140
+ 'defaultCouponLabel' => __( 'If you have a <strong>coupon code</strong><br> use it here:', 'imagify' ),
141
+ 'errorCouponPlan' => __( 'This coupon is not valid with this plan.', 'imagify' ),
142
  ],
143
  ];
144
 
256
  'nothingToDoTitle' => __( 'Hold on!', 'imagify' ),
257
  'nothingToDoText' => [
258
  'optimize' => __( 'All your media files have been optimized by Imagify. Congratulations!', 'imagify' ),
259
+ 'generate_webp' => __( 'All your optimized images already have a WebP version. Congratulations!', 'imagify' ),
260
  ],
261
  'optimizing' => __( 'Optimizing', 'imagify' ),
262
  'error' => __( 'Error', 'imagify' ),
readme.txt CHANGED
@@ -1,89 +1,101 @@
1
- === Imagify – Optimize your Images & Convert WebP ===
2
- Contributors: wp_media
3
- Tags: convert webp, webp, optimize images, optimize, images
4
- Requires at least: 4.0.0
5
- Tested up to: 5.6.1
6
- Stable tag: 1.9.14
7
 
8
- Optimize images in one click: reduce image file sizes, convert WebP, keep your images beautiful… and boost your loading time and your SEO!
9
 
10
  == Description ==
11
 
12
- Optimize images in one click: get lighter images without losing quality, convert WebP and speed up your website!
13
 
14
- Imagify is the most advanced tool to optimize images. You can now use this power directly in WordPress.
15
 
16
- After enabling it, all your images including thumbnails will be automatically optimized when uploaded into WordPress. You can also use Imagify to convert WebP images, which will additionally reduce the size of your website making it faster.
17
 
18
- WooCommerce and NextGen Gallery compatible.
19
 
20
- = Why is it Important to Optimize Images? =
21
 
22
- A fast site is important primarily for visitors who may leave a website that is too slow, but also for SEO performance since search engines consider website speed as a ranking factor.
23
 
24
- Website size is one of the most important factors that affect the website performance: images can account for 50% of your loading time.
25
 
26
- By optimizing images you will quickly gain precious seconds and make your website faster.
27
 
28
- Learn more about image compression, check that: [https://imagify.io/images-compression](https://imagify.io/images-compression).
29
 
30
- = Why use Imagify to optimize images? =
31
 
32
- Imagify can optimize all images: jpgs, pngs, pdfs and gifs (whether animated or not).
33
 
34
- You already have lots of unoptimized images? Not a problem, you will love the Bulk Optimizer to optimize all your existing images in one click.
35
 
36
- Imagify can directly resize your images, **you won't have to lose time anymore on resizing your images before uploading them**.
37
 
38
- There are three optimization levels available - Normal, Aggressive and Ultra.
39
 
40
- - Normal, a lossless compression algorithm. The image quality won't be altered at all.
41
- - Aggressive, a lossy compression algorithm. Stronger compression with a tiny loss of quality most of the time this is not even noticeable at all.
42
- - Ultra, our strongest compression method using a lossy algorithm.
43
 
44
- With the backup option, you can change your mind whenever you want by restoring your images to their original version or optimize them to another compression level.
45
 
46
- = HOW ABOUT WEBP IMAGES? =
47
- Now, for each image you optimize with the Imagify plugin, you will also get its **WebP version** (if you tick the option in the settings); in your Media library, this will result in the following image versions:
48
- - full-sized optimized image,
49
- - full-sized WebP image,
50
- - optimized thumbnails,
51
- - WebP thumbnails.
52
 
53
- The optimization will also work for images included in your themes and plugins.
54
 
55
- If you want, Imagify can also display WebP images on your front-end in two ways:
56
- - `<picture>` tag,
57
- - rewrite rules in the .htaccess file.
58
 
59
- If you kept a backup copy of the original images, you have the possibility to **create their WebP version separately** (one by one or via the bulk optimization).
60
 
61
- = What our users think of Imagify? =
 
 
 
 
 
 
62
 
63
  > "Imagify is an awesome tool that is powerful & easy to use. It's fast, rivals and surpasses other established plugins/software. Awesome!" — [Simon Harper](https://twitter.com/SRHDesign/status/663758140505235456)
64
  >
 
65
  > "If you want to "squeeze" your images as much as possible and "trim out" your website on the highest professional level... Imagify" — [Ivica Delic](https://twitter.com/Free_LanceTools/status/685503950909476865)
66
  >
 
67
  > "Clearly Imagify is the most awesome WordPress plugin to compress images on your website! A must try" — [Eric Walter](https://twitter.com/EricWaltR/status/679053496382038016)
68
  >
69
 
70
  = Is Imagify Free? =
71
 
72
- You can optimize for free 20MB of images (about 200 images) every month. You can convert WebP for free.
 
 
 
 
73
 
74
- Need more? Have a look at our plans: [https://imagify.io/pricing](https://imagify.io/pricing)
75
 
76
- = What's next? =
77
 
78
- Have a look at our upcoming features by following our development roadmap: [https://trello.com/b/3Q8ZnSN6/imagify-roadmap](https://trello.com/b/3Q8ZnSN6/imagify-roadmap)
79
 
80
- = Who we are? =
81
 
82
- We are [WP Media](https://wp-media.me/), the startup behind WP Rocket the best caching plugin for WordPress.
 
 
 
 
 
 
 
 
 
 
83
 
84
  Our mission is to improve the web, we are making it faster with [WP Rocket](https://wp-rocket.me/) and lighter with Imagify.
85
 
86
- = Get in touch! =
87
 
88
  * Website: [Imagify.io](https://imagify.io)
89
  * Contact Us: [https://imagify.io/contact](https://imagify.io/contact)
@@ -91,7 +103,7 @@ Our mission is to improve the web, we are making it faster with [WP Rocket](http
91
 
92
  = Related Plugins =
93
  * [WP Rocket](https://wp-rocket.me/): Best caching plugin to speed-up your WordPress website.
94
- * [Lazy Load](https://wordpress.org/plugins/rocket-lazy-load/): Best Lazy Load script to reduce the number of HTTP requests and improves the websites loading time.
95
 
96
  License: GPLv2 or later
97
  License URI: http://www.gnu.org/licenses/gpl-2.0.html
@@ -111,33 +123,66 @@ License URI: http://www.gnu.org/licenses/gpl-2.0.html
111
 
112
  == Frequently Asked Questions ==
113
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
114
  = Which formats can be optimized? =
115
 
116
- Imagify can optimize JPG, PNG, PDF and GIFs (whether animated or not).
 
 
117
 
118
- =How should I know which compression level is best for me?=
119
 
120
- There are three compression levels available - Normal, Aggressive and Ultra.
121
 
122
- Normal compression is a "lossless" optimization. This means there is no loss of image quality.
123
 
124
- Aggressive and Ultra compression are more powerful, so the picture quality will be somewhat reduced. The weight of the image will be much less.
125
 
126
- We recommend Aggressive as the best balanced level that reduces the size but does not affect the quality.
127
 
128
- It would be best, however, to test the 3 levels of compression on a smaller amount of images and see how it affects the quality of your image. Once you see which one suits your needs, you can easily run the others via Bulk optimization or Media Library page.
129
 
130
  =How does the optimization process work?=
131
 
132
- The image optimization process is performed on our servers. Once done, Imagify returns the optimized image to your server. We do not edit images’ title or any other information, so there is nothing further to be done on your end. Your original images will be moved to a dedicated backup folder (just make sure to keep the Backup option active in Imagify settings).
133
 
134
  =How long are images stored by Imagify?=
135
 
136
- Once your images have been optimized via the WP plugin, they stay on your end forever (even if you delete the Imagify account).
137
 
138
- During the optimization process, images sent via the API or WordPress plugin are stored for one hour on our server (they are already sent back to your site and stay there safely).
139
 
140
- Using the online application, images are stored for 24 hours (with a free account) and for unlimited time if you have a paid subscription.
141
 
142
  =Can I restore images after compression?=
143
 
@@ -149,11 +194,11 @@ Yes, your images will stay compressed even after removing Imagify (and even afte
149
 
150
  =If I use Imagify, do I need to continue optimizing and resizing my images with Photoshop?=
151
 
152
- Do not waste your time resizing and optimizing your images in Photoshop. Imagify takes care of everything!
153
 
154
  =Is the EXIF data of images removed?=
155
 
156
- By default EXIF data is removed. It is possible to keep it with the WordPress plugin by enabling the option in Imagify Settings page.
157
 
158
  =I used Kraken, Optimus, EWWW or WP Smush, will Imagify further optimize my images?=
159
 
@@ -161,43 +206,43 @@ Absolutely. Most of the time, Imagify will still be able to optimize your images
161
 
162
  = Will the original images be deleted? =
163
 
164
- No. Imagify automatically replaces the images with an optimized image. The backup option allows you to keep the original images and restore them with one click.
165
 
166
  = Is it possible to re-optimize images with a different level? =
167
 
168
- Yes. By activating the backup option in the plugin, you can re-optimize each image with a different compression level.
169
 
170
  = What happens when the plugin is disabled? =
171
 
172
  When the plugin is disabled, your existing images remain optimized. Backups of the original images are still available if you have enabled the images backup option.
173
 
174
- =On which web hosts can the plugin be used?=
175
 
176
  The plugin can be used on all hosts including "managed hosting" providers like WP Engine.
177
 
178
- =Is Imagify compatible with Multi-Site?=
179
 
180
  Yes, Imagify is 100% compatible with multi-site.
181
 
182
- =Can we use Imagify on WordPress.com?=
183
 
184
- It is possible to use Imagify plugin on WordPress.com if you have a Business account.
185
 
186
  =Do you offer support?=
187
 
188
- Yes, the Imagify team offers full email support. You can contact us via [https://imagify.io/contact/](https://imagify.io/contact/).
189
 
190
- When is support available?
191
 
192
- Our support is currently available Monday-Friday 8AM-6PM CET. We answer every email so you can expect the answer from us within 24h max (unless during the weekends).
193
 
194
  =Is registration free?=
195
 
196
- Yes and no credit card is required.
197
 
198
- =Do you offer a trial version?=
199
 
200
- No. However, you get 20MB of quota per month for free.
201
 
202
  == Screenshots ==
203
 
@@ -210,6 +255,18 @@ No. However, you get 20MB of quota per month for free.
210
  4. Other Media Page
211
 
212
  == Changelog ==
 
 
 
 
 
 
 
 
 
 
 
 
213
  = 1.9.14 =
214
  * Fix: cURL not connecting to Imagify API when using PHP 8.
215
  * Fix: Display issue in Chrome on scrollable check groups on Imagify admin page.
@@ -222,9 +279,9 @@ No. However, you get 20MB of quota per month for free.
222
 
223
  = 1.9.11 - 2020/09/09 =
224
  * Fix: Fix settings error on multi-sites with WordPress 5.5
225
- * Fix: Write the correct conf file for use with webp rewrites on nginx
226
  * Improvement: Namespace composer dependencies to avoid possible naming collisions.
227
- * Security: Add blank index.php to imagify-created backup folders to disable public access.
228
 
229
  = 1.9.10 - 2020/05/26 =
230
  * Fix: Correctly optimize thumbnails during auto-optimization of image upload
@@ -236,7 +293,7 @@ No. However, you get 20MB of quota per month for free.
236
  * Fix: php notices that could happen when optimizing.
237
 
238
  = 1.9.8.1 - 2019/11/15 =
239
- * Fix: webp image not showing when using the `<picture>` method and the original `<img/>` does not have a `srcset` attribute.
240
  * Fix: a fatal error with WP Offload Media 2.3.
241
 
242
  = 1.9.8 - 2019/11/11 =
@@ -244,7 +301,7 @@ No. However, you get 20MB of quota per month for free.
244
  * New: among other things, WordPress 5.3 automatically resizes large images on upload, using a predefined threshold value that can be changed only by filter (no setting fields are provided). Imagify’s "Resize larger images" setting field is now used to tweak this threshold.
245
  * Caution: to be able to work on WordPress 5.3, some adjustments have been made to our compatibility with Enable Media Replace and Regenerate Thumbnails. However, these plugins must be updated to work with WordPress 5.3: do not use them until then.
246
  * Improvement: moved the `width` and `height` attributes from the `<picture>` tag to the `<img>` tag to be valid HTML markup.
247
- * Fix: added a missing descriptor in `srcset` attribute when using `<picture>` tags to display webp images. This should also fix an issue with LasyLoad.
248
  * Fix: fixed an issue with the user capacity used for "Other Media" menu item.
249
  * Fix: a php notice `stripos(): Non-string needles will be interpreted as strings in the future.`.
250
 
@@ -254,23 +311,23 @@ No. However, you get 20MB of quota per month for free.
254
  * Fix: display the "Welcome" banner correctly when it is shown on the WP Rocket’s settings page.
255
 
256
  = 1.9.6 - 2019/07/22 =
257
- * Improvement: now images that are "already optimized" can also get webp versions.
258
  * Fix: progress bar height in the admin bar for Chrome and Safari.
259
 
260
  = 1.9.5 - 2019/07/16 =
261
  * Improvement: Basic Authentication support. If it does not work automatically, you can still define the constants `IMAGIFY_AUTH_USER` and `IMAGIFY_AUTH_PASSWORD` in your `wp-config.php` file.
262
- * Improvement: webp images are not created for animated gif images by default anymore. Use the filter `imagify_pre_can_create_webp_version` if you still want to create an unanimated webp version of them.
263
- * Improvement: when creating webp images from the settings page, we made more clear when all the images are missing a backup copy.
264
  * Improvement: clear the 5 minutes data cache when buying quota from the plugin.
265
- * Improvement: when displaying webp images with the `<picture>` tag, allow to use relative URLs (starting with `/`).
266
 
267
  = 1.9.4 - 2019/07/10 =
268
- * Improvement: if a webp image is larger than its non-webp version, it is now possible to not keep it. This can be done by using the filter `imagify_keep_large_webp`.
269
  * Improvement: compatibility with Pressable.
270
  * Improvement: renamed a php class to prevent some hosts to wrongly flag it as "suspicious" and trigger a fatal error.
271
  * Improvement: better compatibility with WP Real Media Library plugin.
272
- * Fix: rewrite rules for webp could not work on some servers.
273
- * Fix: when using `<picture>` tags for webp, some attributes could disappear if they were written on multiple lines.
274
  * Fix: the bulk method would not work in the NextGen Gallery list.
275
  * Fix: php notice `Trying to get property "namespace" for a non object`.
276
 
@@ -278,7 +335,7 @@ No. However, you get 20MB of quota per month for free.
278
  * Fix: conflict with plugins using an ancient version of Composer.
279
 
280
  = 1.9.3 - 2019/06/17 =
281
- * Improvement: better compatibility with CDNs when displaying webp images with `<picture>` tags. There is now a new setting field to fill in the CDN URL in use.
282
  * Improvement: don’t use Heartbeat anymore. This speeds up the optimization process and prevents other plugins to break everything when they remove Heartbeat.
283
  * Fix: a fatal error upon plugin deactivation.
284
  * Fix: an occasional fatal error preventing the optimization process to work.
@@ -291,11 +348,11 @@ No. However, you get 20MB of quota per month for free.
291
  * Fix: don’t display support bubble anymore.
292
 
293
  = 1.9.1 - 2019/05/09 =
294
- * Improvement: prevent "Generating missing webp versions" being stuck at 0% in the settings page by displaying a "done/total" label instead.
295
  * Improvement: improved our "re-registering" of the Heartbeat library, that some plugins may deactivate.
296
 
297
  = 1.9.0 - 2019/05/06 =
298
- * New: webp support. For each image or thumbnail, Imagify can create a webp version of it. But since creating these images without using them does not make really sense, Imagify can also display your webp images on your site. All of this can be enabled in the settings. For the images that are already optimized, you get the possibility to create the webp versions separately (one by one or in the settings page), but only if you kept a backup copy of the original images.
299
  * Improvement: the optimization process has been entirely rebuilt. This new process allows you to optimize as many thumbnail sizes that you want. It also implies that many classes, functions, and hooks have been deprecated.
300
  * Improvement: compatibility with Flywheel.
301
  * Improvement: some error messages are now more accurate.
1
+ === Imagify – Optimize Images & Convert WebP ===
2
+ Contributors: wp_rocket
3
+ Tags: optimize images, convert webp, webp converter, image optimization, compress images, image compressor, resize images, reduce image size, performance, image optimizer, core web vitals, best image optimization plugin
4
+ Tested up to: 6.0
5
+ Stable tag: 1.10
 
6
 
7
+ Compress images & convert WebP with the best WordPress image optimization plugin. Optimize images in 1-click & resize images with our image optimizer!
8
 
9
  == Description ==
10
 
11
+ = The Best Image Optimization Plugin For WordPress =
12
 
13
+ [Imagify](https://imagify.io/) is the most advanced image optimization plugin to help you resize and compress images. You can now use its power directly in WordPress to optimize images and reduce the weight of the photos you want to add to your site – all in just one click and without sacrificing their quality.
14
 
15
+ Imagify is the best WordPress image optimizer. The plugin lets you optimize images in one go with its bulk optimization option. You can resize your images on the fly and, with 3 compression levels to choose from, your images are automatically optimized in the selected compression level. If needed, you can always restore your images to their original versions.
16
 
17
+ On top of optimizing images, you’ll choose the best WebP plugin for WordPress. Imagify also converts your images to WebP, a next-gen format for lighter images that will speed up your WordPress site, improve user experience, and even SEO. Convert WebP will make a difference in images optimization, you’ll see that from yourself.
18
 
19
+ Lastly, it’s easy to use the best image compression plugin for better site performance. Speed up your WordPress site and improve Core Web Vitals thanks to Imagify’s state-of-the-art image optimization process.
20
 
21
+ = Resize and Compress Images Without Losing Quality =
22
 
23
+ Imagify is a great image compressor and the ultimate solution to optimize images. You are able to resize and compress images from the most common image formats as well as PDF format. In case you have many images to optimize, you can also resize images in bulk thanks to our bulk optimization option. In just one click, you will be able to compress multiple images super easily.
24
 
25
+ Many of your high-quality images may be in sizes that are much too large. To reduce image size and compress large images, Imagify has a setting that allows you to choose a maximum width for all of your images, and if you upload images that are larger than that size, it will resize large images for you during optimization. Imagify will resize images proportionally without cropping them.
26
 
27
+ With such a great image optimizer like Imagify, you can choose between two types of image compression: [lossy compression and lossless compression](https://imagify.io/blog/lossless-vs-lossy-image-compression/). The Normal image compression level uses lossless compression, meaning there should be no difference in image quality after image optimization. The Aggressive and Ultra levels both use lossy compression, meaning you could notice some slight differences in image quality, but you will reduce image size even more!
28
 
29
+ When using our image compression tool, Imagify, you will enjoy smaller file sizes and faster loading times. But the best part is that you will optimize images and reduce their weight without losing quality: why should you have to choose between beauty and speed? If you want to compress images, it’s now easier than ever with Imagify!
30
 
31
+ = Convert Images to the WebP Format =
32
 
33
+ Thanks to Imagify, you can take a step further in your image optimization process. You can also convert all your images to next-gen image formats such as WebP. WebP format offers superior image compression and quality and is a way to optimize images and speed up their loading times on websites. To convert images to next-gen format, using the Imagify plugin will save you a precious amount of time.
34
 
35
+ With Imagify, WebP compression and conversion are indeed super easy. Wondering how the convert WebP option works? If the "Create WebP versions of images" option is enabled, the WebP versions of optimized images will be created automatically. Simple as that! Thanks to the best WebP plugin for WordPress, you’ll be able to take advantage of the convert WebP feature in no time.
36
 
37
+ Imagify can also display these WebP images directly on your front-end. But because some browsers don’t support WebP yet, Imagify lets you have both optimized versions of the original format images and the WebP versions ready. Imagify will serve the WebP versions if a visitor's browser supports them and the other optimized format if not.
38
 
39
+ WebP is definitively an excellent replacement for jpeg, png, and gif images. Imagify offers WebP conversion for all image formats: you can convert gif to webP, jpeg to WebP, and even png to WebP. Whatever your favorite image format, let Imagify optimize your images!
 
 
40
 
41
+ = Optimize Images to Make Your Site Faster and Improve Core Web Vitals =
42
 
43
+ Did you know that image optimization and web performance go hand in hand? In fact, when it comes to web page speed, one of the first things you should do is optimize your images. Large and heavy image sizes will indeed slow down your website and provide a bad user experience to your visitors – and that’s why you should compress images. On the contrary, when you optimize images and improve image loading speed, you should see a direct improvement in your website speed and performance. With Imagify, it’s time to say goodbye to images taking too long to load.
 
 
 
 
 
44
 
45
+ Images are one of the largest influencing factors in the Core Web Vitals. Image compression will ensure that your images load faster and improve your overall website performance, including your Core Web Vitals metrics. If you’re looking to improve user experience and speed up your WordPress site, images are a good place to start.
46
 
47
+ Even Google tells you to take care of your images! If you have ever run a performance audit on PageSpeed Insights, you might have seen the [“serve images in next-gen formats”](https://imagify.io/blog/serve-next-gen-formats-wordpress/) opportunity popping up. Another PageSpeed Insights recommendation related to images is to [“efficiently encode images”](https://imagify.io/blog/efficiently-encode-images-wordpress/). When you use Imagify, you will be able to address both recommendations and fix your images for a faster website.
 
 
48
 
49
+ = What Do Our Users Think Of Imagify? =
50
 
51
+ Here’s what our users have to say about us after optimizing their images with Imagify:
52
+
53
+ >"Images are other media are the largest parts on your web pages (most likely). Therefore don't forget to optimise images for the web before adding to your site. For WordPress there are many optimisation plugins available. My favourite is Imagify" — [Mark Wilkinson](https://twitter.com/wpmark/status/1479128422395830273)
54
+ >
55
+
56
+ >”To give your images a slimming treatment, without altering them aesthetically, there is a great plugin on WordPress: Imagify. Simple, efficient and functional, it’s really worth a look.”— [WP Marmite](https://twitter.com/wpmarmite_en/status/1383072818649255937)
57
+ >
58
 
59
  > "Imagify is an awesome tool that is powerful & easy to use. It's fast, rivals and surpasses other established plugins/software. Awesome!" — [Simon Harper](https://twitter.com/SRHDesign/status/663758140505235456)
60
  >
61
+
62
  > "If you want to "squeeze" your images as much as possible and "trim out" your website on the highest professional level... Imagify" — [Ivica Delic](https://twitter.com/Free_LanceTools/status/685503950909476865)
63
  >
64
+
65
  > "Clearly Imagify is the most awesome WordPress plugin to compress images on your website! A must try" — [Eric Walter](https://twitter.com/EricWaltR/status/679053496382038016)
66
  >
67
 
68
  = Is Imagify Free? =
69
 
70
+ You can optimize for free 20MB of images (that’s about 200 images) every month. You can also convert to the next-gen WebP format for free.
71
+
72
+ Need to compress more images? Have a look at our plans: [https://imagify.io/pricing](https://imagify.io/pricing)
73
+
74
+ = Want Image Optimization Tips? =
75
 
76
+ If you want to know more about using WebP images on WordPress, improving your PageSpeed score with Imagify, or compressing multiple images online, take a look at our blog: [https://imagify.io/blog/](https://imagify.io/blog/)
77
 
78
+ It’s packed with advice on image compression and so much more!
79
 
80
+ *[How to Convert Images to WebP on WordPress with Imagify](https://imagify.io/blog/how-to-convert-images-to-webp/)
81
 
82
+ *[How to Optimize Images on WordPress for Performance and SEO](https://imagify.io/blog/image-optimization-manual-for-wordpress/)
83
 
84
+ *[How to Reduce Image Size Without Losing Quality (and Save Space)](https://imagify.io/blog/reduce-image-size-without-losing-quality/)
85
+
86
+ *[How to Resize and Compress Multiple Images Online (Easy Methods)](https://imagify.io/blog/how-to-resize-compress-multiple-images-online/)
87
+
88
+ *[How to Make Photos Load Faster on WordPress: 6 Key Tactics](https://imagify.io/blog/how-to-make-photos-load-faster-wordpress/)
89
+
90
+ *[How to Optimize Images for Page Speed (and Google)](https://imagify.io/blog/optimize-images-page-speed-google/)
91
+
92
+ = Who Are We? =
93
+
94
+ We are [WP Media](https://wp-media.me/), the company behind WP Rocket, the best caching plugin for WordPress.
95
 
96
  Our mission is to improve the web, we are making it faster with [WP Rocket](https://wp-rocket.me/) and lighter with Imagify.
97
 
98
+ = Get In Touch! =
99
 
100
  * Website: [Imagify.io](https://imagify.io)
101
  * Contact Us: [https://imagify.io/contact](https://imagify.io/contact)
103
 
104
  = Related Plugins =
105
  * [WP Rocket](https://wp-rocket.me/): Best caching plugin to speed-up your WordPress website.
106
+ * [Lazy Load](https://wordpress.org/plugins/rocket-lazy-load/): Best Lazy Load script to reduce the number of HTTP requests and improves the website's loading time.
107
 
108
  License: GPLv2 or later
109
  License URI: http://www.gnu.org/licenses/gpl-2.0.html
123
 
124
  == Frequently Asked Questions ==
125
 
126
+ = How can I measure the impact of Imagify on speed score? =
127
+
128
+ You can use GTMetrix and Google PageSpeed Insights to check the relevant suggestions. It is recommended to test the following metrics before and after the image optimization:
129
+
130
+ * Total Page Size (GTMetrix)
131
+ * Optimize images (GTMetrix)
132
+ * Serve images in next-gen formats (PageSpeed Insights)
133
+ * Efficiently encode images (PageSpeed Insights)
134
+
135
+ = What makes Imagify better than other image optimizer tools? =
136
+
137
+ Imagify is an extremely powerful image optimizer: our advanced compressing algorithm will compress images, reduce their weight without sacrificing their quality.
138
+
139
+ Imagify is also super easy to use. Thanks to its intuitive design, you can easily get familiar with the interface and services without thinking about it.
140
+
141
+ And our dedicated customer support will help you fix any issue with your image optimizing process. Support is available via contact form, either on our website, or directly on your Imagify plugin settings page.
142
+
143
+ = How many websites can I optimize with Imagify? =
144
+
145
+ You can use Imagify on as many websites as you wish. Your image optimization quota to compress images will be shared evenly across all of the websites.
146
+
147
+ If you need more control over how your Imagify subscription is used, you should create sub-accounts to allocate a quota for each.
148
+
149
+ = How does the WebP feature work on non-supported browsers? =
150
+
151
+ Imagify will deliver images in the original format for browsers that don’t support the next-gen WebP format automatically, so there is nothing further to be done.
152
+
153
+ = Is Imagify compatible with NextGEN? =
154
+
155
+ Yes, Imagify is fully compatible with NextGEN Gallery, the most popular photo gallery plugin for WordPress. All Imagify optimization features related to NextGEN Gallery images are located and usable within the NextGEN Gallery menus and pages. So when you add images to your NextGEN galleries, you’ll be able to optimize them as well.
156
+
157
  = Which formats can be optimized? =
158
 
159
+ Imagify can optimize JPG, PNG, PDF files and GIFs (whether animated or not).
160
+
161
+ When you optimize JPG, PNG, and GIF files, Imagify will also create WebP versions of your original images and all your thumbnail sizes (if you have this option enabled).
162
 
163
+ = How should I know which image compression level is best for me? =
164
 
165
+ There are three image compression levels available - Normal, Aggressive and Ultra.
166
 
167
+ Normal compression is a "lossless" image optimization. This means there is no loss of image quality after compression.
168
 
169
+ Aggressive and Ultra compression are more powerful, so the picture quality will be somewhat reduced. The weight of the compressed image will be much less.
170
 
171
+ We recommend Aggressive as the best balanced level that reduces the size of the image but does not affect the quality.
172
 
173
+ It would be best, however, to test the 3 levels of compression on a smaller amount of images and see how it affects the quality of your image. Once you see which compression level suits your needs, you can easily run the others via Bulk optimization or Media Library page.
174
 
175
  =How does the optimization process work?=
176
 
177
+ The image optimization process is performed on our servers. Once done, Imagify returns the optimized image to your server. We do not edit images’ titles or any other information, so there is nothing further to be done on your end than to compress images. Your original images will be moved to a dedicated backup folder (just make sure to keep the Backup option active in Imagify settings).
178
 
179
  =How long are images stored by Imagify?=
180
 
181
+ Once your images have been optimized via the WP plugin, compressed images stay on your end forever (even if you delete the Imagify account).
182
 
183
+ During the optimization process, compressed images sent via the API or WordPress plugin are stored for one hour on our server (they are already sent back to your site and stay there safely).
184
 
185
+ Using the online application, compressed images are stored for 24 hours (with a free account) and for unlimited time if you have a paid subscription.
186
 
187
  =Can I restore images after compression?=
188
 
194
 
195
  =If I use Imagify, do I need to continue optimizing and resizing my images with Photoshop?=
196
 
197
+ Do not waste your time resizing and optimizing your images in Photoshop. Imagify takes care of everything to compress your images!
198
 
199
  =Is the EXIF data of images removed?=
200
 
201
+ By default EXIF data is removed. It is possible to keep it with the WordPress plugin by enabling the option in the Imagify Settings page.
202
 
203
  =I used Kraken, Optimus, EWWW or WP Smush, will Imagify further optimize my images?=
204
 
206
 
207
  = Will the original images be deleted? =
208
 
209
+ No. Imagify automatically replaces the original images with an optimized image. The backup option allows you to keep the original images and restore them with one click.
210
 
211
  = Is it possible to re-optimize images with a different level? =
212
 
213
+ Yes. By activating the backup option in the plugin, you can re-optimize each compressed image with a different image compression level.
214
 
215
  = What happens when the plugin is disabled? =
216
 
217
  When the plugin is disabled, your existing images remain optimized. Backups of the original images are still available if you have enabled the images backup option.
218
 
219
+ = On which web hosts can the plugin be used? =
220
 
221
  The plugin can be used on all hosts including "managed hosting" providers like WP Engine.
222
 
223
+ = Is Imagify compatible with Multi-Site? =
224
 
225
  Yes, Imagify is 100% compatible with multi-site.
226
 
227
+ = Can we use Imagify on WordPress.com? =
228
 
229
+ It is possible to use the Imagify plugin on WordPress.com if you have a Business account.
230
 
231
  =Do you offer support?=
232
 
233
+ Yes, the Imagify team offers full email support for image optimization questions. You can contact us via [https://imagify.io/contact/](https://imagify.io/contact/).
234
 
235
+ = When is support available? =
236
 
237
+ Our support is currently available Monday-Friday 8AM-10PM CET. We answer every email so you can expect the answer from us within 24h max (unless during the weekends).
238
 
239
  =Is registration free?=
240
 
241
+ Yes, and no credit card is required.
242
 
243
+ = Do you offer a trial version? =
244
 
245
+ No. However, you get 20MB of quota per month for free to optimize your images (around 200 images).
246
 
247
  == Screenshots ==
248
 
255
  4. Other Media Page
256
 
257
  == Changelog ==
258
+ = 1.10 - 2021/07/15 =
259
+ * The plugin minimum compatible versions are now PHP 7.0 and WordPress 5.3
260
+ * Enhancement: Correctly display WordPress cover blocks when WebP and picture tag replacement is enabled (#546)
261
+ * Enhancement: Update our jQuery code to be compatible with the new jQuery version included in WordPress (#545)
262
+ * 3rd party compatibility: Correctly display WooCommerce variable products images when WebP and picture tag replacement is enabled (#495)
263
+ * Bugfix: Prevent nested picture tags when picture tag replacement is enabled (#537)
264
+ * Bugfix: Prevent a fatal error related to get_current_screen() in some cases (#567)
265
+ * Bugfix: Fixes some display issues related to the promotions in the checkout process (#556, #557)
266
+ * Bugfix: Fixes some display issues on the settings & bulk optimization pages on mobile (#566)
267
+ * Bugfix: Prevent PHP warning in some cases on the bulk optimization process (#565)
268
+ * Bugfix: Prevent PHP notice in somes cases for the $images_count variable (#573)
269
+
270
  = 1.9.14 =
271
  * Fix: cURL not connecting to Imagify API when using PHP 8.
272
  * Fix: Display issue in Chrome on scrollable check groups on Imagify admin page.
279
 
280
  = 1.9.11 - 2020/09/09 =
281
  * Fix: Fix settings error on multi-sites with WordPress 5.5
282
+ * Fix: Write the correct conf file for use with WebP rewrites on nginx
283
  * Improvement: Namespace composer dependencies to avoid possible naming collisions.
284
+ * Security: Add blank index.php to imagify-created backup folders to disable public access.
285
 
286
  = 1.9.10 - 2020/05/26 =
287
  * Fix: Correctly optimize thumbnails during auto-optimization of image upload
293
  * Fix: php notices that could happen when optimizing.
294
 
295
  = 1.9.8.1 - 2019/11/15 =
296
+ * Fix: WebP image not showing when using the `<picture>` method and the original `<img/>` does not have a `srcset` attribute.
297
  * Fix: a fatal error with WP Offload Media 2.3.
298
 
299
  = 1.9.8 - 2019/11/11 =
301
  * New: among other things, WordPress 5.3 automatically resizes large images on upload, using a predefined threshold value that can be changed only by filter (no setting fields are provided). Imagify’s "Resize larger images" setting field is now used to tweak this threshold.
302
  * Caution: to be able to work on WordPress 5.3, some adjustments have been made to our compatibility with Enable Media Replace and Regenerate Thumbnails. However, these plugins must be updated to work with WordPress 5.3: do not use them until then.
303
  * Improvement: moved the `width` and `height` attributes from the `<picture>` tag to the `<img>` tag to be valid HTML markup.
304
+ * Fix: added a missing descriptor in `srcset` attribute when using `<picture>` tags to display WebP images. This should also fix an issue with LasyLoad.
305
  * Fix: fixed an issue with the user capacity used for "Other Media" menu item.
306
  * Fix: a php notice `stripos(): Non-string needles will be interpreted as strings in the future.`.
307
 
311
  * Fix: display the "Welcome" banner correctly when it is shown on the WP Rocket’s settings page.
312
 
313
  = 1.9.6 - 2019/07/22 =
314
+ * Improvement: now images that are "already optimized" can also get WebP versions.
315
  * Fix: progress bar height in the admin bar for Chrome and Safari.
316
 
317
  = 1.9.5 - 2019/07/16 =
318
  * Improvement: Basic Authentication support. If it does not work automatically, you can still define the constants `IMAGIFY_AUTH_USER` and `IMAGIFY_AUTH_PASSWORD` in your `wp-config.php` file.
319
+ * Improvement: WebP images are not created for animated gif images by default anymore. Use the filter `imagify_pre_can_create_webp_version` if you still want to create an unanimated WebP version of them.
320
+ * Improvement: when creating WebP images from the settings page, we made more clear when all the images are missing a backup copy.
321
  * Improvement: clear the 5 minutes data cache when buying quota from the plugin.
322
+ * Improvement: when displaying WebP images with the `<picture>` tag, allow to use relative URLs (starting with `/`).
323
 
324
  = 1.9.4 - 2019/07/10 =
325
+ * Improvement: if a WebP image is larger than its non-webp version, it is now possible to not keep it. This can be done by using the filter `imagify_keep_large_webp`.
326
  * Improvement: compatibility with Pressable.
327
  * Improvement: renamed a php class to prevent some hosts to wrongly flag it as "suspicious" and trigger a fatal error.
328
  * Improvement: better compatibility with WP Real Media Library plugin.
329
+ * Fix: rewrite rules for WebP could not work on some servers.
330
+ * Fix: when using `<picture>` tags for WebP, some attributes could disappear if they were written on multiple lines.
331
  * Fix: the bulk method would not work in the NextGen Gallery list.
332
  * Fix: php notice `Trying to get property "namespace" for a non object`.
333
 
335
  * Fix: conflict with plugins using an ancient version of Composer.
336
 
337
  = 1.9.3 - 2019/06/17 =
338
+ * Improvement: better compatibility with CDNs when displaying WebP images with `<picture>` tags. There is now a new setting field to fill in the CDN URL in use.
339
  * Improvement: don’t use Heartbeat anymore. This speeds up the optimization process and prevents other plugins to break everything when they remove Heartbeat.
340
  * Fix: a fatal error upon plugin deactivation.
341
  * Fix: an occasional fatal error preventing the optimization process to work.
348
  * Fix: don’t display support bubble anymore.
349
 
350
  = 1.9.1 - 2019/05/09 =
351
+ * Improvement: prevent "Generating missing WebP versions" being stuck at 0% in the settings page by displaying a "done/total" label instead.
352
  * Improvement: improved our "re-registering" of the Heartbeat library, that some plugins may deactivate.
353
 
354
  = 1.9.0 - 2019/05/06 =
355
+ * New: WebP support. For each image or thumbnail, Imagify can create a WebP version of it. But since creating these images without using them does not make really sense, Imagify can also display your WebP images on your site. All of this can be enabled in the settings. For the images that are already optimized, you get the possibility to create the WebP versions separately (one by one or in the settings page), but only if you kept a backup copy of the original images.
356
  * Improvement: the optimization process has been entirely rebuilt. This new process allows you to optimize as many thumbnail sizes that you want. It also implies that many classes, functions, and hooks have been deprecated.
357
  * Improvement: compatibility with Flywheel.
358
  * Improvement: some error messages are now more accurate.
vendor/autoload.php CHANGED
@@ -4,4 +4,4 @@
4
 
5
  require_once __DIR__ . '/composer/autoload_real.php';
6
 
7
- return ComposerAutoloaderInitee5f379dcd1f5ddc8ae5536c97dc2605::getLoader();
4
 
5
  require_once __DIR__ . '/composer/autoload_real.php';
6
 
7
+ return ComposerAutoloaderInit27c2f21fb0be1f8c2ef63f80977ab942::getLoader();
vendor/composer/autoload_classmap.php CHANGED
@@ -6,175 +6,7 @@ $vendorDir = dirname(dirname(__FILE__));
6
  $baseDir = dirname($vendorDir);
7
 
8
  return array(
9
- 'Composer\\Installers\\AglInstaller' => $vendorDir . '/composer/installers/src/Composer/Installers/AglInstaller.php',
10
- 'Composer\\Installers\\AimeosInstaller' => $vendorDir . '/composer/installers/src/Composer/Installers/AimeosInstaller.php',
11
- 'Composer\\Installers\\AnnotateCmsInstaller' => $vendorDir . '/composer/installers/src/Composer/Installers/AnnotateCmsInstaller.php',
12
- 'Composer\\Installers\\AsgardInstaller' => $vendorDir . '/composer/installers/src/Composer/Installers/AsgardInstaller.php',
13
- 'Composer\\Installers\\AttogramInstaller' => $vendorDir . '/composer/installers/src/Composer/Installers/AttogramInstaller.php',
14
- 'Composer\\Installers\\BaseInstaller' => $vendorDir . '/composer/installers/src/Composer/Installers/BaseInstaller.php',
15
- 'Composer\\Installers\\BitrixInstaller' => $vendorDir . '/composer/installers/src/Composer/Installers/BitrixInstaller.php',
16
- 'Composer\\Installers\\BonefishInstaller' => $vendorDir . '/composer/installers/src/Composer/Installers/BonefishInstaller.php',
17
- 'Composer\\Installers\\CakePHPInstaller' => $vendorDir . '/composer/installers/src/Composer/Installers/CakePHPInstaller.php',
18
- 'Composer\\Installers\\ChefInstaller' => $vendorDir . '/composer/installers/src/Composer/Installers/ChefInstaller.php',
19
- 'Composer\\Installers\\CiviCrmInstaller' => $vendorDir . '/composer/installers/src/Composer/Installers/CiviCrmInstaller.php',
20
- 'Composer\\Installers\\ClanCatsFrameworkInstaller' => $vendorDir . '/composer/installers/src/Composer/Installers/ClanCatsFrameworkInstaller.php',
21
- 'Composer\\Installers\\CockpitInstaller' => $vendorDir . '/composer/installers/src/Composer/Installers/CockpitInstaller.php',
22
- 'Composer\\Installers\\CodeIgniterInstaller' => $vendorDir . '/composer/installers/src/Composer/Installers/CodeIgniterInstaller.php',
23
- 'Composer\\Installers\\Concrete5Installer' => $vendorDir . '/composer/installers/src/Composer/Installers/Concrete5Installer.php',
24
- 'Composer\\Installers\\CraftInstaller' => $vendorDir . '/composer/installers/src/Composer/Installers/CraftInstaller.php',
25
- 'Composer\\Installers\\CroogoInstaller' => $vendorDir . '/composer/installers/src/Composer/Installers/CroogoInstaller.php',
26
- 'Composer\\Installers\\DecibelInstaller' => $vendorDir . '/composer/installers/src/Composer/Installers/DecibelInstaller.php',
27
- 'Composer\\Installers\\DframeInstaller' => $vendorDir . '/composer/installers/src/Composer/Installers/DframeInstaller.php',
28
- 'Composer\\Installers\\DokuWikiInstaller' => $vendorDir . '/composer/installers/src/Composer/Installers/DokuWikiInstaller.php',
29
- 'Composer\\Installers\\DolibarrInstaller' => $vendorDir . '/composer/installers/src/Composer/Installers/DolibarrInstaller.php',
30
- 'Composer\\Installers\\DrupalInstaller' => $vendorDir . '/composer/installers/src/Composer/Installers/DrupalInstaller.php',
31
- 'Composer\\Installers\\ElggInstaller' => $vendorDir . '/composer/installers/src/Composer/Installers/ElggInstaller.php',
32
- 'Composer\\Installers\\EliasisInstaller' => $vendorDir . '/composer/installers/src/Composer/Installers/EliasisInstaller.php',
33
- 'Composer\\Installers\\ExpressionEngineInstaller' => $vendorDir . '/composer/installers/src/Composer/Installers/ExpressionEngineInstaller.php',
34
- 'Composer\\Installers\\EzPlatformInstaller' => $vendorDir . '/composer/installers/src/Composer/Installers/EzPlatformInstaller.php',
35
- 'Composer\\Installers\\FuelInstaller' => $vendorDir . '/composer/installers/src/Composer/Installers/FuelInstaller.php',
36
- 'Composer\\Installers\\FuelphpInstaller' => $vendorDir . '/composer/installers/src/Composer/Installers/FuelphpInstaller.php',
37
- 'Composer\\Installers\\GravInstaller' => $vendorDir . '/composer/installers/src/Composer/Installers/GravInstaller.php',
38
- 'Composer\\Installers\\HuradInstaller' => $vendorDir . '/composer/installers/src/Composer/Installers/HuradInstaller.php',
39
- 'Composer\\Installers\\ImageCMSInstaller' => $vendorDir . '/composer/installers/src/Composer/Installers/ImageCMSInstaller.php',
40
- 'Composer\\Installers\\Installer' => $vendorDir . '/composer/installers/src/Composer/Installers/Installer.php',
41
- 'Composer\\Installers\\ItopInstaller' => $vendorDir . '/composer/installers/src/Composer/Installers/ItopInstaller.php',
42
- 'Composer\\Installers\\JoomlaInstaller' => $vendorDir . '/composer/installers/src/Composer/Installers/JoomlaInstaller.php',
43
- 'Composer\\Installers\\KanboardInstaller' => $vendorDir . '/composer/installers/src/Composer/Installers/KanboardInstaller.php',
44
- 'Composer\\Installers\\KirbyInstaller' => $vendorDir . '/composer/installers/src/Composer/Installers/KirbyInstaller.php',
45
- 'Composer\\Installers\\KnownInstaller' => $vendorDir . '/composer/installers/src/Composer/Installers/KnownInstaller.php',
46
- 'Composer\\Installers\\KodiCMSInstaller' => $vendorDir . '/composer/installers/src/Composer/Installers/KodiCMSInstaller.php',
47
- 'Composer\\Installers\\KohanaInstaller' => $vendorDir . '/composer/installers/src/Composer/Installers/KohanaInstaller.php',
48
- 'Composer\\Installers\\LanManagementSystemInstaller' => $vendorDir . '/composer/installers/src/Composer/Installers/LanManagementSystemInstaller.php',
49
- 'Composer\\Installers\\LaravelInstaller' => $vendorDir . '/composer/installers/src/Composer/Installers/LaravelInstaller.php',
50
- 'Composer\\Installers\\LavaLiteInstaller' => $vendorDir . '/composer/installers/src/Composer/Installers/LavaLiteInstaller.php',
51
- 'Composer\\Installers\\LithiumInstaller' => $vendorDir . '/composer/installers/src/Composer/Installers/LithiumInstaller.php',
52
- 'Composer\\Installers\\MODULEWorkInstaller' => $vendorDir . '/composer/installers/src/Composer/Installers/MODULEWorkInstaller.php',
53
- 'Composer\\Installers\\MODXEvoInstaller' => $vendorDir . '/composer/installers/src/Composer/Installers/MODXEvoInstaller.php',
54
- 'Composer\\Installers\\MagentoInstaller' => $vendorDir . '/composer/installers/src/Composer/Installers/MagentoInstaller.php',
55
- 'Composer\\Installers\\MajimaInstaller' => $vendorDir . '/composer/installers/src/Composer/Installers/MajimaInstaller.php',
56
- 'Composer\\Installers\\MakoInstaller' => $vendorDir . '/composer/installers/src/Composer/Installers/MakoInstaller.php',
57
- 'Composer\\Installers\\MantisBTInstaller' => $vendorDir . '/composer/installers/src/Composer/Installers/MantisBTInstaller.php',
58
- 'Composer\\Installers\\MauticInstaller' => $vendorDir . '/composer/installers/src/Composer/Installers/MauticInstaller.php',
59
- 'Composer\\Installers\\MayaInstaller' => $vendorDir . '/composer/installers/src/Composer/Installers/MayaInstaller.php',
60
- 'Composer\\Installers\\MediaWikiInstaller' => $vendorDir . '/composer/installers/src/Composer/Installers/MediaWikiInstaller.php',
61
- 'Composer\\Installers\\MicroweberInstaller' => $vendorDir . '/composer/installers/src/Composer/Installers/MicroweberInstaller.php',
62
- 'Composer\\Installers\\ModxInstaller' => $vendorDir . '/composer/installers/src/Composer/Installers/ModxInstaller.php',
63
- 'Composer\\Installers\\MoodleInstaller' => $vendorDir . '/composer/installers/src/Composer/Installers/MoodleInstaller.php',
64
- 'Composer\\Installers\\OctoberInstaller' => $vendorDir . '/composer/installers/src/Composer/Installers/OctoberInstaller.php',
65
- 'Composer\\Installers\\OntoWikiInstaller' => $vendorDir . '/composer/installers/src/Composer/Installers/OntoWikiInstaller.php',
66
- 'Composer\\Installers\\OsclassInstaller' => $vendorDir . '/composer/installers/src/Composer/Installers/OsclassInstaller.php',
67
- 'Composer\\Installers\\OxidInstaller' => $vendorDir . '/composer/installers/src/Composer/Installers/OxidInstaller.php',
68
- 'Composer\\Installers\\PPIInstaller' => $vendorDir . '/composer/installers/src/Composer/Installers/PPIInstaller.php',
69
- 'Composer\\Installers\\PhiftyInstaller' => $vendorDir . '/composer/installers/src/Composer/Installers/PhiftyInstaller.php',
70
- 'Composer\\Installers\\PhpBBInstaller' => $vendorDir . '/composer/installers/src/Composer/Installers/PhpBBInstaller.php',
71
- 'Composer\\Installers\\PimcoreInstaller' => $vendorDir . '/composer/installers/src/Composer/Installers/PimcoreInstaller.php',
72
- 'Composer\\Installers\\PiwikInstaller' => $vendorDir . '/composer/installers/src/Composer/Installers/PiwikInstaller.php',
73
- 'Composer\\Installers\\PlentymarketsInstaller' => $vendorDir . '/composer/installers/src/Composer/Installers/PlentymarketsInstaller.php',
74
- 'Composer\\Installers\\Plugin' => $vendorDir . '/composer/installers/src/Composer/Installers/Plugin.php',
75
- 'Composer\\Installers\\PortoInstaller' => $vendorDir . '/composer/installers/src/Composer/Installers/PortoInstaller.php',
76
- 'Composer\\Installers\\PrestashopInstaller' => $vendorDir . '/composer/installers/src/Composer/Installers/PrestashopInstaller.php',
77
- 'Composer\\Installers\\ProcessWireInstaller' => $vendorDir . '/composer/installers/src/Composer/Installers/ProcessWireInstaller.php',
78
- 'Composer\\Installers\\PuppetInstaller' => $vendorDir . '/composer/installers/src/Composer/Installers/PuppetInstaller.php',
79
- 'Composer\\Installers\\PxcmsInstaller' => $vendorDir . '/composer/installers/src/Composer/Installers/PxcmsInstaller.php',
80
- 'Composer\\Installers\\RadPHPInstaller' => $vendorDir . '/composer/installers/src/Composer/Installers/RadPHPInstaller.php',
81
- 'Composer\\Installers\\ReIndexInstaller' => $vendorDir . '/composer/installers/src/Composer/Installers/ReIndexInstaller.php',
82
- 'Composer\\Installers\\Redaxo5Installer' => $vendorDir . '/composer/installers/src/Composer/Installers/Redaxo5Installer.php',
83
- 'Composer\\Installers\\RedaxoInstaller' => $vendorDir . '/composer/installers/src/Composer/Installers/RedaxoInstaller.php',
84
- 'Composer\\Installers\\RoundcubeInstaller' => $vendorDir . '/composer/installers/src/Composer/Installers/RoundcubeInstaller.php',
85
- 'Composer\\Installers\\SMFInstaller' => $vendorDir . '/composer/installers/src/Composer/Installers/SMFInstaller.php',
86
- 'Composer\\Installers\\ShopwareInstaller' => $vendorDir . '/composer/installers/src/Composer/Installers/ShopwareInstaller.php',
87
- 'Composer\\Installers\\SilverStripeInstaller' => $vendorDir . '/composer/installers/src/Composer/Installers/SilverStripeInstaller.php',
88
- 'Composer\\Installers\\SiteDirectInstaller' => $vendorDir . '/composer/installers/src/Composer/Installers/SiteDirectInstaller.php',
89
- 'Composer\\Installers\\StarbugInstaller' => $vendorDir . '/composer/installers/src/Composer/Installers/StarbugInstaller.php',
90
- 'Composer\\Installers\\SyDESInstaller' => $vendorDir . '/composer/installers/src/Composer/Installers/SyDESInstaller.php',
91
- 'Composer\\Installers\\SyliusInstaller' => $vendorDir . '/composer/installers/src/Composer/Installers/SyliusInstaller.php',
92
- 'Composer\\Installers\\Symfony1Installer' => $vendorDir . '/composer/installers/src/Composer/Installers/Symfony1Installer.php',
93
- 'Composer\\Installers\\TYPO3CmsInstaller' => $vendorDir . '/composer/installers/src/Composer/Installers/TYPO3CmsInstaller.php',
94
- 'Composer\\Installers\\TYPO3FlowInstaller' => $vendorDir . '/composer/installers/src/Composer/Installers/TYPO3FlowInstaller.php',
95
- 'Composer\\Installers\\TaoInstaller' => $vendorDir . '/composer/installers/src/Composer/Installers/TaoInstaller.php',
96
- 'Composer\\Installers\\TheliaInstaller' => $vendorDir . '/composer/installers/src/Composer/Installers/TheliaInstaller.php',
97
- 'Composer\\Installers\\TuskInstaller' => $vendorDir . '/composer/installers/src/Composer/Installers/TuskInstaller.php',
98
- 'Composer\\Installers\\UserFrostingInstaller' => $vendorDir . '/composer/installers/src/Composer/Installers/UserFrostingInstaller.php',
99
- 'Composer\\Installers\\VanillaInstaller' => $vendorDir . '/composer/installers/src/Composer/Installers/VanillaInstaller.php',
100
- 'Composer\\Installers\\VgmcpInstaller' => $vendorDir . '/composer/installers/src/Composer/Installers/VgmcpInstaller.php',
101
- 'Composer\\Installers\\WHMCSInstaller' => $vendorDir . '/composer/installers/src/Composer/Installers/WHMCSInstaller.php',
102
- 'Composer\\Installers\\WolfCMSInstaller' => $vendorDir . '/composer/installers/src/Composer/Installers/WolfCMSInstaller.php',
103
- 'Composer\\Installers\\WordPressInstaller' => $vendorDir . '/composer/installers/src/Composer/Installers/WordPressInstaller.php',
104
- 'Composer\\Installers\\YawikInstaller' => $vendorDir . '/composer/installers/src/Composer/Installers/YawikInstaller.php',
105
- 'Composer\\Installers\\ZendInstaller' => $vendorDir . '/composer/installers/src/Composer/Installers/ZendInstaller.php',
106
- 'Composer\\Installers\\ZikulaInstaller' => $vendorDir . '/composer/installers/src/Composer/Installers/ZikulaInstaller.php',
107
- 'Dangoodman\\ComposerForWordpress\\ComposerForWordpress' => $vendorDir . '/dangoodman/composer-for-wordpress/ComposerForWordpress.php',
108
  'Imagify' => $baseDir . '/inc/classes/class-imagify.php',
109
- 'Imagify\\Auth\\Basic' => $baseDir . '/classes/Auth/Basic.php',
110
- 'Imagify\\Bulk\\AbstractBulk' => $baseDir . '/classes/Bulk/AbstractBulk.php',
111
- 'Imagify\\Bulk\\BulkInterface' => $baseDir . '/classes/Bulk/BulkInterface.php',
112
- 'Imagify\\Bulk\\CustomFolders' => $baseDir . '/classes/Bulk/CustomFolders.php',
113
- 'Imagify\\Bulk\\Noop' => $baseDir . '/classes/Bulk/Noop.php',
114
- 'Imagify\\Bulk\\WP' => $baseDir . '/classes/Bulk/WP.php',
115
- 'Imagify\\CDN\\PushCDNInterface' => $baseDir . '/classes/CDN/PushCDNInterface.php',
116
- 'Imagify\\Context\\AbstractContext' => $baseDir . '/classes/Context/AbstractContext.php',
117
- 'Imagify\\Context\\ContextInterface' => $baseDir . '/classes/Context/ContextInterface.php',
118
- 'Imagify\\Context\\CustomFolders' => $baseDir . '/classes/Context/CustomFolders.php',
119
- 'Imagify\\Context\\Noop' => $baseDir . '/classes/Context/Noop.php',
120
- 'Imagify\\Context\\WP' => $baseDir . '/classes/Context/WP.php',
121
- 'Imagify\\DB\\DBInterface' => $baseDir . '/classes/DB/DBInterface.php',
122
- 'Imagify\\Deprecated\\Traits\\Media\\CustomFoldersDeprecatedTrait' => $baseDir . '/inc/deprecated/Traits/Media/CustomFoldersDeprecatedTrait.php',
123
- 'Imagify\\Deprecated\\Traits\\Media\\NGGDeprecatedTrait' => $baseDir . '/inc/deprecated/Traits/Media/NGGDeprecatedTrait.php',
124
- 'Imagify\\Deprecated\\Traits\\Media\\NoopDeprecatedTrait' => $baseDir . '/inc/deprecated/Traits/Media/NoopDeprecatedTrait.php',
125
- 'Imagify\\Deprecated\\Traits\\Media\\WPDeprecatedTrait' => $baseDir . '/inc/deprecated/Traits/Media/WPDeprecatedTrait.php',
126
- 'Imagify\\Deprecated\\Traits\\Optimization\\Process\\AbstractProcessDeprecatedTrait' => $baseDir . '/inc/deprecated/Traits/Optimization/Process/AbstractProcessDeprecatedTrait.php',
127
- 'Imagify\\Imagifybeat\\Actions' => $baseDir . '/classes/Imagifybeat/Actions.php',
128
- 'Imagify\\Imagifybeat\\Core' => $baseDir . '/classes/Imagifybeat/Core.php',
129
- 'Imagify\\Job\\MediaOptimization' => $baseDir . '/classes/Job/MediaOptimization.php',
130
- 'Imagify\\Media\\AbstractMedia' => $baseDir . '/classes/Media/AbstractMedia.php',
131
- 'Imagify\\Media\\CustomFolders' => $baseDir . '/classes/Media/CustomFolders.php',
132
- 'Imagify\\Media\\MediaInterface' => $baseDir . '/classes/Media/MediaInterface.php',
133
- 'Imagify\\Media\\Noop' => $baseDir . '/classes/Media/Noop.php',
134
- 'Imagify\\Media\\WP' => $baseDir . '/classes/Media/WP.php',
135
- 'Imagify\\Optimization\\Data\\AbstractData' => $baseDir . '/classes/Optimization/Data/AbstractData.php',
136
- 'Imagify\\Optimization\\Data\\CustomFolders' => $baseDir . '/classes/Optimization/Data/CustomFolders.php',
137
- 'Imagify\\Optimization\\Data\\DataInterface' => $baseDir . '/classes/Optimization/Data/DataInterface.php',
138
- 'Imagify\\Optimization\\Data\\Noop' => $baseDir . '/classes/Optimization/Data/Noop.php',
139
- 'Imagify\\Optimization\\Data\\WP' => $baseDir . '/classes/Optimization/Data/WP.php',
140
- 'Imagify\\Optimization\\File' => $baseDir . '/classes/Optimization/File.php',
141
- 'Imagify\\Optimization\\Process\\AbstractProcess' => $baseDir . '/classes/Optimization/Process/AbstractProcess.php',
142
- 'Imagify\\Optimization\\Process\\CustomFolders' => $baseDir . '/classes/Optimization/Process/CustomFolders.php',
143
- 'Imagify\\Optimization\\Process\\Noop' => $baseDir . '/classes/Optimization/Process/Noop.php',
144
- 'Imagify\\Optimization\\Process\\ProcessInterface' => $baseDir . '/classes/Optimization/Process/ProcessInterface.php',
145
- 'Imagify\\Optimization\\Process\\WP' => $baseDir . '/classes/Optimization/Process/WP.php',
146
- 'Imagify\\Stats\\OptimizedMediaWithoutWebp' => $baseDir . '/classes/Stats/OptimizedMediaWithoutWebp.php',
147
- 'Imagify\\Stats\\StatInterface' => $baseDir . '/classes/Stats/StatInterface.php',
148
- 'Imagify\\ThirdParty\\AS3CF\\CDN\\WP\\AS3' => $baseDir . '/inc/3rd-party/amazon-s3-and-cloudfront/classes/CDN/WP/AS3.php',
149
- 'Imagify\\ThirdParty\\AS3CF\\Main' => $baseDir . '/inc/3rd-party/amazon-s3-and-cloudfront/classes/Main.php',
150
- 'Imagify\\ThirdParty\\EnableMediaReplace\\Main' => $baseDir . '/inc/3rd-party/enable-media-replace/classes/Main.php',
151
- 'Imagify\\ThirdParty\\FormidablePro\\Main' => $baseDir . '/inc/3rd-party/formidable-pro/classes/Main.php',
152
- 'Imagify\\ThirdParty\\NGG\\Bulk\\NGG' => $baseDir . '/inc/3rd-party/nextgen-gallery/classes/Bulk/NGG.php',
153
- 'Imagify\\ThirdParty\\NGG\\Context\\NGG' => $baseDir . '/inc/3rd-party/nextgen-gallery/classes/Context/NGG.php',
154
- 'Imagify\\ThirdParty\\NGG\\DB' => $baseDir . '/inc/3rd-party/nextgen-gallery/classes/DB.php',
155
- 'Imagify\\ThirdParty\\NGG\\DynamicThumbnails' => $baseDir . '/inc/3rd-party/nextgen-gallery/classes/DynamicThumbnails.php',
156
- 'Imagify\\ThirdParty\\NGG\\Main' => $baseDir . '/inc/3rd-party/nextgen-gallery/classes/Main.php',
157
- 'Imagify\\ThirdParty\\NGG\\Media\\NGG' => $baseDir . '/inc/3rd-party/nextgen-gallery/classes/Media/NGG.php',
158
- 'Imagify\\ThirdParty\\NGG\\NGGStorage' => $baseDir . '/inc/3rd-party/nextgen-gallery/classes/NGGStorage.php',
159
- 'Imagify\\ThirdParty\\NGG\\Optimization\\Data\\NGG' => $baseDir . '/inc/3rd-party/nextgen-gallery/classes/Optimization/Data/NGG.php',
160
- 'Imagify\\ThirdParty\\NGG\\Optimization\\Process\\NGG' => $baseDir . '/inc/3rd-party/nextgen-gallery/classes/Optimization/Process/NGG.php',
161
- 'Imagify\\ThirdParty\\RegenerateThumbnails\\Main' => $baseDir . '/inc/3rd-party/regenerate-thumbnails/classes/Main.php',
162
- 'Imagify\\ThirdParty\\WPRocket\\Main' => $baseDir . '/inc/3rd-party/wp-rocket/classes/Main.php',
163
- 'Imagify\\Traits\\InstanceGetterTrait' => $baseDir . '/classes/Traits/InstanceGetterTrait.php',
164
- 'Imagify\\Traits\\MediaRowTrait' => $baseDir . '/classes/Traits/MediaRowTrait.php',
165
- 'Imagify\\Webp\\Apache' => $baseDir . '/classes/Webp/Apache.php',
166
- 'Imagify\\Webp\\Display' => $baseDir . '/classes/Webp/Display.php',
167
- 'Imagify\\Webp\\IIS' => $baseDir . '/classes/Webp/IIS.php',
168
- 'Imagify\\Webp\\Picture\\Display' => $baseDir . '/classes/Webp/Picture/Display.php',
169
- 'Imagify\\Webp\\RewriteRules\\Apache' => $baseDir . '/classes/Webp/RewriteRules/Apache.php',
170
- 'Imagify\\Webp\\RewriteRules\\Display' => $baseDir . '/classes/Webp/RewriteRules/Display.php',
171
- 'Imagify\\Webp\\RewriteRules\\IIS' => $baseDir . '/classes/Webp/RewriteRules/IIS.php',
172
- 'Imagify\\Webp\\RewriteRules\\Nginx' => $baseDir . '/classes/Webp/RewriteRules/Nginx.php',
173
- 'Imagify\\WriteFile\\AbstractApacheDirConfFile' => $baseDir . '/classes/WriteFile/AbstractApacheDirConfFile.php',
174
- 'Imagify\\WriteFile\\AbstractIISDirConfFile' => $baseDir . '/classes/WriteFile/AbstractIISDirConfFile.php',
175
- 'Imagify\\WriteFile\\AbstractNginxDirConfFile' => $baseDir . '/classes/WriteFile/AbstractNginxDirConfFile.php',
176
- 'Imagify\\WriteFile\\AbstractWriteDirConfFile' => $baseDir . '/classes/WriteFile/AbstractWriteDirConfFile.php',
177
- 'Imagify\\WriteFile\\WriteFileInterface' => $baseDir . '/classes/WriteFile/WriteFileInterface.php',
178
  'Imagify_AS3CF_Attachment' => $baseDir . '/inc/deprecated/classes/class-imagify-as3cf-attachment.php',
179
  'Imagify_AS3CF_Deprecated' => $baseDir . '/inc/deprecated/classes/class-imagify-as3cf-deprecated.php',
180
  'Imagify_Abstract_Attachment' => $baseDir . '/inc/deprecated/classes/class-imagify-abstract-attachment.php',
6
  $baseDir = dirname($vendorDir);
7
 
8
  return array(
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
9
  'Imagify' => $baseDir . '/inc/classes/class-imagify.php',
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
10
  'Imagify_AS3CF_Attachment' => $baseDir . '/inc/deprecated/classes/class-imagify-as3cf-attachment.php',
11
  'Imagify_AS3CF_Deprecated' => $baseDir . '/inc/deprecated/classes/class-imagify-as3cf-deprecated.php',
12
  'Imagify_Abstract_Attachment' => $baseDir . '/inc/deprecated/classes/class-imagify-abstract-attachment.php',
vendor/composer/autoload_real.php CHANGED
@@ -2,7 +2,7 @@
2
 
3
  // autoload_real.php @generated by Composer
4
 
5
- class ComposerAutoloaderInitee5f379dcd1f5ddc8ae5536c97dc2605
6
  {
7
  private static $loader;
8
 
@@ -22,23 +22,32 @@ class ComposerAutoloaderInitee5f379dcd1f5ddc8ae5536c97dc2605
22
  return self::$loader;
23
  }
24
 
25
- spl_autoload_register(array('ComposerAutoloaderInitee5f379dcd1f5ddc8ae5536c97dc2605', 'loadClassLoader'), true, true);
26
  self::$loader = $loader = new \Composer\AutoloadWPMediaImagifyWordPressPlugin\ClassLoader();
27
- spl_autoload_unregister(array('ComposerAutoloaderInitee5f379dcd1f5ddc8ae5536c97dc2605', 'loadClassLoader'));
28
 
29
  $useStaticLoader = PHP_VERSION_ID >= 50600 && !defined('HHVM_VERSION') && (!function_exists('zend_loader_file_encoded') || !zend_loader_file_encoded());
30
  if ($useStaticLoader) {
31
  require_once __DIR__ . '/autoload_static.php';
32
 
33
- call_user_func(\Composer\Autoload\ComposerStaticInitee5f379dcd1f5ddc8ae5536c97dc2605::getInitializer($loader));
34
  } else {
 
 
 
 
 
 
 
 
 
 
35
  $classMap = require __DIR__ . '/autoload_classmap.php';
36
  if ($classMap) {
37
  $loader->addClassMap($classMap);
38
  }
39
  }
40
 
41
- $loader->setClassMapAuthoritative(true);
42
  $loader->register(true);
43
 
44
  return $loader;
2
 
3
  // autoload_real.php @generated by Composer
4
 
5
+ class ComposerAutoloaderInit27c2f21fb0be1f8c2ef63f80977ab942
6
  {
7
  private static $loader;
8
 
22
  return self::$loader;
23
  }
24
 
25
+ spl_autoload_register(array('ComposerAutoloaderInit27c2f21fb0be1f8c2ef63f80977ab942', 'loadClassLoader'), true, true);
26
  self::$loader = $loader = new \Composer\AutoloadWPMediaImagifyWordPressPlugin\ClassLoader();
27
+ spl_autoload_unregister(array('ComposerAutoloaderInit27c2f21fb0be1f8c2ef63f80977ab942', 'loadClassLoader'));
28
 
29
  $useStaticLoader = PHP_VERSION_ID >= 50600 && !defined('HHVM_VERSION') && (!function_exists('zend_loader_file_encoded') || !zend_loader_file_encoded());
30
  if ($useStaticLoader) {
31
  require_once __DIR__ . '/autoload_static.php';
32
 
33
+ call_user_func(\Composer\Autoload\ComposerStaticInit27c2f21fb0be1f8c2ef63f80977ab942::getInitializer($loader));
34
  } else {
35
+ $map = require __DIR__ . '/autoload_namespaces.php';
36
+ foreach ($map as $namespace => $path) {
37
+ $loader->set($namespace, $path);
38
+ }
39
+
40
+ $map = require __DIR__ . '/autoload_psr4.php';
41
+ foreach ($map as $namespace => $path) {
42
+ $loader->setPsr4($namespace, $path);
43
+ }
44
+
45
  $classMap = require __DIR__ . '/autoload_classmap.php';
46
  if ($classMap) {
47
  $loader->addClassMap($classMap);
48
  }
49
  }
50
 
 
51
  $loader->register(true);
52
 
53
  return $loader;
vendor/composer/autoload_static.php CHANGED
@@ -7,7 +7,7 @@ namespace Composer\Autoload;
7
  use Composer\AutoloadWPMediaImagifyWordPressPlugin\ClassLoader as ClassLoaderWPMediaImagifyWordPressPlugin;
8
 
9
 
10
- class ComposerStaticInitee5f379dcd1f5ddc8ae5536c97dc2605
11
  {
12
  public static $prefixLengthsPsr4 = array (
13
  'I' =>
@@ -80,175 +80,7 @@ class ComposerStaticInitee5f379dcd1f5ddc8ae5536c97dc2605
80
  );
81
 
82
  public static $classMap = array (
83
- 'Composer\\Installers\\AglInstaller' => __DIR__ . '/..' . '/composer/installers/src/Composer/Installers/AglInstaller.php',
84
- 'Composer\\Installers\\AimeosInstaller' => __DIR__ . '/..' . '/composer/installers/src/Composer/Installers/AimeosInstaller.php',
85
- 'Composer\\Installers\\AnnotateCmsInstaller' => __DIR__ . '/..' . '/composer/installers/src/Composer/Installers/AnnotateCmsInstaller.php',
86
- 'Composer\\Installers\\AsgardInstaller' => __DIR__ . '/..' . '/composer/installers/src/Composer/Installers/AsgardInstaller.php',
87
- 'Composer\\Installers\\AttogramInstaller' => __DIR__ . '/..' . '/composer/installers/src/Composer/Installers/AttogramInstaller.php',
88
- 'Composer\\Installers\\BaseInstaller' => __DIR__ . '/..' . '/composer/installers/src/Composer/Installers/BaseInstaller.php',
89
- 'Composer\\Installers\\BitrixInstaller' => __DIR__ . '/..' . '/composer/installers/src/Composer/Installers/BitrixInstaller.php',
90
- 'Composer\\Installers\\BonefishInstaller' => __DIR__ . '/..' . '/composer/installers/src/Composer/Installers/BonefishInstaller.php',
91
- 'Composer\\Installers\\CakePHPInstaller' => __DIR__ . '/..' . '/composer/installers/src/Composer/Installers/CakePHPInstaller.php',
92
- 'Composer\\Installers\\ChefInstaller' => __DIR__ . '/..' . '/composer/installers/src/Composer/Installers/ChefInstaller.php',
93
- 'Composer\\Installers\\CiviCrmInstaller' => __DIR__ . '/..' . '/composer/installers/src/Composer/Installers/CiviCrmInstaller.php',
94
- 'Composer\\Installers\\ClanCatsFrameworkInstaller' => __DIR__ . '/..' . '/composer/installers/src/Composer/Installers/ClanCatsFrameworkInstaller.php',
95
- 'Composer\\Installers\\CockpitInstaller' => __DIR__ . '/..' . '/composer/installers/src/Composer/Installers/CockpitInstaller.php',
96
- 'Composer\\Installers\\CodeIgniterInstaller' => __DIR__ . '/..' . '/composer/installers/src/Composer/Installers/CodeIgniterInstaller.php',
97
- 'Composer\\Installers\\Concrete5Installer' => __DIR__ . '/..' . '/composer/installers/src/Composer/Installers/Concrete5Installer.php',
98
- 'Composer\\Installers\\CraftInstaller' => __DIR__ . '/..' . '/composer/installers/src/Composer/Installers/CraftInstaller.php',
99
- 'Composer\\Installers\\CroogoInstaller' => __DIR__ . '/..' . '/composer/installers/src/Composer/Installers/CroogoInstaller.php',
100
- 'Composer\\Installers\\DecibelInstaller' => __DIR__ . '/..' . '/composer/installers/src/Composer/Installers/DecibelInstaller.php',
101
- 'Composer\\Installers\\DframeInstaller' => __DIR__ . '/..' . '/composer/installers/src/Composer/Installers/DframeInstaller.php',
102
- 'Composer\\Installers\\DokuWikiInstaller' => __DIR__ . '/..' . '/composer/installers/src/Composer/Installers/DokuWikiInstaller.php',
103
- 'Composer\\Installers\\DolibarrInstaller' => __DIR__ . '/..' . '/composer/installers/src/Composer/Installers/DolibarrInstaller.php',
104
- 'Composer\\Installers\\DrupalInstaller' => __DIR__ . '/..' . '/composer/installers/src/Composer/Installers/DrupalInstaller.php',
105
- 'Composer\\Installers\\ElggInstaller' => __DIR__ . '/..' . '/composer/installers/src/Composer/Installers/ElggInstaller.php',
106
- 'Composer\\Installers\\EliasisInstaller' => __DIR__ . '/..' . '/composer/installers/src/Composer/Installers/EliasisInstaller.php',
107
- 'Composer\\Installers\\ExpressionEngineInstaller' => __DIR__ . '/..' . '/composer/installers/src/Composer/Installers/ExpressionEngineInstaller.php',
108
- 'Composer\\Installers\\EzPlatformInstaller' => __DIR__ . '/..' . '/composer/installers/src/Composer/Installers/EzPlatformInstaller.php',
109
- 'Composer\\Installers\\FuelInstaller' => __DIR__ . '/..' . '/composer/installers/src/Composer/Installers/FuelInstaller.php',
110
- 'Composer\\Installers\\FuelphpInstaller' => __DIR__ . '/..' . '/composer/installers/src/Composer/Installers/FuelphpInstaller.php',
111
- 'Composer\\Installers\\GravInstaller' => __DIR__ . '/..' . '/composer/installers/src/Composer/Installers/GravInstaller.php',
112
- 'Composer\\Installers\\HuradInstaller' => __DIR__ . '/..' . '/composer/installers/src/Composer/Installers/HuradInstaller.php',
113
- 'Composer\\Installers\\ImageCMSInstaller' => __DIR__ . '/..' . '/composer/installers/src/Composer/Installers/ImageCMSInstaller.php',
114
- 'Composer\\Installers\\Installer' => __DIR__ . '/..' . '/composer/installers/src/Composer/Installers/Installer.php',
115
- 'Composer\\Installers\\ItopInstaller' => __DIR__ . '/..' . '/composer/installers/src/Composer/Installers/ItopInstaller.php',
116
- 'Composer\\Installers\\JoomlaInstaller' => __DIR__ . '/..' . '/composer/installers/src/Composer/Installers/JoomlaInstaller.php',
117
- 'Composer\\Installers\\KanboardInstaller' => __DIR__ . '/..' . '/composer/installers/src/Composer/Installers/KanboardInstaller.php',
118
- 'Composer\\Installers\\KirbyInstaller' => __DIR__ . '/..' . '/composer/installers/src/Composer/Installers/KirbyInstaller.php',
119
- 'Composer\\Installers\\KnownInstaller' => __DIR__ . '/..' . '/composer/installers/src/Composer/Installers/KnownInstaller.php',
120
- 'Composer\\Installers\\KodiCMSInstaller' => __DIR__ . '/..' . '/composer/installers/src/Composer/Installers/KodiCMSInstaller.php',
121
- 'Composer\\Installers\\KohanaInstaller' => __DIR__ . '/..' . '/composer/installers/src/Composer/Installers/KohanaInstaller.php',
122
- 'Composer\\Installers\\LanManagementSystemInstaller' => __DIR__ . '/..' . '/composer/installers/src/Composer/Installers/LanManagementSystemInstaller.php',
123
- 'Composer\\Installers\\LaravelInstaller' => __DIR__ . '/..' . '/composer/installers/src/Composer/Installers/LaravelInstaller.php',
124
- 'Composer\\Installers\\LavaLiteInstaller' => __DIR__ . '/..' . '/composer/installers/src/Composer/Installers/LavaLiteInstaller.php',
125
- 'Composer\\Installers\\LithiumInstaller' => __DIR__ . '/..' . '/composer/installers/src/Composer/Installers/LithiumInstaller.php',
126
- 'Composer\\Installers\\MODULEWorkInstaller' => __DIR__ . '/..' . '/composer/installers/src/Composer/Installers/MODULEWorkInstaller.php',
127
- 'Composer\\Installers\\MODXEvoInstaller' => __DIR__ . '/..' . '/composer/installers/src/Composer/Installers/MODXEvoInstaller.php',
128
- 'Composer\\Installers\\MagentoInstaller' => __DIR__ . '/..' . '/composer/installers/src/Composer/Installers/MagentoInstaller.php',
129
- 'Composer\\Installers\\MajimaInstaller' => __DIR__ . '/..' . '/composer/installers/src/Composer/Installers/MajimaInstaller.php',
130
- 'Composer\\Installers\\MakoInstaller' => __DIR__ . '/..' . '/composer/installers/src/Composer/Installers/MakoInstaller.php',
131
- 'Composer\\Installers\\MantisBTInstaller' => __DIR__ . '/..' . '/composer/installers/src/Composer/Installers/MantisBTInstaller.php',
132
- 'Composer\\Installers\\MauticInstaller' => __DIR__ . '/..' . '/composer/installers/src/Composer/Installers/MauticInstaller.php',
133
- 'Composer\\Installers\\MayaInstaller' => __DIR__ . '/..' . '/composer/installers/src/Composer/Installers/MayaInstaller.php',
134
- 'Composer\\Installers\\MediaWikiInstaller' => __DIR__ . '/..' . '/composer/installers/src/Composer/Installers/MediaWikiInstaller.php',
135
- 'Composer\\Installers\\MicroweberInstaller' => __DIR__ . '/..' . '/composer/installers/src/Composer/Installers/MicroweberInstaller.php',
136
- 'Composer\\Installers\\ModxInstaller' => __DIR__ . '/..' . '/composer/installers/src/Composer/Installers/ModxInstaller.php',
137
- 'Composer\\Installers\\MoodleInstaller' => __DIR__ . '/..' . '/composer/installers/src/Composer/Installers/MoodleInstaller.php',
138
- 'Composer\\Installers\\OctoberInstaller' => __DIR__ . '/..' . '/composer/installers/src/Composer/Installers/OctoberInstaller.php',
139
- 'Composer\\Installers\\OntoWikiInstaller' => __DIR__ . '/..' . '/composer/installers/src/Composer/Installers/OntoWikiInstaller.php',
140
- 'Composer\\Installers\\OsclassInstaller' => __DIR__ . '/..' . '/composer/installers/src/Composer/Installers/OsclassInstaller.php',
141
- 'Composer\\Installers\\OxidInstaller' => __DIR__ . '/..' . '/composer/installers/src/Composer/Installers/OxidInstaller.php',
142
- 'Composer\\Installers\\PPIInstaller' => __DIR__ . '/..' . '/composer/installers/src/Composer/Installers/PPIInstaller.php',
143
- 'Composer\\Installers\\PhiftyInstaller' => __DIR__ . '/..' . '/composer/installers/src/Composer/Installers/PhiftyInstaller.php',
144
- 'Composer\\Installers\\PhpBBInstaller' => __DIR__ . '/..' . '/composer/installers/src/Composer/Installers/PhpBBInstaller.php',
145
- 'Composer\\Installers\\PimcoreInstaller' => __DIR__ . '/..' . '/composer/installers/src/Composer/Installers/PimcoreInstaller.php',
146
- 'Composer\\Installers\\PiwikInstaller' => __DIR__ . '/..' . '/composer/installers/src/Composer/Installers/PiwikInstaller.php',
147
- 'Composer\\Installers\\PlentymarketsInstaller' => __DIR__ . '/..' . '/composer/installers/src/Composer/Installers/PlentymarketsInstaller.php',
148
- 'Composer\\Installers\\Plugin' => __DIR__ . '/..' . '/composer/installers/src/Composer/Installers/Plugin.php',
149
- 'Composer\\Installers\\PortoInstaller' => __DIR__ . '/..' . '/composer/installers/src/Composer/Installers/PortoInstaller.php',
150
- 'Composer\\Installers\\PrestashopInstaller' => __DIR__ . '/..' . '/composer/installers/src/Composer/Installers/PrestashopInstaller.php',
151
- 'Composer\\Installers\\ProcessWireInstaller' => __DIR__ . '/..' . '/composer/installers/src/Composer/Installers/ProcessWireInstaller.php',
152
- 'Composer\\Installers\\PuppetInstaller' => __DIR__ . '/..' . '/composer/installers/src/Composer/Installers/PuppetInstaller.php',
153
- 'Composer\\Installers\\PxcmsInstaller' => __DIR__ . '/..' . '/composer/installers/src/Composer/Installers/PxcmsInstaller.php',
154
- 'Composer\\Installers\\RadPHPInstaller' => __DIR__ . '/..' . '/composer/installers/src/Composer/Installers/RadPHPInstaller.php',
155
- 'Composer\\Installers\\ReIndexInstaller' => __DIR__ . '/..' . '/composer/installers/src/Composer/Installers/ReIndexInstaller.php',
156
- 'Composer\\Installers\\Redaxo5Installer' => __DIR__ . '/..' . '/composer/installers/src/Composer/Installers/Redaxo5Installer.php',
157
- 'Composer\\Installers\\RedaxoInstaller' => __DIR__ . '/..' . '/composer/installers/src/Composer/Installers/RedaxoInstaller.php',
158
- 'Composer\\Installers\\RoundcubeInstaller' => __DIR__ . '/..' . '/composer/installers/src/Composer/Installers/RoundcubeInstaller.php',
159
- 'Composer\\Installers\\SMFInstaller' => __DIR__ . '/..' . '/composer/installers/src/Composer/Installers/SMFInstaller.php',
160
- 'Composer\\Installers\\ShopwareInstaller' => __DIR__ . '/..' . '/composer/installers/src/Composer/Installers/ShopwareInstaller.php',
161
- 'Composer\\Installers\\SilverStripeInstaller' => __DIR__ . '/..' . '/composer/installers/src/Composer/Installers/SilverStripeInstaller.php',
162
- 'Composer\\Installers\\SiteDirectInstaller' => __DIR__ . '/..' . '/composer/installers/src/Composer/Installers/SiteDirectInstaller.php',
163
- 'Composer\\Installers\\StarbugInstaller' => __DIR__ . '/..' . '/composer/installers/src/Composer/Installers/StarbugInstaller.php',
164
- 'Composer\\Installers\\SyDESInstaller' => __DIR__ . '/..' . '/composer/installers/src/Composer/Installers/SyDESInstaller.php',
165
- 'Composer\\Installers\\SyliusInstaller' => __DIR__ . '/..' . '/composer/installers/src/Composer/Installers/SyliusInstaller.php',
166
- 'Composer\\Installers\\Symfony1Installer' => __DIR__ . '/..' . '/composer/installers/src/Composer/Installers/Symfony1Installer.php',
167
- 'Composer\\Installers\\TYPO3CmsInstaller' => __DIR__ . '/..' . '/composer/installers/src/Composer/Installers/TYPO3CmsInstaller.php',
168
- 'Composer\\Installers\\TYPO3FlowInstaller' => __DIR__ . '/..' . '/composer/installers/src/Composer/Installers/TYPO3FlowInstaller.php',
169
- 'Composer\\Installers\\TaoInstaller' => __DIR__ . '/..' . '/composer/installers/src/Composer/Installers/TaoInstaller.php',
170
- 'Composer\\Installers\\TheliaInstaller' => __DIR__ . '/..' . '/composer/installers/src/Composer/Installers/TheliaInstaller.php',
171
- 'Composer\\Installers\\TuskInstaller' => __DIR__ . '/..' . '/composer/installers/src/Composer/Installers/TuskInstaller.php',
172
- 'Composer\\Installers\\UserFrostingInstaller' => __DIR__ . '/..' . '/composer/installers/src/Composer/Installers/UserFrostingInstaller.php',
173
- 'Composer\\Installers\\VanillaInstaller' => __DIR__ . '/..' . '/composer/installers/src/Composer/Installers/VanillaInstaller.php',
174
- 'Composer\\Installers\\VgmcpInstaller' => __DIR__ . '/..' . '/composer/installers/src/Composer/Installers/VgmcpInstaller.php',
175
- 'Composer\\Installers\\WHMCSInstaller' => __DIR__ . '/..' . '/composer/installers/src/Composer/Installers/WHMCSInstaller.php',
176
- 'Composer\\Installers\\WolfCMSInstaller' => __DIR__ . '/..' . '/composer/installers/src/Composer/Installers/WolfCMSInstaller.php',
177
- 'Composer\\Installers\\WordPressInstaller' => __DIR__ . '/..' . '/composer/installers/src/Composer/Installers/WordPressInstaller.php',
178
- 'Composer\\Installers\\YawikInstaller' => __DIR__ . '/..' . '/composer/installers/src/Composer/Installers/YawikInstaller.php',
179
- 'Composer\\Installers\\ZendInstaller' => __DIR__ . '/..' . '/composer/installers/src/Composer/Installers/ZendInstaller.php',
180
- 'Composer\\Installers\\ZikulaInstaller' => __DIR__ . '/..' . '/composer/installers/src/Composer/Installers/ZikulaInstaller.php',
181
- 'Dangoodman\\ComposerForWordpress\\ComposerForWordpress' => __DIR__ . '/..' . '/dangoodman/composer-for-wordpress/ComposerForWordpress.php',
182
  'Imagify' => __DIR__ . '/../..' . '/inc/classes/class-imagify.php',
183
- 'Imagify\\Auth\\Basic' => __DIR__ . '/../..' . '/classes/Auth/Basic.php',
184
- 'Imagify\\Bulk\\AbstractBulk' => __DIR__ . '/../..' . '/classes/Bulk/AbstractBulk.php',
185
- 'Imagify\\Bulk\\BulkInterface' => __DIR__ . '/../..' . '/classes/Bulk/BulkInterface.php',
186
- 'Imagify\\Bulk\\CustomFolders' => __DIR__ . '/../..' . '/classes/Bulk/CustomFolders.php',
187
- 'Imagify\\Bulk\\Noop' => __DIR__ . '/../..' . '/classes/Bulk/Noop.php',
188
- 'Imagify\\Bulk\\WP' => __DIR__ . '/../..' . '/classes/Bulk/WP.php',
189
- 'Imagify\\CDN\\PushCDNInterface' => __DIR__ . '/../..' . '/classes/CDN/PushCDNInterface.php',
190
- 'Imagify\\Context\\AbstractContext' => __DIR__ . '/../..' . '/classes/Context/AbstractContext.php',
191
- 'Imagify\\Context\\ContextInterface' => __DIR__ . '/../..' . '/classes/Context/ContextInterface.php',
192
- 'Imagify\\Context\\CustomFolders' => __DIR__ . '/../..' . '/classes/Context/CustomFolders.php',
193
- 'Imagify\\Context\\Noop' => __DIR__ . '/../..' . '/classes/Context/Noop.php',
194
- 'Imagify\\Context\\WP' => __DIR__ . '/../..' . '/classes/Context/WP.php',
195
- 'Imagify\\DB\\DBInterface' => __DIR__ . '/../..' . '/classes/DB/DBInterface.php',
196
- 'Imagify\\Deprecated\\Traits\\Media\\CustomFoldersDeprecatedTrait' => __DIR__ . '/../..' . '/inc/deprecated/Traits/Media/CustomFoldersDeprecatedTrait.php',
197
- 'Imagify\\Deprecated\\Traits\\Media\\NGGDeprecatedTrait' => __DIR__ . '/../..' . '/inc/deprecated/Traits/Media/NGGDeprecatedTrait.php',
198
- 'Imagify\\Deprecated\\Traits\\Media\\NoopDeprecatedTrait' => __DIR__ . '/../..' . '/inc/deprecated/Traits/Media/NoopDeprecatedTrait.php',
199
- 'Imagify\\Deprecated\\Traits\\Media\\WPDeprecatedTrait' => __DIR__ . '/../..' . '/inc/deprecated/Traits/Media/WPDeprecatedTrait.php',
200
- 'Imagify\\Deprecated\\Traits\\Optimization\\Process\\AbstractProcessDeprecatedTrait' => __DIR__ . '/../..' . '/inc/deprecated/Traits/Optimization/Process/AbstractProcessDeprecatedTrait.php',
201
- 'Imagify\\Imagifybeat\\Actions' => __DIR__ . '/../..' . '/classes/Imagifybeat/Actions.php',
202
- 'Imagify\\Imagifybeat\\Core' => __DIR__ . '/../..' . '/classes/Imagifybeat/Core.php',
203
- 'Imagify\\Job\\MediaOptimization' => __DIR__ . '/../..' . '/classes/Job/MediaOptimization.php',
204
- 'Imagify\\Media\\AbstractMedia' => __DIR__ . '/../..' . '/classes/Media/AbstractMedia.php',
205
- 'Imagify\\Media\\CustomFolders' => __DIR__ . '/../..' . '/classes/Media/CustomFolders.php',
206
- 'Imagify\\Media\\MediaInterface' => __DIR__ . '/../..' . '/classes/Media/MediaInterface.php',
207
- 'Imagify\\Media\\Noop' => __DIR__ . '/../..' . '/classes/Media/Noop.php',
208
- 'Imagify\\Media\\WP' => __DIR__ . '/../..' . '/classes/Media/WP.php',
209
- 'Imagify\\Optimization\\Data\\AbstractData' => __DIR__ . '/../..' . '/classes/Optimization/Data/AbstractData.php',
210
- 'Imagify\\Optimization\\Data\\CustomFolders' => __DIR__ . '/../..' . '/classes/Optimization/Data/CustomFolders.php',
211
- 'Imagify\\Optimization\\Data\\DataInterface' => __DIR__ . '/../..' . '/classes/Optimization/Data/DataInterface.php',
212
- 'Imagify\\Optimization\\Data\\Noop' => __DIR__ . '/../..' . '/classes/Optimization/Data/Noop.php',
213
- 'Imagify\\Optimization\\Data\\WP' => __DIR__ . '/../..' . '/classes/Optimization/Data/WP.php',
214
- 'Imagify\\Optimization\\File' => __DIR__ . '/../..' . '/classes/Optimization/File.php',
215
- 'Imagify\\Optimization\\Process\\AbstractProcess' => __DIR__ . '/../..' . '/classes/Optimization/Process/AbstractProcess.php',
216
- 'Imagify\\Optimization\\Process\\CustomFolders' => __DIR__ . '/../..' . '/classes/Optimization/Process/CustomFolders.php',
217
- 'Imagify\\Optimization\\Process\\Noop' => __DIR__ . '/../..' . '/classes/Optimization/Process/Noop.php',
218
- 'Imagify\\Optimization\\Process\\ProcessInterface' => __DIR__ . '/../..' . '/classes/Optimization/Process/ProcessInterface.php',
219
- 'Imagify\\Optimization\\Process\\WP' => __DIR__ . '/../..' . '/classes/Optimization/Process/WP.php',
220
- 'Imagify\\Stats\\OptimizedMediaWithoutWebp' => __DIR__ . '/../..' . '/classes/Stats/OptimizedMediaWithoutWebp.php',
221
- 'Imagify\\Stats\\StatInterface' => __DIR__ . '/../..' . '/classes/Stats/StatInterface.php',
222
- 'Imagify\\ThirdParty\\AS3CF\\CDN\\WP\\AS3' => __DIR__ . '/../..' . '/inc/3rd-party/amazon-s3-and-cloudfront/classes/CDN/WP/AS3.php',
223
- 'Imagify\\ThirdParty\\AS3CF\\Main' => __DIR__ . '/../..' . '/inc/3rd-party/amazon-s3-and-cloudfront/classes/Main.php',
224
- 'Imagify\\ThirdParty\\EnableMediaReplace\\Main' => __DIR__ . '/../..' . '/inc/3rd-party/enable-media-replace/classes/Main.php',
225
- 'Imagify\\ThirdParty\\FormidablePro\\Main' => __DIR__ . '/../..' . '/inc/3rd-party/formidable-pro/classes/Main.php',
226
- 'Imagify\\ThirdParty\\NGG\\Bulk\\NGG' => __DIR__ . '/../..' . '/inc/3rd-party/nextgen-gallery/classes/Bulk/NGG.php',
227
- 'Imagify\\ThirdParty\\NGG\\Context\\NGG' => __DIR__ . '/../..' . '/inc/3rd-party/nextgen-gallery/classes/Context/NGG.php',
228
- 'Imagify\\ThirdParty\\NGG\\DB' => __DIR__ . '/../..' . '/inc/3rd-party/nextgen-gallery/classes/DB.php',
229
- 'Imagify\\ThirdParty\\NGG\\DynamicThumbnails' => __DIR__ . '/../..' . '/inc/3rd-party/nextgen-gallery/classes/DynamicThumbnails.php',
230
- 'Imagify\\ThirdParty\\NGG\\Main' => __DIR__ . '/../..' . '/inc/3rd-party/nextgen-gallery/classes/Main.php',
231
- 'Imagify\\ThirdParty\\NGG\\Media\\NGG' => __DIR__ . '/../..' . '/inc/3rd-party/nextgen-gallery/classes/Media/NGG.php',
232
- 'Imagify\\ThirdParty\\NGG\\NGGStorage' => __DIR__ . '/../..' . '/inc/3rd-party/nextgen-gallery/classes/NGGStorage.php',
233
- 'Imagify\\ThirdParty\\NGG\\Optimization\\Data\\NGG' => __DIR__ . '/../..' . '/inc/3rd-party/nextgen-gallery/classes/Optimization/Data/NGG.php',
234
- 'Imagify\\ThirdParty\\NGG\\Optimization\\Process\\NGG' => __DIR__ . '/../..' . '/inc/3rd-party/nextgen-gallery/classes/Optimization/Process/NGG.php',
235
- 'Imagify\\ThirdParty\\RegenerateThumbnails\\Main' => __DIR__ . '/../..' . '/inc/3rd-party/regenerate-thumbnails/classes/Main.php',
236
- 'Imagify\\ThirdParty\\WPRocket\\Main' => __DIR__ . '/../..' . '/inc/3rd-party/wp-rocket/classes/Main.php',
237
- 'Imagify\\Traits\\InstanceGetterTrait' => __DIR__ . '/../..' . '/classes/Traits/InstanceGetterTrait.php',
238
- 'Imagify\\Traits\\MediaRowTrait' => __DIR__ . '/../..' . '/classes/Traits/MediaRowTrait.php',
239
- 'Imagify\\Webp\\Apache' => __DIR__ . '/../..' . '/classes/Webp/Apache.php',
240
- 'Imagify\\Webp\\Display' => __DIR__ . '/../..' . '/classes/Webp/Display.php',
241
- 'Imagify\\Webp\\IIS' => __DIR__ . '/../..' . '/classes/Webp/IIS.php',
242
- 'Imagify\\Webp\\Picture\\Display' => __DIR__ . '/../..' . '/classes/Webp/Picture/Display.php',
243
- 'Imagify\\Webp\\RewriteRules\\Apache' => __DIR__ . '/../..' . '/classes/Webp/RewriteRules/Apache.php',
244
- 'Imagify\\Webp\\RewriteRules\\Display' => __DIR__ . '/../..' . '/classes/Webp/RewriteRules/Display.php',
245
- 'Imagify\\Webp\\RewriteRules\\IIS' => __DIR__ . '/../..' . '/classes/Webp/RewriteRules/IIS.php',
246
- 'Imagify\\Webp\\RewriteRules\\Nginx' => __DIR__ . '/../..' . '/classes/Webp/RewriteRules/Nginx.php',
247
- 'Imagify\\WriteFile\\AbstractApacheDirConfFile' => __DIR__ . '/../..' . '/classes/WriteFile/AbstractApacheDirConfFile.php',
248
- 'Imagify\\WriteFile\\AbstractIISDirConfFile' => __DIR__ . '/../..' . '/classes/WriteFile/AbstractIISDirConfFile.php',
249
- 'Imagify\\WriteFile\\AbstractNginxDirConfFile' => __DIR__ . '/../..' . '/classes/WriteFile/AbstractNginxDirConfFile.php',
250
- 'Imagify\\WriteFile\\AbstractWriteDirConfFile' => __DIR__ . '/../..' . '/classes/WriteFile/AbstractWriteDirConfFile.php',
251
- 'Imagify\\WriteFile\\WriteFileInterface' => __DIR__ . '/../..' . '/classes/WriteFile/WriteFileInterface.php',
252
  'Imagify_AS3CF_Attachment' => __DIR__ . '/../..' . '/inc/deprecated/classes/class-imagify-as3cf-attachment.php',
253
  'Imagify_AS3CF_Deprecated' => __DIR__ . '/../..' . '/inc/deprecated/classes/class-imagify-as3cf-deprecated.php',
254
  'Imagify_Abstract_Attachment' => __DIR__ . '/../..' . '/inc/deprecated/classes/class-imagify-abstract-attachment.php',
@@ -297,9 +129,9 @@ class ComposerStaticInitee5f379dcd1f5ddc8ae5536c97dc2605
297
  public static function getInitializer(ClassLoaderWPMediaImagifyWordPressPlugin $loader)
298
  {
299
  return \Closure::bind(function () use ($loader) {
300
- $loader->prefixLengthsPsr4 = ComposerStaticInitee5f379dcd1f5ddc8ae5536c97dc2605::$prefixLengthsPsr4;
301
- $loader->prefixDirsPsr4 = ComposerStaticInitee5f379dcd1f5ddc8ae5536c97dc2605::$prefixDirsPsr4;
302
- $loader->classMap = ComposerStaticInitee5f379dcd1f5ddc8ae5536c97dc2605::$classMap;
303
 
304
  }, null, ClassLoaderWPMediaImagifyWordPressPlugin::class);
305
  }
7
  use Composer\AutoloadWPMediaImagifyWordPressPlugin\ClassLoader as ClassLoaderWPMediaImagifyWordPressPlugin;
8
 
9
 
10
+ class ComposerStaticInit27c2f21fb0be1f8c2ef63f80977ab942
11
  {
12
  public static $prefixLengthsPsr4 = array (
13
  'I' =>
80
  );
81
 
82
  public static $classMap = array (
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
83
  'Imagify' => __DIR__ . '/../..' . '/inc/classes/class-imagify.php',
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
84
  'Imagify_AS3CF_Attachment' => __DIR__ . '/../..' . '/inc/deprecated/classes/class-imagify-as3cf-attachment.php',
85
  'Imagify_AS3CF_Deprecated' => __DIR__ . '/../..' . '/inc/deprecated/classes/class-imagify-as3cf-deprecated.php',
86
  'Imagify_Abstract_Attachment' => __DIR__ . '/../..' . '/inc/deprecated/classes/class-imagify-abstract-attachment.php',
129
  public static function getInitializer(ClassLoaderWPMediaImagifyWordPressPlugin $loader)
130
  {
131
  return \Closure::bind(function () use ($loader) {
132
+ $loader->prefixLengthsPsr4 = ComposerStaticInit27c2f21fb0be1f8c2ef63f80977ab942::$prefixLengthsPsr4;
133
+ $loader->prefixDirsPsr4 = ComposerStaticInit27c2f21fb0be1f8c2ef63f80977ab942::$prefixDirsPsr4;
134
+ $loader->classMap = ComposerStaticInit27c2f21fb0be1f8c2ef63f80977ab942::$classMap;
135
 
136
  }, null, ClassLoaderWPMediaImagifyWordPressPlugin::class);
137
  }
vendor/composer/installed.json CHANGED
@@ -1,17 +1,17 @@
1
  [
2
  {
3
  "name": "composer/installers",
4
- "version": "v1.10.0",
5
- "version_normalized": "1.10.0.0",
6
  "source": {
7
  "type": "git",
8
  "url": "https://github.com/composer/installers.git",
9
- "reference": "1a0357fccad9d1cc1ea0c9a05b8847fbccccb78d"
10
  },
11
  "dist": {
12
  "type": "zip",
13
- "url": "https://api.github.com/repos/composer/installers/zipball/1a0357fccad9d1cc1ea0c9a05b8847fbccccb78d",
14
- "reference": "1a0357fccad9d1cc1ea0c9a05b8847fbccccb78d",
15
  "shasum": ""
16
  },
17
  "require": {
@@ -29,7 +29,7 @@
29
  "symfony/phpunit-bridge": "^4.2 || ^5",
30
  "symfony/process": "^2.3"
31
  },
32
- "time": "2021-01-14T11:07:16+00:00",
33
  "type": "composer-plugin",
34
  "extra": {
35
  "class": "Composer\\Installers\\Plugin",
@@ -107,6 +107,7 @@
107
  "majima",
108
  "mako",
109
  "mediawiki",
 
110
  "modulework",
111
  "modx",
112
  "moodle",
@@ -124,6 +125,7 @@
124
  "sydes",
125
  "sylius",
126
  "symfony",
 
127
  "typo3",
128
  "wordpress",
129
  "yawik",
1
  [
2
  {
3
  "name": "composer/installers",
4
+ "version": "v1.11.0",
5
+ "version_normalized": "1.11.0.0",
6
  "source": {
7
  "type": "git",
8
  "url": "https://github.com/composer/installers.git",
9
+ "reference": "ae03311f45dfe194412081526be2e003960df74b"
10
  },
11
  "dist": {
12
  "type": "zip",
13
+ "url": "https://api.github.com/repos/composer/installers/zipball/ae03311f45dfe194412081526be2e003960df74b",
14
+ "reference": "ae03311f45dfe194412081526be2e003960df74b",
15
  "shasum": ""
16
  },
17
  "require": {
29
  "symfony/phpunit-bridge": "^4.2 || ^5",
30
  "symfony/process": "^2.3"
31
  },
32
+ "time": "2021-04-28T06:42:17+00:00",
33
  "type": "composer-plugin",
34
  "extra": {
35
  "class": "Composer\\Installers\\Plugin",
107
  "majima",
108
  "mako",
109
  "mediawiki",
110
+ "miaoxing",
111
  "modulework",
112
  "modx",
113
  "moodle",
125
  "sydes",
126
  "sylius",
127
  "symfony",
128
+ "tastyigniter",
129
  "typo3",
130
  "wordpress",
131
  "yawik",
vendor/composer/installers/composer.json CHANGED
@@ -46,6 +46,7 @@
46
  "MODX",
47
  "MODX Evo",
48
  "MediaWiki",
 
49
  "OXID",
50
  "osclass",
51
  "MODULEWork",
@@ -68,6 +69,7 @@
68
  "SyDES",
69
  "Sylius",
70
  "symfony",
 
71
  "Thelia",
72
  "TYPO3",
73
  "WHMCS",
46
  "MODX",
47
  "MODX Evo",
48
  "MediaWiki",
49
+ "Miaoxing",
50
  "OXID",
51
  "osclass",
52
  "MODULEWork",
69
  "SyDES",
70
  "Sylius",
71
  "symfony",
72
+ "TastyIgniter",
73
  "Thelia",
74
  "TYPO3",
75
  "WHMCS",
vendor/composer/installers/src/Composer/Installers/Installer.php CHANGED
@@ -50,6 +50,7 @@ class Installer extends LibraryInstaller
50
  'fuelphp' => 'FuelphpInstaller',
51
  'grav' => 'GravInstaller',
52
  'hurad' => 'HuradInstaller',
 
53
  'imagecms' => 'ImageCMSInstaller',
54
  'itop' => 'ItopInstaller',
55
  'joomla' => 'JoomlaInstaller',
@@ -69,6 +70,7 @@ class Installer extends LibraryInstaller
69
  'maya' => 'MayaInstaller',
70
  'mautic' => 'MauticInstaller',
71
  'mediawiki' => 'MediaWikiInstaller',
 
72
  'microweber' => 'MicroweberInstaller',
73
  'modulework' => 'MODULEWorkInstaller',
74
  'modx' => 'ModxInstaller',
@@ -77,7 +79,7 @@ class Installer extends LibraryInstaller
77
  'october' => 'OctoberInstaller',
78
  'ontowiki' => 'OntoWikiInstaller',
79
  'oxid' => 'OxidInstaller',
80
- 'osclass' => 'OsclassInstaller',
81
  'pxcms' => 'PxcmsInstaller',
82
  'phpbb' => 'PhpBBInstaller',
83
  'pimcore' => 'PimcoreInstaller',
@@ -109,6 +111,7 @@ class Installer extends LibraryInstaller
109
  'userfrosting' => 'UserFrostingInstaller',
110
  'vanilla' => 'VanillaInstaller',
111
  'whmcs' => 'WHMCSInstaller',
 
112
  'wolfcms' => 'WolfCMSInstaller',
113
  'wordpress' => 'WordPressInstaller',
114
  'yawik' => 'YawikInstaller',
50
  'fuelphp' => 'FuelphpInstaller',
51
  'grav' => 'GravInstaller',
52
  'hurad' => 'HuradInstaller',
53
+ 'tastyigniter' => 'TastyIgniterInstaller',
54
  'imagecms' => 'ImageCMSInstaller',
55
  'itop' => 'ItopInstaller',
56
  'joomla' => 'JoomlaInstaller',
70
  'maya' => 'MayaInstaller',
71
  'mautic' => 'MauticInstaller',
72
  'mediawiki' => 'MediaWikiInstaller',
73
+ 'miaoxing' => 'MiaoxingInstaller',
74
  'microweber' => 'MicroweberInstaller',
75
  'modulework' => 'MODULEWorkInstaller',
76
  'modx' => 'ModxInstaller',
79
  'october' => 'OctoberInstaller',
80
  'ontowiki' => 'OntoWikiInstaller',
81
  'oxid' => 'OxidInstaller',
82
+ 'osclass' => 'OsclassInstaller',
83
  'pxcms' => 'PxcmsInstaller',
84
  'phpbb' => 'PhpBBInstaller',
85
  'pimcore' => 'PimcoreInstaller',
111
  'userfrosting' => 'UserFrostingInstaller',
112
  'vanilla' => 'VanillaInstaller',
113
  'whmcs' => 'WHMCSInstaller',
114
+ 'winter' => 'WinterInstaller',
115
  'wolfcms' => 'WolfCMSInstaller',
116
  'wordpress' => 'WordPressInstaller',
117
  'yawik' => 'YawikInstaller',
vendor/composer/installers/src/Composer/Installers/MauticInstaller.php CHANGED
@@ -1,22 +1,45 @@
1
  <?php
2
  namespace Composer\Installers;
3
 
 
 
4
  class MauticInstaller extends BaseInstaller
5
  {
6
  protected $locations = array(
7
- 'plugin' => 'plugins/{$name}/',
8
- 'theme' => 'themes/{$name}/',
 
9
  );
10
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
11
  /**
12
  * Format package name of mautic-plugins to CamelCase
13
  */
14
  public function inflectPackageVars($vars)
15
  {
16
- if ($vars['type'] == 'mautic-plugin') {
17
- $vars['name'] = preg_replace_callback('/(-[a-z])/', function ($matches) {
18
- return strtoupper($matches[0][1]);
19
- }, ucfirst($vars['name']));
20
  }
21
 
22
  return $vars;
1
  <?php
2
  namespace Composer\Installers;
3
 
4
+ use Composer\Package\PackageInterface;
5
+
6
  class MauticInstaller extends BaseInstaller
7
  {
8
  protected $locations = array(
9
+ 'plugin' => 'plugins/{$name}/',
10
+ 'theme' => 'themes/{$name}/',
11
+ 'core' => 'app/',
12
  );
13
 
14
+ private function getDirectoryName()
15
+ {
16
+ $extra = $this->package->getExtra();
17
+ if (!empty($extra['install-directory-name'])) {
18
+ return $extra['install-directory-name'];
19
+ }
20
+
21
+ return $this->toCamelCase($this->package->getPrettyName());
22
+ }
23
+
24
+ /**
25
+ * @param string $packageName
26
+ *
27
+ * @return string
28
+ */
29
+ private function toCamelCase($packageName)
30
+ {
31
+ return str_replace(' ', '', ucwords(str_replace('-', ' ', basename($packageName))));
32
+ }
33
+
34
  /**
35
  * Format package name of mautic-plugins to CamelCase
36
  */
37
  public function inflectPackageVars($vars)
38
  {
39
+
40
+ if ($vars['type'] == 'mautic-plugin' || $vars['type'] == 'mautic-theme') {
41
+ $directoryName = $this->getDirectoryName();
42
+ $vars['name'] = $directoryName;
43
  }
44
 
45
  return $vars;
vendor/composer/installers/src/Composer/Installers/MiaoxingInstaller.php ADDED
@@ -0,0 +1,10 @@
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ namespace Composer\Installers;
4
+
5
+ class MiaoxingInstaller extends BaseInstaller
6
+ {
7
+ protected $locations = array(
8
+ 'plugin' => 'plugins/{$name}/',
9
+ );
10
+ }
vendor/composer/installers/src/Composer/Installers/OctoberInstaller.php CHANGED
@@ -6,7 +6,7 @@ class OctoberInstaller extends BaseInstaller
6
  protected $locations = array(
7
  'module' => 'modules/{$name}/',
8
  'plugin' => 'plugins/{$vendor}/{$name}/',
9
- 'theme' => 'themes/{$name}/'
10
  );
11
 
12
  /**
@@ -41,6 +41,7 @@ class OctoberInstaller extends BaseInstaller
41
  protected function inflectThemeVars($vars)
42
  {
43
  $vars['name'] = preg_replace('/^oc-|-theme$/', '', $vars['name']);
 
44
 
45
  return $vars;
46
  }
6
  protected $locations = array(
7
  'module' => 'modules/{$name}/',
8
  'plugin' => 'plugins/{$vendor}/{$name}/',
9
+ 'theme' => 'themes/{$vendor}-{$name}/'
10
  );
11
 
12
  /**
41
  protected function inflectThemeVars($vars)
42
  {
43
  $vars['name'] = preg_replace('/^oc-|-theme$/', '', $vars['name']);
44
+ $vars['vendor'] = preg_replace('/[^a-z0-9_]/i', '', $vars['vendor']);
45
 
46
  return $vars;
47
  }
vendor/composer/installers/src/Composer/Installers/TastyIgniterInstaller.php ADDED
@@ -0,0 +1,32 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ namespace Composer\Installers;
4
+
5
+ class TastyIgniterInstaller extends BaseInstaller
6
+ {
7
+ protected $locations = array(
8
+ 'extension' => 'extensions/{$vendor}/{$name}/',
9
+ 'theme' => 'themes/{$name}/',
10
+ );
11
+
12
+ /**
13
+ * Format package name.
14
+ *
15
+ * Cut off leading 'ti-ext-' or 'ti-theme-' if present.
16
+ * Strip vendor name of characters that is not alphanumeric or an underscore
17
+ *
18
+ */
19
+ public function inflectPackageVars($vars)
20
+ {
21
+ if ($vars['type'] === 'tastyigniter-extension') {
22
+ $vars['vendor'] = preg_replace('/[^a-z0-9_]/i', '', $vars['vendor']);
23
+ $vars['name'] = preg_replace('/^ti-ext-/', '', $vars['name']);
24
+ }
25
+
26
+ if ($vars['type'] === 'tastyigniter-theme') {
27
+ $vars['name'] = preg_replace('/^ti-theme-/', '', $vars['name']);
28
+ }
29
+
30
+ return $vars;
31
+ }
32
+ }
vendor/composer/installers/src/Composer/Installers/WinterInstaller.php ADDED
@@ -0,0 +1,58 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ namespace Composer\Installers;
3
+
4
+ class WinterInstaller extends BaseInstaller
5
+ {
6
+ protected $locations = array(
7
+ 'module' => 'modules/{$name}/',
8
+ 'plugin' => 'plugins/{$vendor}/{$name}/',
9
+ 'theme' => 'themes/{$name}/'
10
+ );
11
+
12
+ /**
13
+ * Format package name.
14
+ *
15
+ * For package type winter-plugin, cut off a trailing '-plugin' if present.
16
+ *
17
+ * For package type winter-theme, cut off a trailing '-theme' if present.
18
+ *
19
+ */
20
+ public function inflectPackageVars($vars)
21
+ {
22
+ if ($vars['type'] === 'winter-module') {
23
+ return $this->inflectModuleVars($vars);
24
+ }
25
+
26
+ if ($vars['type'] === 'winter-plugin') {
27
+ return $this->inflectPluginVars($vars);
28
+ }
29
+
30
+ if ($vars['type'] === 'winter-theme') {
31
+ return $this->inflectThemeVars($vars);
32
+ }
33
+
34
+ return $vars;
35
+ }
36
+
37
+ protected function inflectModuleVars($vars)
38
+ {
39
+ $vars['name'] = preg_replace('/^wn-|-module$/', '', $vars['name']);
40
+
41
+ return $vars;
42
+ }
43
+
44
+ protected function inflectPluginVars($vars)
45
+ {
46
+ $vars['name'] = preg_replace('/^wn-|-plugin$/', '', $vars['name']);
47
+ $vars['vendor'] = preg_replace('/[^a-z0-9_]/i', '', $vars['vendor']);
48
+
49
+ return $vars;
50
+ }
51
+
52
+ protected function inflectThemeVars($vars)
53
+ {
54
+ $vars['name'] = preg_replace('/^wn-|-theme$/', '', $vars['name']);
55
+
56
+ return $vars;
57
+ }
58
+ }
views/button/delete-webp.php CHANGED
@@ -22,7 +22,7 @@ $html_atts = $this->build_attributes( $data['atts'] );
22
 
23
  <a href="<?php echo esc_url( $data['url'] ); ?>"<?php echo $html_atts; ?>>
24
  <span class="dashicons dashicons-image-rotate"></span>
25
- <?php esc_html_e( 'Delete webp images', 'imagify' ); ?>
26
  </a>
27
 
28
  <?php
22
 
23
  <a href="<?php echo esc_url( $data['url'] ); ?>"<?php echo $html_atts; ?>>
24
  <span class="dashicons dashicons-image-rotate"></span>
25
+ <?php esc_html_e( 'Delete WebP images', 'imagify' ); ?>
26
  </a>
27
 
28
  <?php
views/button/generate-webp.php CHANGED
@@ -23,7 +23,7 @@ $html_atts = $this->build_attributes( $data['atts'] );
23
  <a href="<?php echo esc_url( $data['url'] ); ?>"<?php echo $html_atts; ?>>
24
  <span class="dashicons dashicons-admin-generic"></span>
25
  <?php
26
- esc_html_e( 'Generate webp versions', 'imagify' );
27
  ?>
28
  </a>
29
 
23
  <a href="<?php echo esc_url( $data['url'] ); ?>"<?php echo $html_atts; ?>>
24
  <span class="dashicons dashicons-admin-generic"></span>
25
  <?php
26
+ esc_html_e( 'Generate WebP versions', 'imagify' );
27
  ?>
28
  </a>
29
 
views/notice-almost-over-quota.php CHANGED
@@ -29,9 +29,10 @@ $views = Imagify_Views::get_instance();
29
  </div>
30
  <p>
31
  <?php esc_html_e( 'You are running out of credit! Don’t forget to upgrade your Imagify’s account.', 'imagify' ); ?>
32
-
33
- <a target="_blank" class="button imagify-button imagify-button-secondary button-mini" href="<?php echo esc_url( imagify_get_external_url( 'subscription' ) ); ?>"><?php esc_html_e( 'See our plans', 'imagify' ); ?></a>
34
  </p>
 
 
 
35
  <?php
36
  $this->print_template( 'notice-footer', array(
37
  'dismissible' => 'almost-over-quota',
29
  </div>
30
  <p>
31
  <?php esc_html_e( 'You are running out of credit! Don’t forget to upgrade your Imagify’s account.', 'imagify' ); ?>
 
 
32
  </p>
33
+ <div class="imagify-notice-quota-btn-container">
34
+ <a target="_blank" class="button imagify-button imagify-button-secondary button-mini" href="<?php echo esc_url( imagify_get_external_url( 'subscription' ) ); ?>"><?php esc_html_e( 'See our plans', 'imagify' ); ?></a>
35
+ </div>
36
  <?php
37
  $this->print_template( 'notice-footer', array(
38
  'dismissible' => 'almost-over-quota',
views/notice-wp-rocket.php CHANGED
@@ -2,7 +2,6 @@
2
  defined( 'ABSPATH' ) || die( 'Cheatin’ uh?' );
3
 
4
  $dismiss_url = get_imagify_admin_url( 'dismiss-notice', 'wp-rocket' );
5
- $coupon_code = 'IMAGIFY20';
6
  $wprocket_url = imagify_get_wp_rocket_url();
7
  ?>
8
  <div class="updated imagify-rkt-notice">
@@ -14,17 +13,8 @@ $wprocket_url = imagify_get_wp_rocket_url();
14
  <p class="imagify-rkt-msg">
15
  <?php
16
  esc_html_e( 'Discover the best caching plugin to speed up your website.', 'imagify' );
17
- echo '<br>';
18
- printf(
19
- /* translators: 1 is a "bold" tag start, 2 is a pourcentage, 3 is the "bold" tag end, 4 is a coupon code. */
20
- esc_html__( '%1$sGet %2$s off%3$s with this coupon code: %4$s', 'imagify' ),
21
- '<strong>', '20%', '</strong>', $coupon_code
22
- );
23
  ?>
24
  </p>
25
- <p class="imagify-rkt-coupon">
26
- <span class="imagify-rkt-coupon-code"><?php echo $coupon_code; ?></span>
27
- </p>
28
  <p class="imagify-rkt-cta">
29
  <a target="_blank" href="<?php echo esc_url( $wprocket_url ); ?>" class="button button-primary tgm-plugin-update-modal"><?php esc_html_e( 'Get WP Rocket now', 'imagify' ); ?></a>
30
  </p>
2
  defined( 'ABSPATH' ) || die( 'Cheatin’ uh?' );
3
 
4
  $dismiss_url = get_imagify_admin_url( 'dismiss-notice', 'wp-rocket' );
 
5
  $wprocket_url = imagify_get_wp_rocket_url();
6
  ?>
7
  <div class="updated imagify-rkt-notice">
13
  <p class="imagify-rkt-msg">
14
  <?php
15
  esc_html_e( 'Discover the best caching plugin to speed up your website.', 'imagify' );
 
 
 
 
 
 
16
  ?>
17
  </p>
 
 
 
18
  <p class="imagify-rkt-cta">
19
  <a target="_blank" href="<?php echo esc_url( $wprocket_url ); ?>" class="button button-primary tgm-plugin-update-modal"><?php esc_html_e( 'Get WP Rocket now', 'imagify' ); ?></a>
20
  </p>
views/page-bulk.php CHANGED
@@ -89,11 +89,12 @@ defined( 'ABSPATH' ) || die( 'Cheatin’ uh?' );
89
  $user = new Imagify_User();
90
  ?>
91
  <div class="imagify-options-title">
92
- <p class="imagify-meteo-title">
93
  <span class="dashicons dashicons-admin-users"></span>
94
- <?php esc_html_e( 'Your Account', 'imagify' ); ?>
95
- </p>
96
-
 
97
  <a href="<?php echo esc_url( imagify_get_external_url( 'subscription' ) ); ?>" target="_blank"><?php _e( 'View your profile', 'imagify' ); ?></a>
98
 
99
  <p class="imagify-meteo-subs">
89
  $user = new Imagify_User();
90
  ?>
91
  <div class="imagify-options-title">
92
+ <div class="imagify-th-titles imagify-flex imagify-vcenter">
93
  <span class="dashicons dashicons-admin-users"></span>
94
+ <p class="imagify-meteo-title">
95
+ <?php esc_html_e( 'Your Account', 'imagify' ); ?>
96
+ </p>
97
+ </div>
98
  <a href="<?php echo esc_url( imagify_get_external_url( 'subscription' ) ); ?>" target="_blank"><?php _e( 'View your profile', 'imagify' ); ?></a>
99
 
100
  <p class="imagify-meteo-subs">
views/page-settings.php CHANGED
@@ -19,198 +19,199 @@ $wrapper_class = isset( $notices[ $notice ] ) || defined( 'WP_ROCKET_VERSION' )
19
  <div class="imagify-col imagify-main">
20
 
21
  <?php $this->print_template( 'part-settings-header' ); ?>
 
 
22
 
23
- <form action="<?php echo esc_url( $settings->get_form_action() ); ?>" id="imagify-settings" method="post">
24
 
25
- <div class="imagify-settings-main-content<?php echo Imagify_Requirements::is_api_key_valid() ? '' : ' imagify-no-api-key'; ?>">
 
 
26
 
27
- <?php settings_fields( $settings->get_settings_group() ); ?>
28
- <?php wp_nonce_field( 'imagify-signup', 'imagifysignupnonce', false ); ?>
29
- <?php wp_nonce_field( 'imagify-check-api-key', 'imagifycheckapikeynonce', false ); ?>
30
-
31
- <?php
32
- if ( ! Imagify_Requirements::is_api_key_valid() ) {
33
- $this->print_template( 'part-settings-account' );
34
- $this->print_template( 'part-settings-footer' );
35
- }
36
- ?>
37
-
38
- <div class="imagify-col imagify-shared-with-account-col<?php echo $hidden_class; ?>">
39
- <div class="imagify-settings-section">
40
-
41
- <h2 class="imagify-options-title"><?php _e( 'General Settings', 'imagify' ); ?></h2>
42
-
43
- <p class="imagify-options-subtitle" id="imagify-optimization-level-label">
44
- <?php _e( 'Optimization Level', 'imagify' ); ?>
45
-
46
- <span class="imagify-info">
47
- <span class="dashicons dashicons-info"></span>
48
- <a href="#imagify-more-info" class="imagify-modal-trigger"><?php _e( 'More info?', 'imagify' ); ?></a>
49
- </span>
50
- </p>
51
 
52
- <div class="imagify-setting-optim-level">
53
- <p class="imagify-inline-options">
54
- <input type="radio" id="imagify-optimization_level_normal" name="<?php echo $option_name; ?>[optimization_level]" value="0" <?php checked( $options->get( 'optimization_level' ), 0 ); ?> aria-describedby="imagify-optimization-level-label">
55
- <label for="imagify-optimization_level_normal">
56
- <?php _e( 'Normal', 'imagify' ); ?>
57
- </label>
58
 
59
- <input type="radio" id="imagify-optimization_level_aggro" name="<?php echo $option_name; ?>[optimization_level]" value="1" <?php checked( $options->get( 'optimization_level' ), 1 ); ?> aria-describedby="imagify-optimization-level-label">
60
- <label for="imagify-optimization_level_aggro">
61
- <?php _e( 'Aggressive', 'imagify' ); ?>
62
- </label>
63
 
64
- <input type="radio" id="imagify-optimization_level_ultra" name="<?php echo $option_name; ?>[optimization_level]" value="2" <?php checked( $options->get( 'optimization_level' ), 2 ); ?> aria-describedby="imagify-optimization-level-label">
65
- <label for="imagify-optimization_level_ultra">
66
- <?php _e( 'Ultra', 'imagify' ); ?>
67
- </label>
68
- </p>
69
 
70
- <p class="imagify-visual-comparison-text">
71
- <?php
72
- printf(
73
- /* translators: 1 is a button tag start, 2 is the button tag end. */
74
- __( 'Need help to choose? %1$sTry the Visual Comparison%2$s', 'imagify' ),
75
- '<button type="button" class="button button-primary button-mini-flat imagify-visual-comparison-btn imagify-modal-trigger" data-target="#imagify-visual-comparison">',
76
- '</button>'
77
- );
78
- ?>
79
  </p>
80
- </div>
81
 
82
- <p class="imagify-setting-line">
83
- <?php
84
- $settings->field_checkbox( array(
85
- 'option_name' => 'auto_optimize',
86
- 'label' => __( 'Auto-Optimize images on upload', 'imagify' ),
87
- 'info' => __( 'Automatically optimize every image you upload to WordPress.', 'imagify' ),
88
- ) );
89
- ?>
90
- </p>
91
-
92
- <p class="imagify-setting-line">
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
93
  <?php
94
  $settings->field_checkbox( array(
95
- 'option_name' => 'backup',
96
- 'label' => __( 'Backup original images', 'imagify' ),
97
- 'info' => __( 'Keep your original images in a separate folder before optimization process.', 'imagify' ),
98
  ) );
99
-
100
- $backup_error_class = $options->get( 'backup' ) && ! Imagify_Requirements::attachments_backup_dir_is_writable() ? '' : ' hidden';
101
  ?>
102
- <br/><strong id="backup-dir-is-writable" class="imagify-error<?php echo $backup_error_class; ?>" data-nonce="<?php echo esc_attr( wp_create_nonce( 'imagify_check_backup_dir_is_writable' ) ); ?>">
 
 
103
  <?php
104
- $backup_path = $this->filesystem->make_path_relative( get_imagify_backup_dir_path( true ) );
105
- /* translators: %s is a file path. */
106
- printf( __( 'The backup folder %s cannot be created or is not writable by the server, original images cannot be saved!', 'imagify' ), "<code>$backup_path</code>" );
107
- ?>
108
- </strong>
109
- </p>
110
 
111
- <p class="imagify-setting-line">
112
- <?php
113
- $info = __( 'EXIF data is information stored in your pictures like shutter speed, exposure compensation, ISO, etc...', 'imagify' );
114
- $info .= ' <a href="' . esc_url( imagify_get_external_url( 'exif' ) ) . '" target="_blank">' . __( 'Learn more', 'imagify' ) . '</a><br/><br/>';
115
- $info .= __( 'If you are a photographer, you may be interested in this option if you are displaying info like the model of your camera on your pages. Also, keeping EXIF data can fix some colorimetric problems.', 'imagify' );
 
 
 
 
 
116
 
117
- $settings->field_checkbox( array(
118
- 'option_name' => 'exif',
119
- 'label' => __( 'Keep all EXIF data from your images', 'imagify' ),
120
- 'info' => $info,
121
- ) );
122
- ?>
123
- </p>
124
- </div>
125
- </div>
126
 
127
- <?php if ( Imagify_Requirements::is_api_key_valid() ) { ?>
128
- <div class="imagify-col imagify-account-info-col">
129
- <?php $this->print_template( 'part-settings-account' ); ?>
 
 
 
 
 
130
  </div>
131
- <?php } ?>
132
- </div>
133
-
134
- <div class="imagify-settings-main-content<?php echo $hidden_class; ?>">
135
 
136
- <div class="imagify-settings-section imagify-clear">
137
- <h2 class="imagify-options-title"><?php _e( 'Optimization', 'imagify' ); ?></h2>
138
- <?php
139
- $this->print_template( 'part-settings-webp' );
140
- $this->print_template( 'part-settings-library' );
141
- $this->print_template( 'part-settings-custom-folders' );
142
- ?>
143
  </div>
144
- </div>
145
 
146
- <div class="imagify-settings-main-content imagify-pb0<?php echo $hidden_class; ?>">
147
- <div class="imagify-settings-section imagify-clear">
148
- <div class="imagify-col">
149
- <h2 class="imagify-options-title"><?php _e( 'Display Options', 'imagify' ); ?></h2>
150
-
151
- <p class="imagify-options-subtitle"><?php _e( 'Show Toolbar Menu', 'imagify' ); ?></p>
152
-
153
- <div class="imagify-col">
154
- <p>
155
- <?php
156
- $settings->field_checkbox( array(
157
- 'option_name' => 'admin_bar_menu',
158
- 'label' => __( 'I want this awesome quick access menu on my Toolbar.', 'imagify' ),
159
- ) );
160
- ?>
161
- </p>
162
- </div>
163
- <div class="imagify-col">
164
- <p>
165
- <img class="imagify-menu-bar-img" src="<?php echo esc_url( IMAGIFY_ASSETS_IMG_URL . 'imagify-menu-bar-' . $lang . '.jpg' ); ?>" width="273" height="239" alt="">
166
- </p>
167
- </div>
168
 
 
 
169
  <?php
170
- /**
171
- * List of partners affected by this option.
172
- * For internal use only.
173
- *
174
- * @since 1.8.2
175
- * @author Grégory Viguier
176
- *
177
- * @param array $partners An array of partner names.
178
- * @return array
179
- */
180
- $partners = apply_filters( 'imagify_deactivatable_partners', array() );
181
-
182
- if ( $partners ) {
183
- ?>
184
- <p class="imagify-options-subtitle" id="imagify-partners-label">
185
- <?php esc_html_e( 'Partners', 'imagify' ); ?>
186
 
187
- <span class="imagify-info">
188
- <span class="dashicons dashicons-info"></span>
189
- <a href="#imagify-partners-info" class="imagify-modal-trigger"><?php _e( 'More info?', 'imagify' ); ?></a>
190
- </span>
191
- </p>
192
 
193
- <p>
 
 
 
194
  <?php
195
  $settings->field_checkbox( array(
196
- 'option_name' => 'partner_links',
197
- 'label' => __( 'Display Partner Links', 'imagify' ),
198
  ) );
199
  ?>
200
- </p>
 
 
 
 
 
 
 
201
  <?php
202
- }
203
- ?>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
204
  </div>
205
- </div>
206
 
207
- <?php
208
- if ( Imagify_Requirements::is_api_key_valid() ) {
209
- $this->print_template( 'part-settings-footer' );
210
- }
211
- ?>
212
- </div>
213
- </form>
 
214
  </div>
215
 
216
  <?php
19
  <div class="imagify-col imagify-main">
20
 
21
  <?php $this->print_template( 'part-settings-header' ); ?>
22
+ <div class="imagify-main-content">
23
+ <form action="<?php echo esc_url( $settings->get_form_action() ); ?>" id="imagify-settings" method="post">
24
 
25
+ <div class="imagify-settings-main-content<?php echo Imagify_Requirements::is_api_key_valid() ? '' : ' imagify-no-api-key'; ?>">
26
 
27
+ <?php settings_fields( $settings->get_settings_group() ); ?>
28
+ <?php wp_nonce_field( 'imagify-signup', 'imagifysignupnonce', false ); ?>
29
+ <?php wp_nonce_field( 'imagify-check-api-key', 'imagifycheckapikeynonce', false ); ?>
30
 
31
+ <?php
32
+ if ( ! Imagify_Requirements::is_api_key_valid() ) {
33
+ $this->print_template( 'part-settings-account' );
34
+ $this->print_template( 'part-settings-footer' );
35
+ }
36
+ ?>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
37
 
38
+ <div class="imagify-col imagify-shared-with-account-col<?php echo $hidden_class; ?>">
39
+ <div class="imagify-settings-section">
 
 
 
 
40
 
41
+ <h2 class="imagify-options-title"><?php _e( 'General Settings', 'imagify' ); ?></h2>
 
 
 
42
 
43
+ <p class="imagify-options-subtitle" id="imagify-optimization-level-label">
44
+ <?php _e( 'Optimization Level', 'imagify' ); ?>
 
 
 
45
 
46
+ <span class="imagify-info">
47
+ <span class="dashicons dashicons-info"></span>
48
+ <a href="#imagify-more-info" class="imagify-modal-trigger"><?php _e( 'More info?', 'imagify' ); ?></a>
49
+ </span>
 
 
 
 
 
50
  </p>
 
51
 
52
+ <div class="imagify-setting-optim-level">
53
+ <p class="imagify-inline-options">
54
+ <input type="radio" id="imagify-optimization_level_normal" name="<?php echo $option_name; ?>[optimization_level]" value="0" <?php checked( $options->get( 'optimization_level' ), 0 ); ?> aria-describedby="imagify-optimization-level-label">
55
+ <label for="imagify-optimization_level_normal">
56
+ <?php _e( 'Normal', 'imagify' ); ?>
57
+ </label>
58
+
59
+ <input type="radio" id="imagify-optimization_level_aggro" name="<?php echo $option_name; ?>[optimization_level]" value="1" <?php checked( $options->get( 'optimization_level' ), 1 ); ?> aria-describedby="imagify-optimization-level-label">
60
+ <label for="imagify-optimization_level_aggro">
61
+ <?php _e( 'Aggressive', 'imagify' ); ?>
62
+ </label>
63
+
64
+ <input type="radio" id="imagify-optimization_level_ultra" name="<?php echo $option_name; ?>[optimization_level]" value="2" <?php checked( $options->get( 'optimization_level' ), 2 ); ?> aria-describedby="imagify-optimization-level-label">
65
+ <label for="imagify-optimization_level_ultra">
66
+ <?php _e( 'Ultra', 'imagify' ); ?>
67
+ </label>
68
+ </p>
69
+
70
+ <p class="imagify-visual-comparison-text">
71
+ <?php
72
+ printf(
73
+ /* translators: 1 is a button tag start, 2 is the button tag end. */
74
+ __( 'Need help to choose? %1$sTry the Visual Comparison%2$s', 'imagify' ),
75
+ '<button type="button" class="button button-primary button-mini-flat imagify-visual-comparison-btn imagify-modal-trigger" data-target="#imagify-visual-comparison">',
76
+ '</button>'
77
+ );
78
+ ?>
79
+ </p>
80
+ </div>
81
+
82
+ <p class="imagify-setting-line">
83
  <?php
84
  $settings->field_checkbox( array(
85
+ 'option_name' => 'auto_optimize',
86
+ 'label' => __( 'Auto-Optimize images on upload', 'imagify' ),
87
+ 'info' => __( 'Automatically optimize every image you upload to WordPress.', 'imagify' ),
88
  ) );
 
 
89
  ?>
90
+ </p>
91
+
92
+ <p class="imagify-setting-line">
93
  <?php
94
+ $settings->field_checkbox( array(
95
+ 'option_name' => 'backup',
96
+ 'label' => __( 'Backup original images', 'imagify' ),
97
+ 'info' => __( 'Keep your original images in a separate folder before optimization process.', 'imagify' ),
98
+ ) );
 
99
 
100
+ $backup_error_class = $options->get( 'backup' ) && ! Imagify_Requirements::attachments_backup_dir_is_writable() ? '' : ' hidden';
101
+ ?>
102
+ <br/><strong id="backup-dir-is-writable" class="imagify-error<?php echo $backup_error_class; ?>" data-nonce="<?php echo esc_attr( wp_create_nonce( 'imagify_check_backup_dir_is_writable' ) ); ?>">
103
+ <?php
104
+ $backup_path = $this->filesystem->make_path_relative( get_imagify_backup_dir_path( true ) );
105
+ /* translators: %s is a file path. */
106
+ printf( __( 'The backup folder %s cannot be created or is not writable by the server, original images cannot be saved!', 'imagify' ), "<code>$backup_path</code>" );
107
+ ?>
108
+ </strong>
109
+ </p>
110
 
111
+ <p class="imagify-setting-line">
112
+ <?php
113
+ $info = __( 'EXIF data is information stored in your pictures like shutter speed, exposure compensation, ISO, etc...', 'imagify' );
114
+ $info .= ' <a href="' . esc_url( imagify_get_external_url( 'exif' ) ) . '" target="_blank">' . __( 'Learn more', 'imagify' ) . '</a><br/><br/>';
115
+ $info .= __( 'If you are a photographer, you may be interested in this option if you are displaying info like the model of your camera on your pages. Also, keeping EXIF data can fix some colorimetric problems.', 'imagify' );
 
 
 
 
116
 
117
+ $settings->field_checkbox( array(
118
+ 'option_name' => 'exif',
119
+ 'label' => __( 'Keep all EXIF data from your images', 'imagify' ),
120
+ 'info' => $info,
121
+ ) );
122
+ ?>
123
+ </p>
124
+ </div>
125
  </div>
 
 
 
 
126
 
127
+ <?php if ( Imagify_Requirements::is_api_key_valid() ) { ?>
128
+ <div class="imagify-col imagify-account-info-col">
129
+ <?php $this->print_template( 'part-settings-account' ); ?>
130
+ </div>
131
+ <?php } ?>
 
 
132
  </div>
 
133
 
134
+ <div class="imagify-settings-main-content<?php echo $hidden_class; ?>">
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
135
 
136
+ <div class="imagify-settings-section imagify-clear">
137
+ <h2 class="imagify-options-title"><?php _e( 'Optimization', 'imagify' ); ?></h2>
138
  <?php
139
+ $this->print_template( 'part-settings-webp' );
140
+ $this->print_template( 'part-settings-library' );
141
+ $this->print_template( 'part-settings-custom-folders' );
142
+ ?>
143
+ </div>
144
+ </div>
 
 
 
 
 
 
 
 
 
 
145
 
146
+ <div class="imagify-settings-main-content imagify-pb0<?php echo $hidden_class; ?>">
147
+ <div class="imagify-settings-section imagify-clear">
148
+ <div>
149
+ <h2 class="imagify-options-title"><?php _e( 'Display Options', 'imagify' ); ?></h2>
 
150
 
151
+ <p class="imagify-options-subtitle"><?php _e( 'Show Toolbar Menu', 'imagify' ); ?></p>
152
+
153
+ <div class="imagify-col">
154
+ <p>
155
  <?php
156
  $settings->field_checkbox( array(
157
+ 'option_name' => 'admin_bar_menu',
158
+ 'label' => __( 'I want this awesome quick access menu on my Toolbar.', 'imagify' ),
159
  ) );
160
  ?>
161
+ </p>
162
+ </div>
163
+ <div class="imagify-col">
164
+ <p>
165
+ <img class="imagify-menu-bar-img" src="<?php echo esc_url( IMAGIFY_ASSETS_IMG_URL . 'imagify-menu-bar-' . $lang . '.jpg' ); ?>" width="273" height="239" alt="">
166
+ </p>
167
+ </div>
168
+
169
  <?php
170
+ /**
171
+ * List of partners affected by this option.
172
+ * For internal use only.
173
+ *
174
+ * @since 1.8.2
175
+ * @author Grégory Viguier
176
+ *
177
+ * @param array $partners An array of partner names.
178
+ * @return array
179
+ */
180
+ $partners = apply_filters( 'imagify_deactivatable_partners', array() );
181
+
182
+ if ( $partners ) {
183
+ ?>
184
+ <p class="imagify-options-subtitle" id="imagify-partners-label">
185
+ <?php esc_html_e( 'Partners', 'imagify' ); ?>
186
+
187
+ <span class="imagify-info">
188
+ <span class="dashicons dashicons-info"></span>
189
+ <a href="#imagify-partners-info" class="imagify-modal-trigger"><?php _e( 'More info?', 'imagify' ); ?></a>
190
+ </span>
191
+ </p>
192
+
193
+ <p>
194
+ <?php
195
+ $settings->field_checkbox( array(
196
+ 'option_name' => 'partner_links',
197
+ 'label' => __( 'Display Partner Links', 'imagify' ),
198
+ ) );
199
+ ?>
200
+ </p>
201
+ <?php
202
+ }
203
+ ?>
204
+ </div>
205
  </div>
 
206
 
207
+ <?php
208
+ if ( Imagify_Requirements::is_api_key_valid() ) {
209
+ $this->print_template( 'part-settings-footer' );
210
+ }
211
+ ?>
212
+ </div>
213
+ </form>
214
+ </div>
215
  </div>
216
 
217
  <?php
views/part-bulk-optimization-overquota-alert.php CHANGED
@@ -10,21 +10,7 @@ $overquota_url = imagify_get_external_url( 'subscription', array(
10
  <div class="imagify-swal-subtitle"><?php esc_html_e( 'Upgrade your account to continue optimizing your images.', 'imagify' ); ?></div>
11
  <div class="imagify-swal-content imagify-txt-start">
12
  <?php if ( Imagify_Requirements::is_api_key_valid() ) { ?>
13
- <strong><?php esc_html_e( 'To continue optimizing your images, you can:', 'imagify' ); ?></strong>
14
- <ul class="imagify-count-list">
15
- <li>
16
- <?php
17
- /* translators: 1 is the beginning of strong tag 2 is the closing tag. */
18
- printf( esc_html__( '%1$sUpgrade your subscription%2$s to optimize more images per month', 'imagify' ), '<strong>', '</strong>&nbsp;' );
19
- ?>
20
- </li>
21
- <li>
22
- <?php
23
- /* translators: 1 is the beginning of strong tag 2 is the closing tag. */
24
- printf( esc_html__( '%1$sBuy a One Time plan%2$s to optimize the remaining images only', 'imagify' ), '<strong>', '</strong>&nbsp;' );
25
- ?>
26
- </li>
27
- </ul>
28
  <?php } ?>
29
  </div>
30
  <div class="imagify-swal-buttonswrapper">
10
  <div class="imagify-swal-subtitle"><?php esc_html_e( 'Upgrade your account to continue optimizing your images.', 'imagify' ); ?></div>
11
  <div class="imagify-swal-content imagify-txt-start">
12
  <?php if ( Imagify_Requirements::is_api_key_valid() ) { ?>
13
+ <strong><?php esc_html_e( 'To continue optimizing your images, you can upgrade your subscription.', 'imagify' ); ?></strong>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
14
  <?php } ?>
15
  </div>
16
  <div class="imagify-swal-buttonswrapper">
views/part-discount-banner.php CHANGED
@@ -6,9 +6,10 @@ defined( 'ABSPATH' ) || die( 'Cheatin’ uh?' );
6
  <p class="imagify-promo-title">
7
  <?php
8
  printf(
9
- /* translators: %s is a formatted percentage. */
10
- __( '%s OFF on all the subscriptions', 'imagify' ),
11
- '<span class="imagify-promotion-number"></span>'
 
12
  );
13
  ?>
14
  </p>
6
  <p class="imagify-promo-title">
7
  <?php
8
  printf(
9
+ /* translators: %1$s is a formatted percentage, %2$s is a subscription plan name. */
10
+ __( '%1$s OFF on %2$s subscriptions', 'imagify' ),
11
+ '<span class="imagify-promotion-number"></span>',
12
+ '<span class="imagify-promotion-plan-name"></span>'
13
  );
14
  ?>
15
  </p>
views/part-settings-custom-folders.php CHANGED
@@ -47,8 +47,8 @@ if ( ! is_network_admin() ) {
47
  );
48
 
49
  $themes[ $theme['path'] ] = $theme;
50
- $added = false;
51
- $rel_path = strtolower( $theme['label'] );
52
 
53
  foreach ( $custom_folders as $path => $label ) {
54
  if ( strpos( $rel_path, strtolower( $label ) ) === 0 ) {
@@ -66,118 +66,126 @@ if ( ! is_network_admin() ) {
66
  $themes_count = count( $themes );
67
  }
68
  ?>
 
 
 
69
 
70
- <div class="imagify-col" id="custom-folders">
71
- <h3 class="imagify-options-subtitle"><?php _e( 'Custom Folders', 'imagify' ); ?></h3>
72
 
73
- <div id="imagify-custom-folders" class="hide-if-no-js imagify-mt2">
 
 
 
 
 
 
74
 
75
- <?php if ( $themes ) { ?>
76
- <div class="imagify-folder-themes-suggestion">
77
- <div class="imagify-fts-header imagify-flex imagify-vcenter">
78
- <span><i class="dashicons dashicons-info"></i></span>
79
- <p>
80
- <?php
81
- $theme = reset( $themes );
82
-
83
- /* translators: %s is a theme name. */
84
- printf( __( 'You’re using %s', 'imagify' ), '<strong>' . $theme['name'] . '</strong>' );
85
-
86
- if ( $themes_count > 1 ) {
87
- $theme = end( $themes );
88
- echo '<br>';
89
- /* translators: %s is a theme name. */
90
- printf( __( 'child theme of %s', 'imagify' ), '<strong>' . $theme['name'] . '</strong>' );
91
- }
92
- ?>
93
- </p>
94
- </div>
95
-
96
- <div class="imagify-fts-content">
97
- <?php
98
- if ( ! $themes_not_added ) {
99
- ?>
100
- <p class="imagify-mb0"><?php echo _n( 'Your theme is already in the optimization process. All Good!', 'Your themes are already in the optimization process. All Good!', $themes_count, 'imagify' ); ?></p>
101
- <?php
102
- } elseif ( count( $themes_not_added ) !== $themes_count ) {
103
- $theme = reset( $themes_not_added );
104
- $theme = $themes[ $theme ];
105
- ?>
106
- <p><?php _e( 'Only one of your current themes is in the optimization process, would you like to also optimize the other one?', 'imagify' ); ?></p>
107
-
108
- <button id="imagify-add-themes-to-custom-folder" class="button imagify-button-clean imagify-add-themes" type="button" data-theme="<?php echo esc_attr( $theme['path'] ) . '#///#' . esc_attr( $theme['label'] ); ?>">
109
- <span class="dashicons dashicons-plus"></span>
110
- <span class="button-text"><?php
111
  /* translators: %s is a theme name. */
112
- printf( __( 'Add %s to optimization', 'imagify' ), '<strong>' . $theme['name'] . '</strong>' );
113
- ?></span>
114
- </button>
115
- <?php
116
- } else {
117
- foreach ( $themes as $path => $theme ) {
118
- $themes[ $path ] = esc_attr( $theme['path'] ) . '#///#' . esc_attr( $theme['label'] );
119
- }
120
- ?>
121
- <p><?php echo _n( 'Would you like to optimize your theme?', 'Would you like to optimize your themes?', $themes_count, 'imagify' ); ?></p>
122
-
123
- <button id="imagify-add-themes-to-custom-folder" class="button imagify-button-clean imagify-add-themes" type="button" data-theme="<?php echo implode( '" data-theme-parent="', $themes ); ?>">
124
- <span class="dashicons dashicons-plus"></span>
125
- <span class="button-text"><?php echo _n( 'Add the theme to optimization', 'Add the themes to optimization', $themes_count, 'imagify' ); ?></span>
126
- </button>
127
- <?php
128
- }
129
- ?>
130
- </div>
131
- </div>
132
- <?php } ?>
133
-
134
- <p class="imagify-kindof-title imagify-flex imagify-vcenter">
135
- <span><?php _e( 'Select folders for optimization.', 'imagify' ); ?></span>
136
- <span>
137
- <button id="imagify-add-custom-folder" class="button imagify-button-mini imagify-button-primary imagify-add-custom-folder" type="button">
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
138
  <span class="dashicons dashicons-plus"></span>
139
  <span class="button-text"><?php _e( 'Add folders', 'imagify' ); ?></span>
140
  </button>
141
  <img class="imagify-loader" aria-hidden="true" alt="<?php esc_attr_e( 'Loading...', 'imagify' ); ?>" src="<?php echo esc_url( IMAGIFY_ASSETS_IMG_URL . 'loader-balls.svg' ); ?>" width="38" height="24"/>
142
  </span>
143
- </p>
144
 
145
- <fieldset id="imagify-custom-folders-selected">
146
- <?php
147
- if ( $custom_folders ) {
148
- foreach ( $custom_folders as $placeholder => $label ) {
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
149
  $this->print_template( 'part-settings-row-custom-folder', array(
150
- 'value' => $placeholder,
151
- 'label' => $label,
152
  ) );
153
- }
154
- }
155
- ?>
156
- </fieldset>
157
-
158
- <p>
159
- <?php
160
- printf(
161
- /* translators: 1 and 2 are <strong> opening and closing tags. */
162
- __( '%1$sSelecting a folder will also optimize images in sub-folders.%2$s The only exception is "Site’s root": when selected, only images that are directly at the site’s root will be optimized (sub-folders can be selected separately).', 'imagify' ),
163
- '<strong>',
164
- '</strong>'
165
- );
166
- ?>
167
- <br/>
168
- <?php _e( 'Folders that are hidden in the folder selector window are excluded and will not be optimized even if a parent folder is selected.', 'imagify' ); ?>
169
- </p>
170
-
171
- <p class="imagify-success hidden"><?php _e( 'You changed your custom folder settings, don\'t forget to save your changes!', 'imagify' ); ?></p>
172
-
173
- <script type="text/html" id="tmpl-imagify-custom-folder">
174
- <?php
175
- $this->print_template( 'part-settings-row-custom-folder', array(
176
- 'value' => '{{ data.value }}',
177
- 'label' => '{{ data.label }}',
178
- ) );
179
- ?>
180
- </script>
181
  </div>
182
- </div>
183
  <?php
47
  );
48
 
49
  $themes[ $theme['path'] ] = $theme;
50
+ $added = false;
51
+ $rel_path = strtolower( $theme['label'] );
52
 
53
  foreach ( $custom_folders as $path => $label ) {
54
  if ( strpos( $rel_path, strtolower( $label ) ) === 0 ) {
66
  $themes_count = count( $themes );
67
  }
68
  ?>
69
+ <div class="imagify-custom-folders-section">
70
+ <div class="imagify-col" id="custom-folders">
71
+ <h3 class="imagify-options-subtitle"><?php _e( 'Custom Folders', 'imagify' ); ?></h3>
72
 
73
+ <div id="imagify-custom-folders" class="hide-if-no-js imagify-mt2">
 
74
 
75
+ <?php if ( $themes ) { ?>
76
+ <div class="imagify-folder-themes-suggestion">
77
+ <div class="imagify-fts-header imagify-flex imagify-vcenter">
78
+ <span><i class="dashicons dashicons-info"></i></span>
79
+ <p>
80
+ <?php
81
+ $theme = reset( $themes );
82
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
83
  /* translators: %s is a theme name. */
84
+ printf( __( 'You’re using %s', 'imagify' ), '<strong>' . $theme['name'] . '</strong>' );
85
+
86
+ if ( $themes_count > 1 ) {
87
+ $theme = end( $themes );
88
+ echo '<br>';
89
+ /* translators: %s is a theme name. */
90
+ printf( __( 'child theme of %s', 'imagify' ), '<strong>' . $theme['name'] . '</strong>' );
91
+ }
92
+ ?>
93
+ </p>
94
+ </div>
95
+
96
+ <div class="imagify-fts-content">
97
+ <?php
98
+ if ( ! $themes_not_added ) {
99
+ ?>
100
+ <p class="imagify-mb0"><?php echo _n( 'Your theme is already in the optimization process. All Good!', 'Your themes are already in the optimization process. All Good!', $themes_count, 'imagify' ); ?></p>
101
+ <?php
102
+ } elseif ( count( $themes_not_added ) !== $themes_count ) {
103
+ $theme = reset( $themes_not_added );
104
+ $theme = $themes[ $theme ];
105
+ ?>
106
+ <p><?php _e( 'Only one of your current themes is in the optimization process, would you like to also optimize the other one?', 'imagify' ); ?></p>
107
+
108
+ <button id="imagify-add-themes-to-custom-folder"
109
+ class="button imagify-button-clean imagify-add-themes" type="button"
110
+ data-theme="<?php echo esc_attr( $theme['path'] ) . '#///#' . esc_attr( $theme['label'] ); ?>">
111
+ <span class="dashicons dashicons-plus"></span>
112
+ <span class="button-text"><?php
113
+ /* translators: %s is a theme name. */
114
+ printf( __( 'Add %s to optimization', 'imagify' ), '<strong>' . $theme['name'] . '</strong>' );
115
+ ?></span>
116
+ </button>
117
+ <?php
118
+ } else {
119
+ foreach ( $themes as $path => $theme ) {
120
+ $themes[ $path ] = esc_attr( $theme['path'] ) . '#///#' . esc_attr( $theme['label'] );
121
+ }
122
+ ?>
123
+ <p><?php echo _n( 'Would you like to optimize your theme?', 'Would you like to optimize your themes?', $themes_count, 'imagify' ); ?></p>
124
+
125
+ <button id="imagify-add-themes-to-custom-folder"
126
+ class="button imagify-button-clean imagify-add-themes" type="button"
127
+ data-theme="<?php echo implode( '" data-theme-parent="', $themes ); ?>">
128
+ <span class="dashicons dashicons-plus"></span>
129
+ <span
130
+ class="button-text"><?php echo _n( 'Add the theme to optimization', 'Add the themes to optimization', $themes_count, 'imagify' ); ?></span>
131
+ </button>
132
+ <?php
133
+ }
134
+ ?>
135
+ </div>
136
+ </div>
137
+ <?php } ?>
138
+
139
+ <p class="imagify-kindof-title imagify-flex imagify-vcenter">
140
+ <span><?php _e( 'Select folders for optimization.', 'imagify' ); ?></span>
141
+ <span>
142
+ <button id="imagify-add-custom-folder"
143
+ class="button imagify-button-mini imagify-button-primary imagify-add-custom-folder"
144
+ type="button">
145
  <span class="dashicons dashicons-plus"></span>
146
  <span class="button-text"><?php _e( 'Add folders', 'imagify' ); ?></span>
147
  </button>
148
  <img class="imagify-loader" aria-hidden="true" alt="<?php esc_attr_e( 'Loading...', 'imagify' ); ?>" src="<?php echo esc_url( IMAGIFY_ASSETS_IMG_URL . 'loader-balls.svg' ); ?>" width="38" height="24"/>
149
  </span>
150
+ </p>
151
 
152
+ <fieldset id="imagify-custom-folders-selected">
153
+ <?php
154
+ if ( $custom_folders ) {
155
+ foreach ( $custom_folders as $placeholder => $label ) {
156
+ $this->print_template( 'part-settings-row-custom-folder', array(
157
+ 'value' => $placeholder,
158
+ 'label' => $label,
159
+ ) );
160
+ }
161
+ }
162
+ ?>
163
+ </fieldset>
164
+
165
+ <p>
166
+ <?php
167
+ printf(
168
+ /* translators: 1 and 2 are <strong> opening and closing tags. */
169
+ __( '%1$sSelecting a folder will also optimize images in sub-folders.%2$s The only exception is "Site’s root": when selected, only images that are directly at the site’s root will be optimized (sub-folders can be selected separately).', 'imagify' ),
170
+ '<strong>',
171
+ '</strong>'
172
+ );
173
+ ?>
174
+ <br/>
175
+ <?php _e( 'Folders that are hidden in the folder selector window are excluded and will not be optimized even if a parent folder is selected.', 'imagify' ); ?>
176
+ </p>
177
+
178
+ <p class="imagify-success hidden"><?php _e( 'You changed your custom folder settings, don\'t forget to save your changes!', 'imagify' ); ?></p>
179
+
180
+ <script type="text/html" id="tmpl-imagify-custom-folder">
181
+ <?php
182
  $this->print_template( 'part-settings-row-custom-folder', array(
183
+ 'value' => '{{ data.value }}',
184
+ 'label' => '{{ data.label }}',
185
  ) );
186
+ ?>
187
+ </script>
188
+ </div>
189
+ </div>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
190
  </div>
 
191
  <?php
views/part-settings-library.php CHANGED
@@ -5,29 +5,30 @@ $settings = Imagify_Settings::get_instance();
5
  $options = Imagify_Options::get_instance();
6
  $option_name = $options->get_option_name();
7
  ?>
8
- <div class="<?php echo imagify_can_optimize_custom_folders() ? 'imagify-col' : ''; ?>">
9
- <h3 class="imagify-options-subtitle"><?php esc_html_e( 'Media Library', 'imagify' ); ?></h3>
 
10
 
11
- <p class="imagify-setting-line">
12
- <?php
13
- $settings->field_checkbox(
14
- [
15
- 'option_name' => 'resize_larger',
16
- 'label' => __( 'Resize larger images', 'imagify' ),
17
- 'attributes' => [
18
- 'aria-describedby' => 'describe-resize_larger',
19
- ],
20
- ]
21
- );
22
- ?>
23
 
24
- <span class="imagify-options-line">
25
  <label for="imagify_resize_larger_w">
26
  <?php
27
  $max_sizes = get_imagify_max_intermediate_image_size();
28
  $resize_larger_w = $options->get( 'resize_larger_w' );
29
  printf(
30
- /* translators: 1 is a text input for a number of pixels (don't use %d). */
31
  esc_html__( 'to maximum %s pixels width', 'imagify' ),
32
  '<input type="number" id="imagify_resize_larger_w" min="' . $max_sizes['width'] . '" name="' . $option_name . '[resize_larger_w]" value="' . ( $resize_larger_w ? $resize_larger_w : '' ) . '" size="5">'
33
  );
@@ -35,64 +36,65 @@ $option_name = $options->get_option_name();
35
  </label>
36
  </span>
37
 
38
- <span id="describe-resize_larger" class="imagify-info">
39
  <span class="dashicons dashicons-info"></span>
40
- <?php
41
- printf(
42
- /* translators: 1 is a number of pixels. */
43
- esc_html__( 'This option is recommended to reduce larger images. You can save up to 80%% after resizing. The new width should not be less than your largest thumbnail width, which is actually %dpx.', 'imagify' ),
44
- $max_sizes['width']
45
- );
46
- echo ' ';
47
 
48
- if ( function_exists( 'wp_get_original_image_path' ) ) {
49
- // WP 5.3+.
50
- echo '<strong>' . esc_html__( 'Resizing is done on upload or during optimization.', 'imagify' ) . '</strong>';
51
- } else {
52
- esc_html_e( 'Resizing is done only during optimization.', 'imagify' );
53
- }
54
- ?>
55
  </span>
56
- </p>
57
 
58
- <?php if ( ! imagify_is_active_for_network() ) : ?>
59
 
60
- <div class="imagify-divider"></div>
61
 
62
- <h4 class="imagify-h4-like"><?php esc_html_e( 'Files optimization', 'imagify' ); ?></h4>
63
 
64
- <p>
65
- <?php esc_html_e( 'You can choose to optimize different image sizes created by WordPress here.', 'imagify' ); ?>
66
- </p>
67
 
68
- <p>
69
- <?php
70
- printf(
71
- /* translators: 1 is a "bold" tag start, 2 is the "bold" tag end. */
72
- esc_html__( 'The %1$soriginal size%2$s is %1$sautomatically optimized%2$s by Imagify.', 'imagify' ),
73
- '<strong>', '</strong>'
74
- );
75
- ?>
76
- <br>
77
- <span class="imagify-success">
78
  <?php esc_html_e( 'Remember each additional image size will affect your Imagify monthly usage!', 'imagify' ); ?>
79
  </span>
80
- </p>
81
 
82
- <?php
83
- /**
84
- * Disallowed thumbnail sizes.
85
- */
86
- $settings->field_checkbox_list(
87
- [
88
- 'option_name' => 'disallowed-sizes',
89
- 'legend' => __( 'Choose the sizes to optimize', 'imagify' ),
90
- 'values' => Imagify_Settings::get_thumbnail_sizes(),
91
- 'reverse_check' => true,
92
- ]
93
- );
94
- ?>
95
 
96
- <?php endif; ?>
97
- </div>
 
98
  <?php
5
  $options = Imagify_Options::get_instance();
6
  $option_name = $options->get_option_name();
7
  ?>
8
+ <div class="imagify-media-lib-section">
9
+ <div class="<?php echo imagify_can_optimize_custom_folders() ? 'imagify-col' : ''; ?>">
10
+ <h3 class="imagify-options-subtitle"><?php esc_html_e( 'Media Library', 'imagify' ); ?></h3>
11
 
12
+ <p class="imagify-setting-line">
13
+ <?php
14
+ $settings->field_checkbox(
15
+ [
16
+ 'option_name' => 'resize_larger',
17
+ 'label' => __( 'Resize larger images', 'imagify' ),
18
+ 'attributes' => [
19
+ 'aria-describedby' => 'describe-resize_larger',
20
+ ],
21
+ ]
22
+ );
23
+ ?>
24
 
25
+ <span class="imagify-options-line">
26
  <label for="imagify_resize_larger_w">
27
  <?php
28
  $max_sizes = get_imagify_max_intermediate_image_size();
29
  $resize_larger_w = $options->get( 'resize_larger_w' );
30
  printf(
31
+ /* translators: 1 is a text input for a number of pixels (don't use %d). */
32
  esc_html__( 'to maximum %s pixels width', 'imagify' ),
33
  '<input type="number" id="imagify_resize_larger_w" min="' . $max_sizes['width'] . '" name="' . $option_name . '[resize_larger_w]" value="' . ( $resize_larger_w ? $resize_larger_w : '' ) . '" size="5">'
34
  );
36
  </label>
37
  </span>
38
 
39
+ <span id="describe-resize_larger" class="imagify-info">
40
  <span class="dashicons dashicons-info"></span>
41
+ <?php
42
+ printf(
43
+ /* translators: 1 is a number of pixels. */
44
+ esc_html__( 'This option is recommended to reduce larger images. You can save up to 80%% after resizing. The new width should not be less than your largest thumbnail width, which is actually %dpx.', 'imagify' ),
45
+ $max_sizes['width']
46
+ );
47
+ echo ' ';
48
 
49
+ if ( function_exists( 'wp_get_original_image_path' ) ) {
50
+ // WP 5.3+.
51
+ echo '<strong>' . esc_html__( 'Resizing is done on upload or during optimization.', 'imagify' ) . '</strong>';
52
+ } else {
53
+ esc_html_e( 'Resizing is done only during optimization.', 'imagify' );
54
+ }
55
+ ?>
56
  </span>
57
+ </p>
58
 
59
+ <?php if ( ! imagify_is_active_for_network() ) : ?>
60
 
61
+ <div class="imagify-divider"></div>
62
 
63
+ <h4 class="imagify-h4-like"><?php esc_html_e( 'Files optimization', 'imagify' ); ?></h4>
64
 
65
+ <p>
66
+ <?php esc_html_e( 'You can choose to optimize different image sizes created by WordPress here.', 'imagify' ); ?>
67
+ </p>
68
 
69
+ <p>
70
+ <?php
71
+ printf(
72
+ /* translators: 1 is a "bold" tag start, 2 is the "bold" tag end. */
73
+ esc_html__( 'The %1$soriginal size%2$s is %1$sautomatically optimized%2$s by Imagify.', 'imagify' ),
74
+ '<strong>', '</strong>'
75
+ );
76
+ ?>
77
+ <br>
78
+ <span class="imagify-success">
79
  <?php esc_html_e( 'Remember each additional image size will affect your Imagify monthly usage!', 'imagify' ); ?>
80
  </span>
81
+ </p>
82
 
83
+ <?php
84
+ /**
85
+ * Disallowed thumbnail sizes.
86
+ */
87
+ $settings->field_checkbox_list(
88
+ [
89
+ 'option_name' => 'disallowed-sizes',
90
+ 'legend' => __( 'Choose the sizes to optimize', 'imagify' ),
91
+ 'values' => Imagify_Settings::get_thumbnail_sizes(),
92
+ 'reverse_check' => true,
93
+ ]
94
+ );
95
+ ?>
96
 
97
+ <?php endif; ?>
98
+ </div>
99
+ </div>
100
  <?php
views/part-settings-webp.php CHANGED
@@ -4,13 +4,13 @@ defined( 'ABSPATH' ) || die( 'Cheatin’ uh?' );
4
  $settings = Imagify_Settings::get_instance();
5
  ?>
6
  <div>
7
- <h3 class="imagify-options-subtitle"><?php _e( 'Webp format', 'imagify' ); ?></h3>
8
 
9
  <div class="imagify-setting-line">
10
  <?php
11
  $settings->field_checkbox( [
12
  'option_name' => 'convert_to_webp',
13
- 'label' => __( 'Create webp versions of images', 'imagify' ),
14
  'attributes' => [
15
  'aria-describedby' => 'describe-convert_to_webp',
16
  ],
@@ -21,7 +21,7 @@ $settings = Imagify_Settings::get_instance();
21
  <?php
22
  $settings->field_checkbox( [
23
  'option_name' => 'display_webp',
24
- 'label' => __( 'Display images in webp format on the site', 'imagify' ),
25
  ] );
26
  ?>
27
 
@@ -114,7 +114,7 @@ $settings = Imagify_Settings::get_instance();
114
  echo '<br/>';
115
 
116
  /**
117
- * Add more information about webp.
118
  *
119
  * @since 1.9
120
  * @author Grégory Viguier
@@ -135,7 +135,7 @@ $settings = Imagify_Settings::get_instance();
135
  echo esc_html(
136
  sprintf(
137
  /* translators: %s is a formatted number (don’t use %d). */
138
- _n( 'It seems that you have %s optimized image without webp versions. You can generate them here if a backup copy is available.', 'It seems that you have %s optimized images without webp versions. You can generate them here if backup copies are available.', $count, 'imagify' ),
139
  number_format_i18n( $count )
140
  )
141
  );
@@ -144,7 +144,7 @@ $settings = Imagify_Settings::get_instance();
144
 
145
  <button id="imagify-generate-webp-versions" class="button imagify-button-primary imagify-button-mini" type="button">
146
  <span class="dashicons dashicons-admin-generic"></span>
147
- <span class="button-text"><?php esc_html_e( 'Generate missing webp versions', 'imagify' ); ?></span>
148
  </button>
149
 
150
  <div aria-hidden="true" class="imagify-progress hidden">
4
  $settings = Imagify_Settings::get_instance();
5
  ?>
6
  <div>
7
+ <h3 class="imagify-options-subtitle"><?php _e( 'WebP format', 'imagify' ); ?></h3>
8
 
9
  <div class="imagify-setting-line">
10
  <?php
11
  $settings->field_checkbox( [
12
  'option_name' => 'convert_to_webp',
13
+ 'label' => __( 'Create WebP versions of images', 'imagify' ),
14
  'attributes' => [
15
  'aria-describedby' => 'describe-convert_to_webp',
16
  ],
21
  <?php
22
  $settings->field_checkbox( [
23
  'option_name' => 'display_webp',
24
+ 'label' => __( 'Display images in WebP format on the site', 'imagify' ),
25
  ] );
26
  ?>
27
 
114
  echo '<br/>';
115
 
116
  /**
117
+ * Add more information about WebP.
118
  *
119
  * @since 1.9
120
  * @author Grégory Viguier
135
  echo esc_html(
136
  sprintf(
137
  /* translators: %s is a formatted number (don’t use %d). */
138
+ _n( 'It seems that you have %s optimized image without WebP versions. You can generate them here if a backup copy is available.', 'It seems that you have %s optimized images without WebP versions. You can generate them here if backup copies are available.', $count, 'imagify' ),
139
  number_format_i18n( $count )
140
  )
141
  );
144
 
145
  <button id="imagify-generate-webp-versions" class="button imagify-button-primary imagify-button-mini" type="button">
146
  <span class="dashicons dashicons-admin-generic"></span>
147
+ <span class="button-text"><?php esc_html_e( 'Generate missing WebP versions', 'imagify' ); ?></span>
148
  </button>
149
 
150
  <div aria-hidden="true" class="imagify-progress hidden">