Version Description
- Improvement: don't display the restore bulk action in the medias list if there is nothing to restore.
- Improvement: you can know select and unselect all image sizes at once in the settings page.
- Improvement: detect when the backup directory is not writable. A warning is displayed dynamically under the backup setting, a notice is also displayed on some pages.
- Improvement: some strings were still not translated in the bulk optimization page.
- Bug Fix: the "Save & Go to Bulk Optimizer" button now redirects you even if no settings have been changed.
- Lots of various small fixes and code improvements.
Download this release
Release Info
Developer | wp_media |
Plugin | Imagify Image Optimizer |
Version | 1.6.8 |
Comparing to | |
See all releases |
Code changes from version 1.6.7.1 to 1.6.8
- assets/css/admin.css +12 -0
- assets/css/admin.min.css +1 -1
- assets/js/bulk.js +8 -8
- assets/js/bulk.min.js +1 -1
- assets/js/imagify.js +4 -4
- assets/js/imagify.min.js +1 -1
- assets/js/options.js +89 -2
- assets/js/options.min.js +1 -1
- assets/js/upload.js +6 -2
- assets/js/upload.min.js +1 -1
- imagify.php +4 -3
- inc/3rd-party/amazon-s3-and-cloudfront/inc/classes/class-imagify-as3cf-attachment.php +14 -16
- inc/3rd-party/amazon-s3-and-cloudfront/inc/classes/class-imagify-as3cf.php +8 -17
- inc/3rd-party/nextgen-gallery/inc/admin/ajax.php +1 -1
- inc/3rd-party/nextgen-gallery/inc/classes/class-imagify-ngg-attachment.php +37 -25
- inc/3rd-party/nextgen-gallery/inc/functions/attachments.php +21 -0
- inc/3rd-party/nextgen-gallery/nextgen-gallery.php +1 -0
- inc/admin/ajax.php +20 -0
- inc/admin/enqueue.php +8 -1
- inc/admin/media.php +1 -1
- inc/admin/meta-boxes.php +4 -0
- inc/admin/options.php +43 -20
- inc/admin/ui/bulk.php +10 -4
- inc/admin/ui/notices.php +73 -23
- inc/admin/ui/options.php +57 -15
- inc/classes/abstracts/class-imagify-abstract-attachment.php +1 -4
- inc/classes/class-imagify-attachment.php +26 -29
- inc/common/admin-bar.php +1 -1
- inc/functions/admin-ui.php +16 -9
- inc/functions/admin.php +36 -73
- inc/functions/attachments.php +100 -28
- inc/functions/files.php +86 -0
- inc/functions/i18n.php +8 -0
- inc/functions/notices.php +72 -0
- inc/functions/process.php +67 -8
- readme.txt +10 -2
assets/css/admin.css
CHANGED
@@ -2398,6 +2398,18 @@ td.imagify-cell-filename {
|
|
2398 |
background: #D0021B;
|
2399 |
color: #FFF;
|
2400 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2401 |
.imagify-warning,
|
2402 |
#wpadminbar .imagify-warning * {
|
2403 |
background: #f5a623;
|
2398 |
background: #D0021B;
|
2399 |
color: #FFF;
|
2400 |
}
|
2401 |
+
.imagify-settings-section .imagify-error {
|
2402 |
+
display: inline-block;
|
2403 |
+
padding: 7px 10px;
|
2404 |
+
margin: 10px 0 0 45px;
|
2405 |
+
border-radius: 3px;
|
2406 |
+
}
|
2407 |
+
.imagify-settings-section .imagify-error code {
|
2408 |
+
font-weight: normal;
|
2409 |
+
}
|
2410 |
+
.imagify-settings-section .imagify-error.hidden {
|
2411 |
+
display: none;
|
2412 |
+
}
|
2413 |
.imagify-warning,
|
2414 |
#wpadminbar .imagify-warning * {
|
2415 |
background: #f5a623;
|
assets/css/admin.min.css
CHANGED
@@ -1 +1 @@
|
|
1 |
-
.imagify-cell,.imagify-cell.va-top,.va-top .imagify-cell{vertical-align:top}#imagify-overview-chart-legend,.imagify-oh,body.imagify-modal-is-open{overflow:hidden}.imagify-start{float:left}.imagify-end{float:right}.imagify-txt-start.imagify-txt-start.imagify-txt-start{text-align:left}.imagify-txt-center.imagify-txt-center.imagify-txt-center{text-align:center}.imagify-txt-end.imagify-txt-end.imagify-txt-end{text-align:right}.imagify-mt1.imagify-mt1{margin-top:1em}.imagify-mb1.imagify-mb1{margin-bottom:1em}.imagify-mr1.imagify-mr1{margin-right:1em}.imagify-ml2.imagify-ml2{margin-left:2em}.imagify-mr2.imagify-mr2{margin-right:2em}.imagify-pl0.imagify-pl0.imagify-pl0{padding-left:0}.imagify-pr1.imagify-pr1{padding-right:1em}.imagify-clear{clear:both}.imagify-clearfix:after,.imagify-inline-options:after{content:"";display:table;clear:both}.imagify-count.imagify-count{counter-reset:num}.imagify-count .imagify-count-title{font-weight:700}.imagify-default-settings{color:#73818c;font-weight:400}.imagify-count .imagify-count-title:before{counter-increment:num 1;content:counter(num) ". "}.imagify-table{display:table;width:100%}.imagify-cell{display:table-cell;padding:10px}.imagify-bulk-submit .imagify-cell{padding-top:0}.imagify-plugins-error{overflow:hidden;padding-left:20px;list-style-type:disc}.imagify-plugins-error li{width:300px;line-height:30px}@media (max-width:570px){.imagify-plugins-error li{width:auto}}.imagify-notice-dismiss.notice-dismiss{text-decoration:none}.imagify-spinner{display:inline-block;width:20px;height:20px;margin-right:5px;vertical-align:middle;background:url(../images/spinner.gif) 0 0/20px 20px no-repeat rgba(0,0,0,0);opacity:.7}.spinner.imagify-hidden{width:0;margin:4px 0 0}.misc-pub-section.misc-pub-imagify h4{font-size:14px;margin-top:5px;margin-bottom:0}.imagify-sweet-alert button{margin-top:17px!important;height:45px!important;letter-spacing:3px;text-transform:uppercase!important;border-radius:3px!important;background-color:#40b1d0!important;-webkit-box-shadow:0 3px 0 #338ea6!important;box-shadow:0 3px 0 #338ea6!important}.imagify-sweet-alert button.loading{border-radius:100%!important;height:40px!important;padding:0!important;-webkit-box-shadow:none!important;box-shadow:none!important}.imagify-sweet-alert button.swal2-cancel{background:#777!important;-webkit-box-shadow:0 3px 0 #444!important;box-shadow:0 3px 0 #444!important}.imagify-sweet-alert-signup .sa-confirm-button-container{width:40%}.imagify-sweet-alert-signup button{width:100%;padding:0!important}.imagify-sweet-alert .la-ball-fall,.imagify-sweet-alert .sa-input-error:after,.imagify-sweet-alert .sa-input-error:before{top:25%!important}#wpwrap{-webkit-transition:all .4s;-o-transition:all .4s;transition:all .4s}.stop-scrolling #wpwrap{-webkit-filter:blur(2px);filter:blur(2px)}.stop-scrolling #wpwrap #wpadminbar{top:-32px}.imagify-primary.imagify-primary.imagify-primary{color:#40b1d0}.imagify-secondary.imagify-secondary.imagify-secondary{color:#8cc152}#imagify-check-api-container{font-weight:700}#imagify-check-api-container .dashicons{font-size:25px}#imagify-check-api-container .dashicons-no:before{color:#f06e57;vertical-align:-1px}#imagify-check-api-container .dashicons-yes:before{color:#8BC34A;vertical-align:-1px}.imagify-valid{color:#8BC34A}.imagify-chart{width:33.33%;position:relative}.imagify-doughnut-legend{margin-top:38px;list-style:none}.imagify-doughnut-legend li{display:block;padding-left:30px;position:relative;margin-bottom:15px;border-radius:5px;padding:3px 8px 2px 31px;font-size:14px;font-weight:600;cursor:default;-webkit-transition:background-color .2s ease-in-out;-o-transition:background-color .2s ease-in-out;transition:background-color .2s ease-in-out}.imagify-doughnut-legend li span{display:block;position:absolute;left:0;top:0;width:25px;height:25px;border-radius:50%}.button-text,.imagify-bulk-info p{display:inline-block}.imagify-chart{float:left;margin-bottom:20px}td .imagify-chart{float:none;margin-bottom:0;top:4px}.imagify-chart-container{position:relative;width:180px;float:left;margin-right:20px}.imagify-global-optim-phrase{width:180px;padding-top:20px;font-size:14px;font-weight:700;text-align:center}.imagify-total-percent{color:#46b1ce}td .imagify-chart-container{width:18px;height:18px;float:none;margin-right:10px}.imagify-chart-percent{position:absolute;left:0;right:0;top:50%;margin-top:-14px;text-align:center;font-size:55px;font-weight:700;color:#46B1CE}.imagify-chart-percent span{font-size:20px;vertical-align:super}.media_page_imagify-bulk-optimization .notice,.settings_page_imagify .notice,body[class*="_imagify-ngg-bulk-optimization"] .notice{margin-right:20px;margin-left:2px}.media_page_imagify-bulk-optimization .media-item,body[class*="_imagify-ngg-bulk-optimization"] .media-item{margin:0}.media_page_imagify-bulk-optimization .media-item .progress,body[class*="_imagify-ngg-bulk-optimization"] .media-item .progress{float:none;width:100%;margin:0;background:#1F2331;-webkit-box-shadow:0;box-shadow:0;border-radius:0}.media_page_imagify-bulk-optimization .media-item .percent,body[class*="_imagify-ngg-bulk-optimization"] .media-item .percent{width:auto;padding:0 5px;line-height:1.85;font-size:12px}.media_page_imagify-bulk-optimization .media-item .percent,.media_page_imagify-bulk-optimization .media-item .progress,body[class*="_imagify-ngg-bulk-optimization"] .media-item .percent,body[class*="_imagify-ngg-bulk-optimization"] .media-item .progress{text-align:right}.media_page_imagify-bulk-optimization .media-item .progress .bar,body[class*="_imagify-ngg-bulk-optimization"] .media-item .progress .bar{width:1px;height:22px;margin-top:0;background:#46B1CE;border-radius:0;overflow:visible;-webkit-transition:width .5s;-o-transition:width .5s;transition:width .5s}.imagify-settings .button,.imagify-settings a,.imagify-settings input,.imagify-welcome .button,.imagify-welcome a,.imagify-weolcome input{-webkit-transition:all .275s;-o-transition:all .275s;transition:all .275s}.imagify-settings a{color:#40b1d0}.imagify-options-title{padding-bottom:.5em;border-bottom:3px solid #F2F2F2;font-size:13px;font-weight:500;text-transform:uppercase;letter-spacing:.025em;color:#40b1d0}.imagify-settings,.imagify-settings p,.imagify-settings th{color:#5F758E}@media (max-width:782px){.imagify-settings .form-table th{padding-top:2em;padding-bottom:.5em}}.imagify-settings .form-table td{vertical-align:top}.button .dashicons,.button-text,.imagify-button-primary.imagify-button-primary .dashicons,.imagify-button-secondary.imagify-button-secondary .dashicons,.imagify-button.imagify-button .dashicons,.imagify-notice .button .dashicons,.imagify-settings .button .dashicons,.imagify-welcome .button .dashicons{vertical-align:middle}.imagify-settings .form-table th span{cursor:pointer}.imagify-middle th{padding-top:35px}.imagify-button-primary.imagify-button-primary,.imagify-button-secondary.imagify-button-secondary,.imagify-button.imagify-button,.imagify-notice .button,.imagify-settings .button,.imagify-welcome .button{height:auto;padding:8px 20px;border:0;font-size:14px;font-weight:600;-webkit-box-shadow:0 3px 0 rgba(0,0,0,.15);box-shadow:0 3px 0 rgba(0,0,0,.15);border-radius:3px;cursor:pointer;-webkit-transition:all .275s;-o-transition:all .275s;transition:all .275s}.imagify-notice .button-mini{padding:2px 10px;font-size:13px}.button-primary.button-mini{padding:2px 10px}.imagify-settings .button.button-mini-flat{padding:3px 6px 5px;font-size:12px;-webkit-box-shadow:none!important;box-shadow:none!important;line-height:1.2}.imagify-settings .button.button-mini-flat:focus,.imagify-settings .button.button-mini-flat:hover{-webkit-box-shadow:none!important;box-shadow:none!important}.imagify-button-ghost.imagify-button-ghost,.imagify-title .button-ghost.button-ghost{padding:2px 9px;border:1px solid #40B1D0;font-size:12px;font-weight:400;color:#40B1D0;background:0 0;-webkit-box-shadow:none;box-shadow:none}.imagify-button-ghost.imagify-button-ghost:focus,.imagify-button-ghost.imagify-button-ghost:hover,.imagify-title .button-ghost.button-ghost:focus,.imagify-title .button-ghost.button-ghost:hover{border-color:transparent;color:#000;background:#40B1D0}.imagify-button-ghost.imagify-button-ghost:focus,.imagify-button-ghost.imagify-button-ghost:hover{color:#FFF}.imagify-button-medium.imagify-button-medium{text-transform:uppercase;letter-spacing:.1em;padding:3px 10px;font-weight:700}.imagify-button-medium.imagify-button-ghost{border-width:2px}.button .dashicons{margin-right:5px}.imagify-button-primary.imagify-button-primary,.imagify-settings .button-primary.button-primary,.imagify-welcome .button-primary.button-primary{background:#40B1D0;color:#FFF;-webkit-box-shadow:0 3px 0 rgba(51,142,166,1);box-shadow:0 3px 0 rgba(51,142,166,1);text-shadow:0 -1px 1px #006799,1px 0 1px #006799,0 1px 1px #006799!important}.imagify-button-secondary.imagify-button-secondary{background:#8BC34A;color:#FFF;-webkit-box-shadow:0 3px 0 #6F9C3B;box-shadow:0 3px 0 #6F9C3B;text-shadow:0 -1px 1px #6F9C3B,1px 0 1px #6F9C3B,0 1px 1px #6F9C3B!important}.imagify-button-primary.imagify-button-primary:focus,.imagify-button-primary.imagify-button-primary:hover,.imagify-settings .button-primary:focus,.imagify-settings .button-primary:hover,.imagify-welcome .button-primary:focus,.imagify-welcome .button-primary:hover{background:#338ea6;-webkit-box-shadow:0 3px 0 #1f7a92;box-shadow:0 3px 0 #1f7a92}.imagify-button-secondary.imagify-button-secondary:focus,.imagify-button-secondary.imagify-button-secondary:hover{background:#6F9C3B;color:#FFF}.imagify-button-light.imagify-button-light{background:#FFF;color:#4a4a4a;-webkit-box-shadow:0 2px 0 rgba(0,0,0,.2);box-shadow:0 2px 0 rgba(0,0,0,.2)}.imagify-button-light.imagify-button-light:focus,.imagify-button-light.imagify-button-light:hover{color:#FFF;background:rgba(0,0,0,.2)}.imagify-section-positive .imagify-button-light{color:#709A41}.imagify-button.imagify-button-big{font-size:15px;padding:11px 30px}.imagify-button-big .dashicons{font-size:1.45em;margin-right:6px;margin-left:-4px}.imagify-info,.imagify-logo{vertical-align:top}#imagify-bulk-action{padding:11px 20px}.media-frame-content .imagify-button-primary,.wp_attachment_image .imagify-button-primary{float:left;padding:0 10px 1px;margin:0 5px 2px 0;font-size:13px;line-height:26px;-webkit-box-shadow:0 3px 0 rgba(51,142,166,1);box-shadow:0 3px 0 rgba(51,142,166,1)}.imagify-settings input[type=text]{color:#4A4A4A;font-weight:600;-webkit-box-shadow:none;box-shadow:none}.imagify-settings div.submit.submit{padding-left:235px;padding-top:40px}.imagify-settings p.submit{float:left;margin-top:0}.imagify-settings p.submit .button{margin:0 5px}@media (max-width:850px){.imagify-settings div.submit{padding-left:0}.imagify-settings p.submit{text-align:center}}.imagify-title.imagify-title{position:relative;padding:30px 50px;font-size:23px;background:#2E3243;color:#FFF}.imagify-settings .imagify-title+.imagify-notice{margin:0;border-right:1px solid #D9D9D9;padding-top:15px;padding-bottom:15px}.imagify-section,.imagify-settings div.submit,.imagify-sub-header,.imagify-sub-title.imagify-sub-title{margin:0;padding:20px;background:#F2F5F7}.imagify-section-positive,.imagify-sub-title.imagify-sub-title{padding-left:40px}.imagify-section-positive{background:#8cc152;color:#FFF}.imagify-section-positive p{color:#FFF}.imagify-section-gray{background:#D9E4EB}.imagify-section-gray .imagify-count-title{color:#4a4a4a}.imagify-section p:first-child{margin-top:0}.imagify-section p:last-child{margin-bottom:0}p.imagify-section-title.imagify-section-title{font-size:20px;margin-top:-.3em;margin-bottom:-.6em}.imagify-bulk-info{margin:1em 1em 1em 5px;-webkit-transition:margin .3s;-o-transition:margin .3s;transition:margin .3s}@media (max-width:850px){.imagify-bulk-info{margin:1em}}.imagify-bulk-info p{text-align:left;width:400px;max-width:100%;font-weight:700}@media (min-width:1500px){.imagify-settings div.submit{display:table;width:100%}.imagify-settings div.submit>*{display:table-cell;vertical-align:middle}.imagify-bulk-info{padding:0 25px;text-align:right}}.imagify-settings div.submit{margin-top:2em;padding:20px 0}.imagify-notice .imagify-rate-us .stars,.imagify-sub-header .form-table{margin:0}.imagify-sub-header th{text-align:right}.imagify-sub-header td,.imagify-sub-header th{padding-top:0;padding-bottom:0}[for=api_key]{padding-top:5px}.imagify-notice .imagify-rate-us.imagify-rate-us{position:relative;bottom:0;right:0;text-align:left}.imagify-rate-us.imagify-rate-us{position:absolute;bottom:50%;right:20px;text-align:right;margin-bottom:-2.4em;color:#FFF}.imagify-rate-us a{color:#40B1D0}.imagify-rate-us .stars{display:inline-block;margin:2px 0 0 10px;text-decoration:none;letter-spacing:.2em;vertical-align:-1px}.imagify-rate-us .stars .dashicons:before{font-size:18px}.imagify-rate-us a:focus,.imagify-rate-us a:hover{color:#FEE102}@media (max-width:1220px){.imagify-rate-us.imagify-rate-us{position:static;margin-bottom:0;text-align:left}.imagify-rate-us.imagify-rate-us br{display:none}.imagify-rate-us .stars{display:block;margin-left:0}}.imagify-rkt-notice.imagify-rkt-notice{position:relative;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;-ms-grid-row-align:center;align-items:center;padding:10px 45px 10px 0;border:0;-webkit-box-shadow:none;box-shadow:none;color:#FFF;background:#412355}.media_page_imagify-bulk-optimization .imagify-rkt-notice{margin-left:2px;margin-right:20px}@media (max-width:782px){.media_page_imagify-bulk-optimization .imagify-rkt-notice{margin-left:0;margin-right:12px}}.imagify-rkt-notice .imagify-cross{position:absolute;right:8px;top:50%;width:22px;height:22px;padding:0;margin-top:-11px;background:0 0;color:#FD7300;border-radius:50%;-webkit-transition:all .275s;-o-transition:all .275s;transition:all .275s}.imagify-rkt-notice .imagify-cross .dashicons{position:relative;top:2px;left:1px;-webkit-transition:all .275s;-o-transition:all .275s;transition:all .275s}.imagify-rkt-notice .imagify-cross:hover{background:#FFF}.imagify-rkt-notice .imagify-cross:hover .dashicons{color:#412355}.imagify-rkt-notice .imagify-rkt-coupon,.imagify-rkt-notice .imagify-rkt-cta,.imagify-rkt-notice .imagify-rkt-logo{-ms-flex-negative:0;flex-shrink:0}.imagify-rkt-notice .imagify-rkt-logo{width:150px!important;text-align:center;padding:0 25px 0 30px;line-height:.8}.imagify-rkt-notice .imagify-rkt-msg{width:100%!important;padding:0 15px;font-size:14px;line-height:1.6}.imagify-rkt-notice .imagify-rkt-coupon{width:150px!important;padding:0 15px}.imagify-rkt-notice .imagify-rkt-coupon-code{padding:5px 10px;font-size:23px;font-weight:700;border:1px dashed #F7A933;color:#F7A933}.imagify-rkt-notice .imagify-rkt-cta{width:250px!important;-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;-ms-flex-preferred-size:200px;flex-basis:200px}.imagify-rkt-notice .button.button{position:relative;top:-1px;height:auto;font-weight:600;font-size:14px;-webkit-box-shadow:0 4px 0 #B27A27;box-shadow:0 4px 0 #B27A27;border:0;padding:9px 18px;background:#F7A933;text-shadow:1px 1px 1px rgba(0,0,0,.2)}@media (max-width:880px){.imagify-rkt-notice{-ms-flex-wrap:wrap;flex-wrap:wrap}.imagify-rkt-notice .imagify-rkt-cta,.imagify-rkt-notice .imagify-rkt-logo,.imagify-rkt-notice .imagify-rkt-msg{text-align:left;padding:5px 15px}.imagify-cross.imagify-cross{top:8px;margin-top:0}.imagify-rkt-notice .imagify-cross .dashicons{top:1px}}.imagify-settings-section{padding:10px 20px}.imagify-welcome .imagify-settings-section,[id=imagify-settings]{border:1px solid #D9D9D9;border-top:0 none;background:#FFF}.imagify-br{line-height:2}.imagify-important{color:#F5A623}.imagify-info,.imagify-info a{color:#40B1D0;font-size:12px}.imagify-info{position:relative;display:inline-block;padding-left:25px}.imagify-info .dashicons{position:absolute;left:0;top:-1px}.imagify-visual-label,label+.imagify-info,label+.imagify-options-line{display:inline-block;max-width:70%;margin-left:15px;margin-top:2px!important;-webkit-transition:opacity .3s;-o-transition:opacity .3s;transition:opacity .3s}.imagify-visual-label{vertical-align:-5px}label[for=imagify_sizes_full]+.imagify-info{vertical-align:middle}.imagify-settings.imagify-settings [type=checkbox]:not(:checked)+label .imagify-visual-label,.imagify-settings.imagify-settings [type=checkbox]:not(:checked)+label+.imagify-options-line{opacity:.5}.imagify-settings.imagify-settings [type=checkbox]:checked+label .imagify-visual-label,.imagify-settings.imagify-settings [type=checkbox]:checked+label+.imagify-options-line{opacity:1}.imagify-checkbox-marged{max-width:500px;margin-left:45px}.imagify-checkbox.imagify-checkbox:checked,.imagify-checkbox.imagify-checkbox:not(:checked),.imagify-settings.imagify-settings [type=checkbox]:checked,.imagify-settings.imagify-settings [type=checkbox]:not(:checked){opacity:.01}.imagify-checkbox.imagify-checkbox:checked:focus,.imagify-checkbox.imagify-checkbox:not(:checked):focus,.imagify-settings.imagify-settings [type=checkbox]:checked:focus,.imagify-settings.imagify-settings [type=checkbox]:not(:checked):focus{-webkit-box-shadow:none!important;box-shadow:none!important;outline:0!important;border:0!important}.imagify-checkbox.imagify-checkbox:checked+label,.imagify-checkbox.imagify-checkbox:not(:checked)+label,.imagify-settings [type=checkbox]:checked+label,.imagify-settings [type=checkbox]:not(:checked)+label{position:relative;padding-left:6px;cursor:pointer;vertical-align:top}.imagify-checkbox.imagify-checkbox:checked+label:before,.imagify-checkbox.imagify-checkbox:not(:checked)+label:before,.imagify-settings [type=checkbox]:checked+label:before,.imagify-settings [type=checkbox]:not(:checked)+label:before{content:'';position:absolute;left:0;top:0;width:28px;height:28px;margin:0 0 0 -24px;border:2px solid #8BA6B4;background:#FFF;border-radius:4px}.imagify-checkbox.imagify-checkbox:checked+label:after,.imagify-checkbox.imagify-checkbox:not(:checked)+label:after,.imagify-settings [type=checkbox]:checked+label:after,.imagify-settings [type=checkbox]:not(:checked)+label:after{content:"✓";position:absolute;font-size:1.4em;top:3px;left:-16px;-webkit-transition:all .2s;-o-transition:all .2s;transition:all .2s}.imagify-checkbox.imagify-checkbox[disabled]:checked+label:before,.imagify-checkbox.imagify-checkbox[disabled]:not(:checked)+label:before,.imagify-settings [type=checkbox][disabled]:checked+label:before,.imagify-settings [type=checkbox][disabled]:not(:checked)+label:before{border-color:#ccc;background:#ddd}.imagify-checkbox.imagify-checkbox:not(:checked)+label:after,.imagify-settings [type=checkbox]:not(:checked)+label:after{opacity:0;-webkit-transform:scale(0);-ms-transform:scale(0);transform:scale(0)}.imagify-checkbox.imagify-checkbox:checked+label:after,.imagify-settings [type=checkbox]:checked+label:after{opacity:1;-webkit-transform:scale(1);-ms-transform:scale(1);transform:scale(1)}input[id^=imagify_sizes_]:checked+label{font-weight:700}.medium.imagify-checkbox:checked+label:before,.medium.imagify-checkbox:not(:checked)+label:before{width:22px;height:22px;border-width:1.5px;border-radius:2px;margin-top:0}.medium.imagify-checkbox:checked+label:after,.medium.imagify-checkbox:not(:checked)+label:after{font-size:1.1em;left:-17px;top:3px}.imagify-settings .mini[type=checkbox]:checked+label:before,.imagify-settings .mini[type=checkbox]:not(:checked)+label:before,.mini.imagify-checkbox:checked+label:before,.mini.imagify-checkbox:not(:checked)+label:before{width:15px;height:15px;border-width:1px;border-radius:2px;margin-top:0}.imagify-settings .mini[type=checkbox]:checked+label:after,.imagify-settings .mini[type=checkbox]:not(:checked)+label:after,.mini.imagify-checkbox:checked+label:after,.mini.imagify-checkbox:not(:checked)+label:after{font-size:.9em;left:-21px;top:1px}.imagify-checkbox.imagify-checkbox:checked:focus+label:before,.imagify-checkbox.imagify-checkbox:not(:checked):focus+label:before,.imagify-settings [type=checkbox]:checked:focus+label:before,.imagify-settings [type=checkbox]:not(:checked):focus+label:before{border-style:dotted;border-color:#40b1d0}.imagify-inline-options{position:relative;display:table;width:100%;max-width:600px;border-collapse:collapse}.imagify-small-options{width:300px;margin:1em auto .5em;background:#338EA6;border-radius:4px}.imagify-inline-options input[type=radio]:checked,.imagify-inline-options input[type=radio]:not(:checked){position:absolute;left:5px;top:5px;display:none}.imagify-inline-options input[type=radio]:checked+label,.imagify-inline-options input[type=radio]:not(:checked)+label{position:relative;display:table-cell;padding:13px 10px;text-align:center;font-weight:600;font-size:16px;text-transform:uppercase;letter-spacing:.1em;color:#FFF;background:#2E3243;border-left:1px solid rgba(255,255,255,.2);-webkit-box-shadow:0 -3px 0 rgba(0,0,0,.1) inset,inset -1px 0 0 rgba(255,255,255,.2);box-shadow:0 -3px 0 rgba(0,0,0,.1) inset,inset -1px 0 0 rgba(255,255,255,.2);z-index:2;-webkit-transition:all .275s;-o-transition:all .275s;transition:all .275s}.imagify-small-options input[type=radio]:checked+label,.imagify-small-options input[type=radio]:not(:checked)+label{padding:8px 10px;font-size:13px;color:#FFF;-webkit-box-shadow:none;box-shadow:none;border-left:0}.imagify-bulk-submit .imagify-inline-options input[type=radio]:checked+label,.imagify-bulk-submit .imagify-inline-options input[type=radio]:not(:checked)+label{margin-bottom:1.75em}.imagify-inline-options input[type=radio]:checked+label:first-of-type,.imagify-inline-options input[type=radio]:not(:checked)+label:first-of-type{border-radius:3px 0 0 3px}.imagify-inline-options input[type=radio]:checked+label:last-of-type,.imagify-inline-options input[type=radio]:not(:checked)+label:last-of-type{border-radius:0 3px 3px 0}.imagify-inline-options input[type=radio]:checked+label{background:#8BC34A}.imagify-small-options input[type=radio]:not(:checked)+label{background:#338EA6;color:rgba(255,255,255,.4)}.imagify-small-options input[type=radio]:checked+label{background:#40B1D0}.imagify-inline-options .imagify-info{margin-top:15px}.imagify-btn-info{display:block;font-size:.7em;letter-spacing:0;line-height:1;text-transform:none}.imagify-datas-more-action a,a.btn-rocket{text-transform:uppercase;text-decoration:none}#describe-resize-larger input{width:5em}.imagify-cols:after{content:"";display:table;clear:both}.imagify-col{float:left;width:50%}.imagify-main{float:left;width:70%}.imagify-sidebar{float:right;width:28%;max-width:300px}.imagify-sidebar-section{border:1px solid #BBB;background:#FFF}.imagify-sidebar-section+.imagify-sidebar-section{margin-top:2em}@media (max-width:820px){.imagify-main,.imagify-sidebar{float:none;width:auto}.imagify-settings{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}.imagify-sidebar{-webkit-box-ordinal-group:3;-ms-flex-order:2;order:2;max-width:none;margin-left:0;margin-top:25px}.wp-media-products{text-align:center}.wp-media-products li{display:inline-block;width:100%;max-width:276px}}@media (min-width:1400px){.imagify-main{width:74%}}.imagify-sidebar-title{display:block;padding:20px 15px;border-bottom:1px solid #BBB;font-size:14px;font-weight:700;color:#23282d;background:#F2F5F7}.imagify-sidebar-title img{vertical-align:top;margin-right:5px}.imagify-sidebar .wp-media-products{margin-top:0;margin-bottom:-.5em}.imagify-sidebar .wp-media-products .links{display:block;padding:85px 25px 24px;text-align:center;background-color:#2E3243;background-size:contain;background-repeat:no-repeat;background-position:50% 0;text-decoration:none}.imagify-sidebar .wp-media-products .links p{margin:1.5em auto;color:#FFF}.imagify-sidebar .wp-media-products .wprocket-link{background-image:-o-linear-gradient(top,rgba(59,30,78 ,0),rgba(59,30,78 ,0) 130px,rgba(59 ,30 ,78 ,1) 210px),url(../images/sidebar-wp-rocket.jpg);background-image:linear-gradient(to bottom,rgba(59,30,78 ,0),rgba(59,30,78 ,0) 130px,rgba(59 ,30 ,78 ,1) 210px),url(../images/sidebar-wp-rocket.jpg);background-color:#3B1E4E;background-repeat:repeat-x,no-repeat}.imagify-sidebar-content{padding:10px 20px}.imagify-mark-styled{display:inline-block;padding:1px 2px 1px 4px;line-height:1.3;font-weight:700;background:#F7A933;-webkit-transform-origin:50% 50%;-ms-transform-origin:50% 50%;transform-origin:50% 50%;-webkit-transform:rotateZ(-2deg) rotateX(-10deg) skewX(-2deg) skewY(-3deg);transform:rotateZ(-2deg) rotateX(-10deg) skewX(-2deg) skewY(-3deg);text-shadow:1px 1px 0 rgba(0,0,0,.2)}.imagify-mark-styled span{display:inline-block;-webkit-transform:rotateZ(2deg) rotateX(10deg) skewX(2deg) skewY(3deg);transform:rotateZ(2deg) rotateX(10deg) skewX(2deg) skewY(3deg)}.imagify-discount-code,a.btn-rocket{display:block;text-shadow:1px 1px 0 rgba(0,0,0,.2);font-weight:700}.imagify-discount-code{margin:.35em 0 .5em;font-size:2em;letter-spacing:.05em;text-align:center}.imagify-big-text{font-size:15px;font-weight:700}.imagify-big-text strong{font-size:20px}a.btn-rocket{font-size:1.15em;padding:12px;background:#F7A933;-webkit-box-shadow:0 3px 0 #D69626;box-shadow:0 3px 0 #D69626;border-radius:3px;color:#FFF}a.btn-rocket:focus,a.btn-rocket:hover{background:#ff8c00;-webkit-box-shadow:0 3px 0 #ff8c00;box-shadow:0 3px 0 #ff8c00}.imagify-welcome{margin:30px 20px 0 0}.imagify-welcome .baseline{display:inline-block;margin:.2em 0 0 2em;font-size:17px}.imagify-welcome .imagify-logo{vertical-align:middle}.imagify-welcome-remove{position:absolute;top:50%;right:15px;margin-top:-8px;color:#FFF;text-decoration:none}.imagify-columns{overflow:hidden;padding:15px 0;counter-reset:cols}.imagify-columns [class^=col-]{float:left;-webkit-box-sizing:border-box;box-sizing:border-box}.imagify-columns .col-1-3{width:33.333%;padding-left:28px}.imagify-columns .col-2-3{width:66.666%;padding-left:28px}.imagify-columns .col-1-2{width:50%;padding:0 20px}.imagify-columns .col-overview{padding-left:20px}.imagify-columns .col-informations{width:36.6%;padding-right:30px}.imagify-columns .col-statistics{width:30%}@media (max-width:830px){.imagify-columns [class^=col-]{float:none;margin-bottom:1.5em}.imagify-columns .col-1-2,.imagify-columns .col-1-3{width:auto;padding:0 28px;clear:both;padding-top:1em}}.imagify-columns [class^=col-] img{float:left;margin-right:18px}.imagify-col-content{overflow:hidden}.imagify-col-title{margin:0 0 15px;font-size:23px}.counter .imagify-col-title:before{counter-increment:cols;content:counter(cols) ". ";color:#40B1D0}.imagify-col-desc{color:#5F758E;margin-bottom:2em}.imagify-notice.imagify-notice{position:relative;display:-webkit-box;display:-ms-flexbox;display:flex;padding:0;margin:10px 20px 10px 2px;border:0;background:#2E3243;-webkit-box-shadow:none;box-shadow:none;color:#FFF}@media (max-width:782px){.imagify-notice.imagify-notice,.imagify-welcome{margin-right:12px}}@media (max-width:450px){.imagify-notice.imagify-notice{-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}}.wrap .imagify-notice{margin:5px 15px 2px;position:relative}.imagify-notice-logo{padding:18px 23px;background:#40B1D0}.updated .imagify-notice-logo{background:#8BC34A}.error .imagify-notice-logo{background:#D0021B}.imagify-popin-message{padding:5px 15px;text-align:left}.imagify-popin-message.imagify-error p{color:#FFF}.imagify-notice-title{font-size:15px}.imagify-notice-content{padding:5px 23px}.imagify-notice-content.imagify-notice-content p{margin:.65em 0}.imagify-notice a{color:#40B1D0}.imagify-notice a:focus,.imagify-notice a:hover{color:#FEE102}.imagify-notice code{background:rgba(0,0,0,.4)}.column-imagify_optimized_file.column-imagify_optimized_file{width:300px;text-align:center;vertical-align:middle}.column-imagify_optimized_file>*{max-width:235px;margin:0 auto}ul.imagify-datas-list.imagify-datas-list{margin:0 auto;color:#555;font-size:10px}.compat-field-imagify .label{vertical-align:top}.compat-field-imagify ul.imagify-datas-list{margin-top:7px;font-size:11px}ul.imagify-datas-list .big{font-size:12px;color:#40B1D0}.imagify-data-item{overflow:hidden}.imagify-data-item .imagify-chart{display:inline-block;top:1px;width:20px;vertical-align:middle;margin-bottom:0}li.imagify-data-item{clear:both;margin-bottom:2px}ul.imagify-datas-list .imagify-data-item span.data,ul.imagify-datas-list .imagify-data-item strong{float:left;width:50%;-webkit-box-sizing:border-box;box-sizing:border-box}ul.imagify-datas-list .imagify-data-item span.data{text-align:left;padding-right:5px}.compat-field-imagify .imagify-datas-list .imagify-data-item .data{width:130px;text-align:left;font-weight:700}.media-sidebar .imagify-datas-list .imagify-data-item .data,.media-sidebar .imagify-datas-list .imagify-data-item strong{width:auto;float:none}ul.imagify-datas-list .imagify-data-item strong{text-align:left;padding-left:5px}.imagify-datas-more-action.imagify-datas-more-action{margin:.4em auto;background:-webkit-gradient(linear,left top,left bottom,from(transparent),color-stop(49%,transparent),color-stop(50%,rgba(0,0,0,.075)),color-stop(58%,rgba(0,0,0,.075)),color-stop(58%,transparent),to(transparent));background:-o-linear-gradient(top,transparent,transparent 49%,rgba(0,0,0,.075) 50%,rgba(0,0,0,.075) 58%,transparent 58%,transparent);background:linear-gradient(to bottom,transparent,transparent 49%,rgba(0,0,0,.075) 50%,rgba(0,0,0,.075) 58%,transparent 58%,transparent)}.imagify-datas-more-action a{display:inline-block;padding:0 5px;background:#40B1D0;color:#FFF;font-size:9px;font-weight:700;line-height:1.9}.imagify-datas-more-action a.is-open{background:#555}.imagify-datas-more-action a.is-open .dashicons{-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg)}.imagify-datas-more-action a .dashicons{font-size:14px;vertical-align:middle;line-height:.8}.imagify-datas-more-action .the-text,.imagify-datas-more-action a .dashicons:before{line-height:20px;vertical-align:middle}.imagify-datas-more-action .the-text{display:inline-block;height:20px}ul.imagify-datas-details.imagify-datas-details{margin:.7em auto}.imagify-datas-details strong{color:#40B1D0}.imagify-datas-details .original{color:#555}.imagify-datas-actions-links{overflow:hidden;border-top:2px solid transparent;padding-top:5px;font-size:8px}.imagify-datas-actions-links a{position:relative;display:inline-block;padding-left:17px;text-decoration:none;font-weight:600}.compat-field-imagify .imagify-datas-actions-links{max-width:300px}.misc-pub-imagify .imagify-datas-actions-links{border-top:2px solid #f2f2f2;padding-bottom:5px}.compat-field-imagify .imagify-datas-actions-links a,.misc-pub-imagify .imagify-datas-actions-links a{font-size:10px;float:left;width:50%}.media-sidebar .compat-field-imagify .imagify-datas-actions-links a,.submitbox .misc-pub-imagify .imagify-datas-actions-links a{display:block;width:auto;float:none}.column-imagify_optimized_file .imagify-datas-actions-links a{margin:0 .7em;padding-left:15px}.imagify-datas-actions-links a:only-child{float:none;width:auto}.imagify-datas-details.is-open+.imagify-datas-actions-links{border-top-color:rgba(0,0,0,.075)}.imagify-datas-actions-links .dashicons{position:absolute;left:0;top:4px;width:12px;margin-right:2px;font-size:11px}.imagify-title>h1{padding:0}.imagify-title-right{display:table;float:right;margin-top:-10px}.imagify-title-right p{margin:0}.imagify-title-right a{font-weight:700;text-decoration:none}.imagify-title-right>div{display:table-cell;vertical-align:middle}.imagify-title-right .dashicons-arrow-down-alt2{vertical-align:-4px;margin-left:2px}@media (max-width:1200px){.imagify-bulk .imagify-title{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}.imagify-title-right{-webkit-box-ordinal-group:3;-ms-flex-order:2;order:2;margin-top:20px}}.imagify-account,.imagify-account-link{padding-right:15px}.imagify-sep-v{width:1px;background:rgba(255,255,255,.2)}.imagify-credit-left{position:relative;min-width:280px;padding-left:15px}.imagify-meteo-icon{display:inline-block;height:38px;vertical-align:middle;margin-right:10px}.imagify-user-plan{color:#40b1d0}@media (max-width:630px){.imagify-title-right,.imagify-title-right>div{display:block;width:auto}.imagify-title-right>div{margin-top:10px;max-width:100%}.imagify-credit-left{padding-left:0}}.imagify-meteo-title.imagify-meteo-title{color:#FFF;font-size:17px}.imagify-space-left{display:inline-block;min-height:38px;min-width:245px;vertical-align:middle}.imagify-space-left>p{color:#FFF}#wp-admin-bar-imagify-profile [class^=imagify-bar-],[class^=imagify-bar-]{position:relative;height:1.5em;width:100%;background:#60758D;color:#FFF;font-size:10px}.base-transparent{background:0 0}[class^=imagify-bar-].right-outside-number{-webkit-box-sizing:border-box;box-sizing:border-box;padding-right:4.5em}.right-outside-number .imagify-barnb{display:block;margin-right:-4.5em;text-align:right;font-weight:700;line-height:1.5}#wp-admin-bar-imagify-profile .imagify-progress-value,.imagify-progress-value{position:absolute;top:0;right:0;left:0;bottom:0;text-align:center;line-height:13px;font-weight:700}#wp-admin-bar-imagify-profile .imagify-progress,.imagify-progress{height:1.5em}.imagify-progress{-webkit-transition:width .3s;-o-transition:width .3s;transition:width .3s}.imagify-bar-positive .imagify-progress{background:#8CC152}.imagify-bar-positive .imagify-barnb{color:#8CC152}.imagify-bar-negative .imagify-progress{background:#73818C}.imagify-bar-negative .imagify-barnb{color:#73818C}.imagify-bar-neutral .imagify-progress{background:#F5A623}.imagify-space-left .imagify-bar-negative .imagify-progress{background:#D0021B}#wpadminbar #wp-admin-bar-imagify-profile *{line-height:1.5;white-space:initial}#wpadminbar #wp-admin-bar-imagify .ab-submenu{padding-bottom:0}#wpadminbar #wp-admin-bar-imagify-profile .ab-item{height:auto;padding:0 13px}#wpadminbar #wp-admin-bar-imagify-profile{min-width:200px;padding:15px 0 10px;margin-top:.7em;background:#222}#wp-admin-bar-imagify .dashicons{font-family:dashicons;font-size:18px;vertical-align:middle;margin:0 5px 0 0}#wp-admin-bar-imagify .button-text{display:inline-block;vertical-align:middle}#wp-admin-bar-imagify .imagify-abq-row{display:table;width:100%}#wp-admin-bar-imagify .imagify-abq-row+.imagify-abq-row{margin-top:.75em}#wp-admin-bar-imagify .imagify-abq-row>*{display:table-cell}#wp-admin-bar-imagify-profile .imagify-meteo-icon{padding-right:7px}#wp-admin-bar-imagify-profile .imagify-meteo-icon img{width:37px}#wp-admin-bar-imagify-profile .imagify-meteo-title{font-size:17px}#wp-admin-bar-imagify-profile .imagify-meteo-subs{color:#72889F}#wpadminbar #wp-admin-bar-imagify-profile strong{font-weight:700}#wpadminbar #wp-admin-bar-imagify-profile .imagify-user-plan,#wpadminbar #wp-admin-bar-imagify-profile a{padding:0;color:#40B1D0}#wpadminbar #wp-admin-bar-imagify-profile .imagify-account-link{display:table}#wpadminbar #wp-admin-bar-imagify-profile .imagify-account-link>*{display:table-cell}#wpadminbar #wp-admin-bar-imagify-profile .imagify-space-left{max-width:210px;min-width:210px;width:210px}#wpadminbar #wp-admin-bar-imagify-profile .imagify-space-left p{font-size:12px}#wp-admin-bar-imagify-profile .imagify-error,#wp-admin-bar-imagify-profile .imagify-warning{padding:10px;margin:0 -13px -13px}#wp-admin-bar-imagify-profile .imagify-error p+p,#wp-admin-bar-imagify-profile .imagify-warning p+p{margin-top:.5em}#wp-admin-bar-imagify-profile .imagify-error p+p+p,#wp-admin-bar-imagify-profile .imagify-warning p+p+p,.imagify-list-infos li+li{margin-top:1em}#wpadminbar #wp-admin-bar-imagify-profile .btn-ghost,.btn-ghost{display:inline-block;height:auto;padding:7px 10px;border:1px solid #FFF;text-align:center;background:0 0;color:#FFF;border-radius:3px;-webkit-transition:all .275s;-o-transition:all .275s;transition:all .275s}#wpadminbar #wp-admin-bar-imagify-profile .btn-ghost:focus,#wpadminbar #wp-admin-bar-imagify-profile .btn-ghost:hover,.btn-ghost:focus,.btn-ghost:hover{background:#FFF;color:#888}.imagify-list-infos{max-width:100%;width:415px}.imagify-info-block,.imagify-list-infos li{position:relative;padding:10px;padding-left:42px;background:#D9E4EB;border-radius:4px;line-height:1.6}.imagify-list-infos .imagify-alt.imagify-alt{background:#8BA7B5;color:#FFF;font-weight:700}.imagify-info-block:before,.imagify-list-infos li:before{content:"";position:absolute;left:13px;top:14px;height:16px;width:16px;border:1px solid #46b1ce;border-radius:10px}.imagify-info-block:after,.imagify-list-infos li:after{content:"i";position:absolute;left:20px;top:13px;font-style:italic;color:#46b1ce}.imagify-cell .imagify-info-block{padding-top:0}.imagify-cell .imagify-info-block:after{top:6px}.imagify-cell .imagify-info-block:before{top:7px}.imagify-list-infos .imagify-alt:after,.imagify-list-infos .imagify-alt:before{color:#fff;border-color:#fff}.imagify-sub-title.imagify-sub-title{font-size:23px;background:#FFF;color:#2E3243;border-left:1px solid #D9D9D9;border-right:1px solid #D9D9D9;font-weight:lighter}.imagify-sub-title .icon-bulk{margin-right:10px;vertical-align:middle}.imagify-sub-title .title-text{display:inline-block;line-height:1;vertical-align:middle}.imagify-bulk .imagify-settings-section{border:1px solid #D9D9D9;border-top:0;background:#F2F5F7;color:#4A4A4A}.imagify-bulk .imagify-settings-section h3,.imagify-bulk .imagify-settings-section li,.imagify-bulk .imagify-settings-section p{color:#4A4A4A}.imagify-bulk .imagify-settings-section h3{margin-bottom:2em}.imagify-title .imagify-tooltips{position:absolute;top:100%;left:0}.imagify-tooltips .icon-round{float:left;display:inline-block;width:28px;height:28px;border:1px solid #FFF;margin-right:8px;margin-bottom:8px;font-size:17px;font-style:italic;line-height:29px;font-weight:700;text-align:center;border-radius:50%}.imagify-tooltips .tooltip-content{display:block;position:relative;max-width:250px;padding:7px 15px 8px;background:#2e3242;color:#FFF;font-size:10px;border-radius:3px}.imagify-tooltips.right .tooltip-content{margin-left:12px}.imagify-tooltips.bottom .tooltip-content{margin-top:4px}.imagify-inline-options label .tooltip-content{position:absolute;left:0;right:0;top:100%;text-transform:none;font-size:10px;letter-spacing:0;text-align:center}.imagify-ac-rt-big,.imagistatus{text-transform:uppercase;font-weight:700}.imagify-tooltips .tooltip-content:after{content:"";position:absolute}.imagify-tooltips.right .tooltip-content:after{top:16px;left:-6px;border-right:8px solid #2e3242;border-top:6px solid transparent;border-bottom:6px solid transparent}.imagify-tooltips.bottom .tooltip-content:after{top:-5px;left:50%;margin-left:-3px;border-bottom:6px solid #2e3242;border-left:6px solid transparent;border-right:6px solid transparent}.imagify-space-tooltips .tooltip-content{max-width:280px;margin-top:20px;margin-left:0;padding:5px 15px;font-size:13px;background:#40B1D0;-webkit-box-shadow:0 3px 0 #338EA6;box-shadow:0 3px 0 #338EA6}.imagify-space-tooltips .tooltip-content:after{top:-14px;left:50%;margin-left:-7px;border:0;border-bottom:15px solid #40B1D0;border-left:15px solid transparent;border-right:15px solid transparent}.tooltip-content.tooltip-table{display:table;width:100%}.tooltip-content.tooltip-table>*{display:table-cell;vertical-align:middle}.tooltip-content .cell-icon{width:28px}.tooltip-content .cell-icon .icon{margin-bottom:0}.tooltip-content .cell-text{padding:5px 10px 5px 0;line-height:1.3}.tooltip-content .cell-sep{width:1px;background:rgba(255,255,255,.4)}.tooltip-content .cell-cta{padding-left:10px}.tooltip-content .cell-cta a{display:block;color:#FFF;width:100%;height:100%;white-space:nowrap}.imagify-number-you-optimized .number{display:table-cell;padding-right:15px;font-size:36px;font-weight:700;line-height:1.1;vertical-align:middle;white-space:nowrap}.imagify-number-you-optimized .text{display:table-cell;vertical-align:middle;overflow:hidden;font-size:12px}.imagify-number-you-optimized .text br{display:none}.imagify-number-you-optimized>p{display:table}.imagify-number-you-optimized{padding-bottom:.85em;margin-bottom:1.35em;overflow:hidden;border-bottom:1px solid rgba(0,0,0,.05)}.imagify-bars p{font-weight:700;font-size:12px;margin-bottom:0}.imagify-bars+.imagify-number-you-optimized{border-bottom:0;padding-top:.85em}.imagify-bars+.imagify-number-you-optimized p{color:#46b1ce}.imagify-bulk-table{margin-top:2em;max-height:600px;max-height:60vh;overflow:auto}.imagify-ac-report-text,.imagiuploaded{overflow:hidden}.imagify-bulk-table table{width:100%;border-spacing:0;border-collapse:collapse;border:1px solid #D3D3D3}.imagify-bulk-table td{padding:8px 15px}.imagify-bulk-table thead th,.imagify-bulk-table thead tr{background:#2E3242}.imagify-bulk-table tfoot th,.imagify-bulk-table tfoot tr{background:#73818C}.imagify-bulk-table thead th{padding:14px 15px;text-align:left;color:#F2F5F7;font-weight:700;font-size:14px}.imagify-bulk-table tfoot td{padding:14px 15px;color:#F9FAFA}.imagify-bulk-table tbody td,.imagify-bulk-table tbody tr{background:#FFF}.imagify-bulk-table tbody tr:nth-child(odd),.imagify-bulk-table tbody tr:nth-child(odd) td{background:#F2F5F7}.imagify-bulk-table .imagify-row-progress{display:none}.imagify-bulk-table .imagify-row-progress,.imagify-bulk-table .imagify-row-progress td{height:15px;padding:0}.imagify-bulk-table .imagify-no-uploaded-yet td{height:200px;font-size:17px;letter-spacing:.1em;word-spacing:.12em;vertical-align:middle;text-transform:uppercase;font-weight:700;text-align:center;color:#999;background-color:#FFF}.imagify-row-complete{padding:35px 20px;margin-top:2em;background:#8BC34A;color:#FFF;text-shadow:0 0 2px rgba(0,0,0,.1)}.imagify-row-complete .imagify-ac-chart{margin-top:3px}.imagify-row-complete p{color:#FFF;margin:0}@-webkit-keyframes congrate{0%{opacity:0;-webkit-transform:scale(1)}50%{-webkit-transform:scale(1.05);opacity:1}100%{-webkit-transform:scale(1);opacity:1}}@keyframes congrate{0%{opacity:0;-webkit-transform:scale(1);transform:scale(1)}50%{-webkit-transform:scale(1.05);transform:scale(1.05);opacity:1}100%{-webkit-transform:scale(1);transform:scale(1);opacity:1}}.imagify-row-complete.done{-webkit-animation:congrate .5s ease-in-out;animation:congrate .5s ease-in-out}.imagify-all-complete{margin:1.5em 0}.imagify-all-complete>div{display:inline-block;vertical-align:middle}.imagify-ac-report{min-width:310px}.imagify-ac-chart{width:46px;height:46px;float:left;margin:0 20px 0 10px}.imagify-ac-report-text p{line-height:1.3}.imagify-ac-rt-big{font-size:24px;letter-spacing:.15em;word-spacing:.15em}.imagify-ac-share{text-align:right}.imagify-ac-share-content{display:inline-block;padding:10px 15px;background:rgba(255,255,255,.2)}.imagify-ac-share-content>*{display:inline-block;vertical-align:middle}.imagify-bulk-table .imagify-ac-share-content p{margin-right:5px}.imagify-share-networks,.imagify-share-networks li{margin:0}.imagify-share-networks li{display:inline-block}.imagify-share-networks a{display:inline-block;vertical-align:-7px;margin:0 5px;text-decoration:none;color:#FFF}.imagify-cell-filename{max-width:200px}.imagify-cell-status{max-width:145px}.imagify-cell-status .dashicons-warning{margin-right:2px}.imagify-cell-thumbnails{max-width:120px}td.imagify-cell-filename{-o-text-overflow:clip;text-overflow:clip;white-space:nowrap;overflow:hidden}.imagify-bulk-table td.imagify-cell-totaloriginal{padding-right:78px}.imagifilename,.imagiuploaded{display:inline-block;vertical-align:middle}.imagifilename{font-size:12px}.imagiuploaded{width:33px;height:33px;margin-right:5px;margin-left:-8px;background:url(../images/upload-image.png) no-repeat;background-size:cover}.imagiuploaded img{max-widht:100%;height:auto}.imagistatus{color:#8CA6B3}.status-compressing{color:#46B1CE}.status-error{color:#CE0B24}.status-warning{color:#f5a623}.status-complete{color:#8CC152}.imagify-error{background:#D0021B;color:#FFF}#wpadminbar .imagify-warning *,.imagify-warning{background:#f5a623;color:#FFF;text-shadow:0 0 2px rgba(0,0,0,.2)}.imagify-bulk-table .imagify-cell-thumbnails{text-align:center}.imagify-cell-percentage,.imagify-cell-savings{color:#46B1CE;font-weight:700}.imagify-cell-optimized{font-weight:700}.imagify-cell-totaloriginal{text-align:right}.imagify-modal .h2,.imagify-modal .h3{font-weight:400;letter-spacing:.075em;text-align:center}.dashicons.rotate{-webkit-animation:icon-rotate 2.6s infinite linear;animation:icon-rotate 2.6s infinite linear}.dashicons-admin-generic{-webkit-transform-origin:48.75% 51.75%;-ms-transform-origin:48.75% 51.75%;transform-origin:48.75% 51.75%}.imagify-modal{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.js .imagify-modal{display:none;position:fixed;top:0;right:0;bottom:0;left:0;background-color:#1F2332;background-color:rgba(31,35,50,.95);z-index:99999}.imagify-modal-content{-webkit-box-sizing:border-box;box-sizing:border-box;position:relative;width:800px;max-width:95%;max-height:90vw;overflow:auto;padding:20px 25px;margin:1em auto;background:#FFF;-webkit-box-shadow:1px 1px 4px rgba(0,0,0,.7);box-shadow:1px 1px 4px rgba(0,0,0,.7);border-radius:3px}#imagify-visual-comparison .imagify-modal-content,.imagify-visual-comparison .imagify-modal-content{max-width:1400px;background:0 0;padding:5px;-webkit-box-shadow:none;box-shadow:none;border-radius:0}.imagify-modal .h2{margin:.5em 0;color:#8ba6b4;font-size:24px}.imagify-modal .h3{color:#40b1d0;font-size:18px}.text-justify{text-align:justify}.imagify-modal .close-btn{display:none;visibility:hidden;position:absolute;right:20px;top:20px;font-size:1.2em;border:0;background:0 0;border-radius:0;cursor:pointer}.imagify-modal .close-btn i{margin-left:-2px}.imagify-modal .close-btn:focus,.imagify-modal .close-btn:hover{color:#40b1d0}.js .imagify-modal .close-btn{display:block;visibility:visible}.js .imagify-iframe-viewing .close-btn{display:none}#imagify-visual-comparison .close-btn,.imagify-visual-comparison .close-btn{top:50px;right:5px;width:33px;height:33px;padding:1px 0 0 2px;border:1px solid #F2F2F2;color:#F2F2F2;line-height:19px;text-align:center;border-radius:50%}.imagify-visual-comparison .close-btn,.wp_attachment_image #imagify-visual-comparison .close-btn{top:0}.imagify-visual-comparison .imagify-modal-content,.wp_attachment_image #imagify-visual-comparison .imagify-modal-content{padding-top:40px}.imagify-modal .imagify-comparison-title{font-size:28px;margin-bottom:1em;color:#F2F2F2;text-align:left}.imagify-modal .imagify-comparison-title .twentytwenty-duo-buttons{position:static;margin:0 10px 0 15px}.imagify-comparison-title .twentytwenty-duo-buttons button{float:none;padding:6px 12px;font-size:16px;text-transform:none;border:1px solid #40B1D0;color:#889;letter-spacing:0}.imagify-comparison-title .twentytwenty-duo-buttons button:focus{outline:0;-webkit-box-shadow:none;box-shadow:none}.imagify-comparison-title .twentytwenty-duo-buttons .selected{border:1px solid #40B1D0;color:#FFF;background:#40B1D0}.imagify-comparison-levels{margin:15px 0;overflow:hidden}.imagify-comparison-levels div{display:none;min-width:175px;font-size:11px}.imagify-comparison-levels .imagify-chart,.imagify-comparison-levels .imagify-chart-container{width:25px;float:none;margin:0}.imagify-visual-comparison .imagify-chart-container canvas{width:15px!important;height:15px!important;margin-right:5px}.imagify-c-level.go-left{float:left}.imagify-c-level.go-right{float:right}.imagify-c-level.go-left,.imagify-c-level.go-right{display:table}.imagify-c-level .imagify-c-level-row{display:table-row;margin:0;color:#FFF}.imagify-c-level-row>span{display:table-cell;padding:2px 0}.imagify-c-level-row .value{text-align:right;padding-left:5px}.imagify-c-level-row .value.level{color:#40b1d0}.imagify-c-level-row .value.size{color:#8bc34a;font-weight:700}.imagify-c-level-row .value .imagify-chart{top:1px}@-webkit-keyframes icon-rotate{from{-webkit-transform:rotate(0);transform:rotate(0)}to{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@keyframes icon-rotate{from{-webkit-transform:rotate(0);transform:rotate(0)}to{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}.imagify-menu-bar-img{margin-top:1em}.imagify-modal .loader{position:absolute;top:50%;left:50%;margin:-32px 0 0 -32px;opacity:0;visibility:hidden;-webkit-transition:opacity .4s;-o-transition:opacity .4s;transition:opacity .4s}.imagify-modal .loading .loader{visibility:visible;opacity:1}.imagify-settings .imagify-visual-comparison-text{margin-top:1em;color:#40b1d0;font-weight:700}.imagify-border-styled,.imagify-flex-table,.imagify-modal-cols,.imagify-offer-header,.imagify-payment-modal .imagify-modal-content,.imagify-tabs{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row}.imagify-analyzing .imagify-numbers-calc,.imagify-modal-content.imagify-iframe-viewing .imagify-modal-sidebar,.imagify-modal-content.imagify-success-viewing .imagify-modal-sidebar,.imagify-modal-section .imagify-loader,.imagify-modal-section.imagify-analyzing .imagify-modal-cols,.imagify-numbers-notcalc{display:none}.imagify-border-styled,.imagify-modal-cols{-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.imagify-payment-modal{text-align:center;color:#7A8996}.imagify-payment-modal *{-webkit-box-sizing:border-box;box-sizing:border-box}.imagify-modal-loader{position:absolute;top:0;left:0;right:0;bottom:0;background:url(../images/loader-balls.svg) center no-repeat #fff;z-index:10}.imagify-payment-modal .imagify-modal-content{width:980px;max-width:100%;min-width:925px;padding:0}.imagify-modal-content.imagify-iframe-viewing{width:980px;height:672px;overflow:hidden}.imagify-iframe-viewing #imagify-payment-process-view{width:980px;height:668px}.imagify-payment-modal .imagify-modal-main{width:70%}.imagify-iframe-viewing .imagify-modal-main{width:auto}.imagify-payment-modal .imagify-modal-content.imagify-success-viewing{min-width:auto;width:450px;min-height:300px}.imagify-success-viewing .imagify-modal-main{width:100%}.imagify-payment-modal .imagify-modal-sidebar{width:30%;padding:15px 20px;background:#1F2332;color:#FFF}.imagify-modal-section{padding:0 25px}.imagify-modal-section.section-gray{margin:0 0 1em;padding:10px 25px 15px;background:#F6F7FB}.imagify-tabs-contents .section-gray{padding:8px 25px 10px}.imagify-modal-section .imagify-modal-title:first-child{margin-top:1em;margin-bottom:1.5em}.imagify-modal-section.section-gray .imagify-modal-title{margin-top:.5em;margin-bottom:.5em}.imagify-modal-title{font-size:1.8em}.imagify-analyzing .imagify-numbers-notcalc,.imagify-modal-section.imagify-analyzing .imagify-loader{display:block}.imagify-modal-section .imagify-loader{margin:2em auto}.imagify-border-styled{width:200px;margin:0 auto;color:#8BC34A;font-weight:700;font-size:.925em}.imagify-big-number,.imagify-payment-modal strong{font-weight:700;color:#4A4A4A}.imagify-big-number{font-size:3.7em;margin:-3px 0;line-height:1}.imagify-border-styled:after,.imagify-border-styled:before{content:"";height:1px;background:rgba(0,0,0,.1);-ms-flex-preferred-size:40px;flex-basis:40px}.imagify-border-styled:before{margin-right:5px}.imagify-border-styled:after{margin-left:5px}.imagify-col{-ms-flex-preferred-size:50%;flex-basis:50%}.imagify-modal .imagify-cols{padding:0 20px}.imagify-payment-modal .imagify-iconed{margin:1.5em 5em 1.5em 0}.imagify-iconed{position:relative;text-align:left;padding-left:42px;margin-right:15px;font-weight:500}.imagify-iconed .dashicons,.imagify-iconed .icon{position:absolute;font-size:2em;left:0;top:2px;color:#40B1D0}.imagify-payment-modal .close-btn{top:10px;right:10px;width:24px;height:24px;padding:2px 0 0 4.5px;color:#FFF;background:#40B1D0;border-radius:50%;-webkit-transition:all .275s;-o-transition:all .275s;transition:all .275s}.imagify-payment-modal .close-btn i{margin-left:-3.5px;margin-top:-.5px}.imagify-payment-modal .close-btn:hover{background:#F6F7FB}.imagify-offer-line{margin-top:1.5em}.imagify-offer-line+.imagify-offer-line{margin-top:.75em}.imagify-offer-header{-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;-webkit-box-align:center;-ms-flex-align:center;align-items:center;padding:0 0 0 15px;border-radius:4px 4px 0 0;-webkit-transition:all .275s;-o-transition:all .275s;transition:all .275s}.imagify-offer-header.imagify-offer-header.imagify-offer-header .imagify-inline-options label:last-child{border-radius:0 4px 0 0}.imagify-offer-header .imagify-inline-options{width:auto}.imagify-offer-title{font-weight:700;margin:0}.imagify-offer-header,.imagify-offer-header .imagify-inline-options input[type=radio]:not(:checked)+label{background:#E5EBEF}.imagify-offer-onetime .imagify-offer-header{padding-top:8px;padding-bottom:8px}.imagify-offer-onetimes>div{padding-top:15px;padding-bottom:15px}.imagify-offer-header .imagify-inline-options input[type=radio]:checked+label,.imagify-offer-header .imagify-inline-options input[type=radio]:not(:checked)+label{position:relative;padding:7px 30px;font-size:1em;letter-spacing:.05em;color:inherit;-webkit-box-shadow:0 0 0;box-shadow:0 0 0;border-radius:0}.imagify-offer-header .imagify-inline-options input[type=radio]:checked+label{background:#F6F7FB}.imagify-2-free{position:absolute;bottom:100%;left:0;right:0;padding:2px 10px;margin-bottom:8px;font-size:.8em;letter-spacing:0;text-transform:none;text-align:center;color:#FFF;background:#10121A;border-radius:2px}.imagify-2-free:after{content:"";position:absolute;left:50%;bottom:-3px;margin-left:-3px;border-top:3px solid #10121A;border-left:3px solid transparent;border-right:3px solid transparent}.imagify-2-free.imagify-b-right{bottom:auto;left:100%;right:-100%;margin-bottom:0;margin-left:8px}.imagify-2-free.imagify-b-right:after{left:-3px;bottom:auto;top:50%;margin-top:-3px;margin-left:0;border-right:3px solid #10121A;border-top:3px solid transparent;border-bottom:3px solid transparent;border-left:0}.imagify-2-free.imagify-b-bottom{bottom:-100%;left:0;right:0;margin-top:8px}.imagify-2-free.imagify-b-bottom:after{top:-3px;bottom:auto;border-bottom:3px solid #10121A;border-left:3px solid transparent;border-right:3px solid transparent;border-top:0}.imagify-offer-content{text-align:left;background:#F6F7FB;border-radius:0 0 4px 4px;-webkit-transition:all .275s;-o-transition:all .275s;transition:all .275s}.imagify-offer-onetime .imagify-offer-content{padding:10px 0}div.imagify-col-checkbox{position:relative;width:25.5%;padding-top:10px;padding-bottom:7px}.imagify-col-checkbox label{display:block;padding-left:55px!important}.imagify-col-checkbox .imagify-checkbox.imagify-checkbox:checked,.imagify-col-checkbox .imagify-checkbox.imagify-checkbox:not(:checked){position:absolute;top:50%;left:6px;margin:-8px 0 0}.imagify-col-checkbox .imagify-checkbox.imagify-checkbox:checked+label:before,.imagify-col-checkbox .imagify-checkbox.imagify-checkbox:not(:checked)+label:before{margin:0;top:-2px;left:6px;-webkit-transition:all .275s;-o-transition:all .275s;transition:all .275s}.imagify-offer-by,.imagify-offer-size{-webkit-transition:all .275s;-o-transition:all .275s}.imagify-col-checkbox .imagify-checkbox.imagify-checkbox:checked+label:after,.imagify-col-checkbox .imagify-checkbox.imagify-checkbox:not(:checked)+label:after{top:1px;left:13px}.imagify-offer-size{font-size:30px;color:#2E3243;font-weight:700;transition:all .275s}.imagify-offer-by{font-size:10px;transition:all .275s}.imagify-approx{display:none;font-size:11px;line-height:1.2;-webkit-transition:all .275s;-o-transition:all .275s;transition:all .275s}div.imagify-col-price{width:35%}.imagify-flex-table .imagify-price-block{padding-left:0;padding-right:0}.imagify-offer-monthlies .imagify-price-block,.imagify-offer-monthly .imagify-flex-table .imagify-price-block{padding-top:0}.imagify-flex-table .imagify-price-complement{padding-right:0;font-size:10px;font-weight:700}.imagify-price-block,.imagify-price-discount{white-space:nowrap}.imagify-price-block span,.imagify-price-discount span{display:inline-block;vertical-align:middle}.imagify-price-discount.imagify-price-discount{position:relative;-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;padding-top:15px;font-weight:700;width:70px}.imagify-price-discount:before{content:"";position:absolute;top:25px;width:62%;height:2px;background:#2E3243;-webkit-transform:rotate(-15deg);-ms-transform:rotate(-15deg);transform:rotate(-15deg)}.imagify-offer-onetimes .imagify-price-discount:before{width:100%}.imagify-price-discount-dollar{color:#2E3243}.imagify-price-discount-number{color:#8BA6B4}.imagify-offer-selected .imagify-price-discount-number{color:#FFF}span.imagify-dollars{color:#1F2332;font-size:18px;font-weight:700;vertical-align:-2px}.imagify-offer-onetime .imagify-col-price{padding-top:0}.imagify-offer-onetime .imagify-dollars{vertical-align:-1px}.imagify-price-big,.imagify-price-mini{color:#40B1D0;font-weight:700}.imagify-price-big{font-size:36px}span.imagify-price-mini{font-size:18px;vertical-align:2px}span.imagify-price-by{font-size:10px;color:#1F2332;vertical-align:-13px;text-indent:-27px}.imagify-col-other-actions{width:18.5%;text-align:right}.imagify-col-other-actions a{font-size:11px}.imagify-offer-selected,.imagify-offer-selected .imagify-col-other-actions a,.imagify-offer-selected .imagify-offer-size,.imagify-offer-selected .imagify-offer-title,.imagify-offer-selected .imagify-price-big,.imagify-offer-selected .imagify-price-complement,.imagify-offer-selected .imagify-price-mini{color:#FFF}.imagify-offer-selected .imagify-offer-header,.imagify-offer-selected .imagify-offer-header .imagify-inline-options input[type=radio]:not(:checked)+label{background:#338EA6}.imagify-offer-selected .imagify-offer-content,.imagify-offer-selected .imagify-offer-header .imagify-inline-options input[type=radio]:checked+label{background:#40B1D0}.imagify-offer-selected .imagify-checkbox.imagify-checkbox:checked+label:before,.imagify-offer-selected .imagify-checkbox.imagify-checkbox:not(:checked)+label:before{border-color:#FFF;background:#40B1D0}.imagify-offer-selected .imagify-offer-by{color:#2E3243}.imagify-enough-free .imagify-not-enough-title,.imagify-enough-title{display:none}.imagify-enough-free .imagify-enough-title{display:block}.imagify-submit-line{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;-webkit-box-align:center;-ms-flex-align:center;align-items:center;margin:2em 0;text-align:left}.imagify-coupon-section{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.imagify-coupon-section p{margin:0;line-height:1.3}.imagify-coupon-text{width:200px;max-width:100%;padding-right:15px}.imagify-coupon-loader{display:none}.imagify-coupon-text.checking{text-align:right}.imagify-coupon-text.checking .imagify-coupon-loader{display:inline}.imagify-coupon-text.checking label{display:none}.imagify-coupon-input{position:relative}.imagify-coupon-input input{position:relative;z-index:1}[id=imagify-coupon-validate].button-secondary{position:absolute;top:1px;right:3px;bottom:2px;-webkit-box-shadow:none;box-shadow:none;padding:4px 10px;z-index:0;-webkit-transition:-webkit-transform .275s;-o-transition:transform .275s;transition:transform .275s;transition:transform .275s,-webkit-transform .275s}.imagify-canbe-validate [id=imagify-coupon-validate]{-webkit-transform:translateX(45px);-ms-transform:translateX(45px);transform:translateX(45px)}.imagify-modal-section+.imagify-modal-promotion{margin-top:-1em}.imagify-modal-promotion{position:relative;overflow:hidden;display:none;-webkit-box-align:center;-ms-flex-align:center;align-items:center;padding:15px 25px;background:#604D90;text-shadow:0 0 3px rgba(0,0,0,.3)}.imagify-modal-promotion.active{display:-webkit-box;display:-ms-flexbox;display:flex}[id=imagify-pricing-tab-onetime] .imagify-modal-promotion{margin-bottom:4em}.imagify-modal-promotion:before{content:"\f488";position:absolute;top:28px;left:8%;font-family:dashicons;font-size:90px;color:#8476A9;text-shadow:none}.imagify-modal-promotion p{position:relative;margin:.2em 0;color:#FFF}.imagify-promo-title{-ms-flex-preferred-size:100%;flex-basis:100%;text-transform:uppercase;font-size:20px;font-weight:700;letter-spacing:.125em}.imagify-until-date{-ms-flex-preferred-size:200px;flex-basis:200px;text-align:right}.imagify-until-date strong{color:#FFF}.imagify-submit-line button{font-size:16px}input.imagify-coupon-code{padding:10px;border:2px solid #7A8996;font-size:.875em;font-weight:700;border-radius:3px}.validated.imagify-coupon-section .imagify-coupon-text,.validated.imagify-coupon-section strong{color:#8BC34A}.validated.imagify-coupon-section .imagify-coupon-code{color:#8BC34A;border-color:#8BC34A}.invalid.imagify-coupon-section .imagify-coupon-text,.invalid.imagify-coupon-section strong{color:#d0021b}.invalid.imagify-coupon-section .imagify-coupon-code{color:#d0021b;border-color:#d0021b}.imagify-footer-lines{width:500px;max-width:100%;margin:2em auto 2.5em;font-size:.85em;line-height:1.5}.imagify-year-selected .imagify-switch-my .imagify-yearly{display:block}.imagify-month-selected .imagify-switch-my .imagify-yearly,.imagify-year-selected .imagify-switch-my .imagify-monthly{display:none}.imagify-month-selected .imagify-switch-my .imagify-monthly{display:block}.imagify-flex-table{-webkit-box-align:center;-ms-flex-align:center;align-items:center}.imagify-flex-table>*{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;padding:7px 15px}div.imagify-col-details{width:22%;padding-left:25px}.imagify-col-details p{margin:0}.imagify-pricing-table{margin:0 20px}.imagify-pricing-table .imagify-offer-line{padding:.6em 0;border:2px solid #E8EEF0;text-align:left;border-radius:3px}.imagify-pricing-table .imagify-offer-line:first-child{margin-top:.75em}.imagify-pricing-table .imagify-offer-line.imagify-offer-selected:first-child{margin-top:1.75em}.imagify-pricing-table .imagify-offer-line+.imagify-offer-line{margin-top:-2px}.imagify-pricing-table .imagify-col-other-actions{width:20.5%}.imagify-pricing-table .imagify-approx{margin-left:0;line-height:.5;margin-bottom:1em}.imagify-pricing-table .imagify-offer-selected{-webkit-transform:scale(1.03);-ms-transform:scale(1.03);transform:scale(1.03);background:#40B1D0;border-width:0}.imagify-pricing-table .imagify-offer-selected .imagify-approx{color:#FFF}.imagify-pricing-table .imagify-button-secondary{padding:3px 20px;-webkit-box-shadow:none;box-shadow:none;text-transform:uppercase;font-size:12px;letter-spacing:.025em}.imagify-offer-selected.imagify-offer-selected .imagify-button-secondary{border:2px solid #FFF;background:#40B1D0;-webkit-box-shadow:none;box-shadow:none;text-shadow:none!important}.imagify-offer-selected.imagify-offer-selected .imagify-button-secondary:focus,.imagify-offer-selected.imagify-offer-selected .imagify-button-secondary:hover{background:#FFF;color:#40B1D0}.imagify-col .imagify-special-needs{margin-left:25px}.imagify-special-needs strong{font-size:25px;font-weight:700;color:#40B1D0}.imagify-special-needs span{display:block;font-size:12px;margin-top:-.5em}div.imagify-col-price{position:relative}.imagify-recommend{display:none;position:absolute;left:-20px;bottom:100%;padding:0;margin-bottom:8px;color:#1F2332;font-weight:700;font-style:italic}.imagify-offer-selected .imagify-recommend,.imagify-tab-content.imagify-current{display:block}[class*=imagify-onetime-] .imagify-recommend{left:65px;margin-bottom:20px}.imagify-recommend:before{content:"";position:absolute;top:7px;left:-35px;width:29px;height:30px;background:url(../images/icon-arrow-choice.png) 0 no-repeat;background-size:contain}@media only screen and (-webkit-min-device-pixel-ratio:2),only screen and (-o-min-device-pixel-ratio:2/1),only screen and (min-resolution:192dpi),only screen and (min-resolution:2dppx){.imagify-recommend:before{background-image:url(../images/icon-arrow-choice.svg)}}.imagify-offer-line[class*=imagify-onetime-]{padding:0;margin:.3em 0 0}.imagify-offer-line.imagify-offer-line[class*=imagify-onetime-]:first-child{margin-top:2em}.imagify-offer-line[class*=imagify-onetime-]+.imagify-offer-line{margin-top:.5em}.imagify-offer-selected.imagify-offer-line[class*=imagify-onetime-]{-webkit-transform:scale(1);-ms-transform:scale(1);transform:scale(1);border-width:2px}.imagify-offer-line[class*=imagify-onetime-] .imagify-col-details{position:relative;overflow:hidden;width:21%;background:#1F2332;color:#FFF}.imagify-offer-selected.imagify-offer-line[class*=imagify-onetime-] .imagify-col-details{background:#338EA6}.imagify-offer-line[class*=imagify-onetime-] .imagify-col-details:before{content:"";position:absolute;bottom:0;right:25px;width:75px;height:54px;background:url(../images/icon-pack.png)}.imagify-offer-line[class*=imagify-onetime-] .imagify-col-other-actions{width:30%}.imagify-offer-line[class*=imagify-onetime-] .imagify-approx,.imagify-offer-line[class*=imagify-onetime-] .imagify-offer-size{color:#FFF}.imagify-offer-line[class*=imagify-onetime-] .imagify-offer-size{font-size:24px}.imagify-offer-line[class*=imagify-onetime-] .imagify-approx{font-size:12px}.imagify-offer-line[class*=imagify-onetime-] .imagify-price-block{padding-left:10px}.imagify-offer-line[class*=imagify-onetime-] .imagify-dollars{vertical-align:middle}.imagify-offer-line[class*=imagify-onetime-] .imagify-price-big{vertical-align:-5px}.imagify-offer-line[class*=imagify-onetime-] .imagify-price-mini{vertical-align:7px}.imagify-tabs{margin-bottom:0;list-style:none;background:#E5EBEF}.imagify-modal-content .imagify-tabs{margin:1em 0 0}.imagify-tab{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;width:50%;margin:0;font-size:23px}.imagify-tab a{display:block;padding:15px 10px;color:inherit;text-decoration:none}.imagify-tab a:focus{-webkit-box-shadow:none;box-shadow:none;outline:0;color:#40B1D8}.imagify-tab.imagify-current a{background:#F6F7FB}.imagify-tab-content{display:none}.imagify-tab-content .imagify-modal-section:first-child{margin-top:0}.imagify-modal-sidebar-content,.imagify-payment-modal .imagify-modal-sidebar{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}.imagify-modal-sidebar-content{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1}p.imagify-modal-sidebar-title{margin-top:5px;padding-right:40px;font-size:18px;color:#FFF}.imagify-modal-testimony{margin-top:1em}.imagify-modal-testimony+.imagify-modal-testimony{margin-top:2em}@media (max-height:620px){.imagify-modal-testimony+.imagify-modal-testimony{display:none}}.imagify-modal-testimony-person{display:table;width:100%}.imagify-modal-testimony-person>*{display:table-cell;vertical-align:middle}.imagify-modal-avatar{width:114px;line-height:0}.imagify-modal-avatar img{border:2px solid #FFF;border-radius:50%;width:96px;height:96px}.imagify-modal-identity a{text-decoration:none;font-weight:700}.imagify-modal-identity a:first-child{font-size:13px}.imagify-modal-identity a:first-child+a{display:block;font-size:10px;color:#7A8996}.imagify-modal-testimony-content p{font-size:13px;font-style:italic;line-height:1.7;color:#7A8996}.imagify-modal-sidebar-trust{margin-top:auto;padding-top:1.5em}.imagify-modal-sidebar-trust p{margin:0;font-weight:700;font-size:12px;line-height:1.7}.imagify-modal-sidebar-trust p img{margin-right:3px;vertical-align:-2px}.imagify-modal-sidebar-trust p+p{font-size:11px}.imagify-cart{text-align:left}.imagify-cart .imagify-cart-list{border-top:1px solid rgba(122,137,150,.2);border-bottom:1px solid rgba(122,137,150,.2)}.imagify-cart .imagify-cart-label{margin-bottom:.5em;font-size:10px;color:#2E3243}.imagify-cart-list p{margin:0;font-weight:700}.imagify-cart-item{margin:.4em 0}.imagify-cart .imagify-cart-suggestion{margin-top:-.3em}.imagify-cart-suggestion a,.imagify-cl-description p{font-size:10px}.imagify-remove-from-cart{border:0;padding:0;width:14px;height:14px;line-height:13px;border-radius:50%;background:#40B1D0;cursor:pointer;-webkit-transition:background .3s;-o-transition:background .3s;transition:background .3s}.imagify-remove-from-cart i:before{position:relative;top:-6px;left:-3px;font-size:13px;color:#FFF}.imagify-remove-from-cart:focus,.imagify-remove-from-cart:hover{background:#D0021B}.imagify-cart .imagify-cl-remove{-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;width:45px}.imagify-cart .imagify-cl-name{-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;width:200px}.imagify-cart .imagify-cl-description{-webkit-align-self:flex-start;-ms-flex-item-align:start;align-self:flex-start;padding-top:10px}.imagify-cart .imagify-cl-price{text-align:right}#imagify-payment-iframe{width:980px;height:672px;background:url(../images/loader-balls.svg) 50% 50% no-repeat #f6f7fb}.imagify-success-view{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;height:100%}.imagify-success-view p{font-weight:700;font-size:16px}.imagify-cart-emptied-item{margin:.3em auto;padding:6px 20px;background:#E6EBEF;border-radius:20px}.imagify-cart-emptied-item.imagify-cart-emptied-item p{font-weight:700}.imagify-cart-emptied-item a{color:#40b1d0;float:right;font-weight:700}
|
1 |
+
.imagify-cell,.imagify-cell.va-top,.va-top .imagify-cell{vertical-align:top}#imagify-overview-chart-legend,.imagify-oh,body.imagify-modal-is-open{overflow:hidden}.imagify-start{float:left}.imagify-end{float:right}.imagify-txt-start.imagify-txt-start.imagify-txt-start{text-align:left}.imagify-txt-center.imagify-txt-center.imagify-txt-center{text-align:center}.imagify-txt-end.imagify-txt-end.imagify-txt-end{text-align:right}.imagify-mt1.imagify-mt1{margin-top:1em}.imagify-mb1.imagify-mb1{margin-bottom:1em}.imagify-mr1.imagify-mr1{margin-right:1em}.imagify-ml2.imagify-ml2{margin-left:2em}.imagify-mr2.imagify-mr2{margin-right:2em}.imagify-pl0.imagify-pl0.imagify-pl0{padding-left:0}.imagify-pr1.imagify-pr1{padding-right:1em}.imagify-clear{clear:both}.imagify-clearfix:after,.imagify-inline-options:after{content:"";display:table;clear:both}.imagify-count.imagify-count{counter-reset:num}.imagify-count .imagify-count-title{font-weight:700}.imagify-default-settings{color:#73818c;font-weight:400}.imagify-count .imagify-count-title:before{counter-increment:num 1;content:counter(num) ". "}.imagify-table{display:table;width:100%}.imagify-cell{display:table-cell;padding:10px}.imagify-bulk-submit .imagify-cell{padding-top:0}.imagify-plugins-error{overflow:hidden;padding-left:20px;list-style-type:disc}.imagify-plugins-error li{width:300px;line-height:30px}@media (max-width:570px){.imagify-plugins-error li{width:auto}}.imagify-notice-dismiss.notice-dismiss{text-decoration:none}.imagify-spinner{display:inline-block;width:20px;height:20px;margin-right:5px;vertical-align:middle;background:url(../images/spinner.gif) 0 0/20px 20px no-repeat rgba(0,0,0,0);opacity:.7}.spinner.imagify-hidden{width:0;margin:4px 0 0}.misc-pub-section.misc-pub-imagify h4{font-size:14px;margin-top:5px;margin-bottom:0}.imagify-sweet-alert button{margin-top:17px!important;height:45px!important;letter-spacing:3px;text-transform:uppercase!important;border-radius:3px!important;background-color:#40b1d0!important;-webkit-box-shadow:0 3px 0 #338ea6!important;box-shadow:0 3px 0 #338ea6!important}.imagify-sweet-alert button.loading{border-radius:100%!important;height:40px!important;padding:0!important;-webkit-box-shadow:none!important;box-shadow:none!important}.imagify-sweet-alert button.swal2-cancel{background:#777!important;-webkit-box-shadow:0 3px 0 #444!important;box-shadow:0 3px 0 #444!important}.imagify-sweet-alert-signup .sa-confirm-button-container{width:40%}.imagify-sweet-alert-signup button{width:100%;padding:0!important}.imagify-sweet-alert .la-ball-fall,.imagify-sweet-alert .sa-input-error:after,.imagify-sweet-alert .sa-input-error:before{top:25%!important}#wpwrap{-webkit-transition:all .4s;-o-transition:all .4s;transition:all .4s}.stop-scrolling #wpwrap{-webkit-filter:blur(2px);filter:blur(2px)}.stop-scrolling #wpwrap #wpadminbar{top:-32px}.imagify-primary.imagify-primary.imagify-primary{color:#40b1d0}.imagify-secondary.imagify-secondary.imagify-secondary{color:#8cc152}#imagify-check-api-container{font-weight:700}#imagify-check-api-container .dashicons{font-size:25px}#imagify-check-api-container .dashicons-no:before{color:#f06e57;vertical-align:-1px}#imagify-check-api-container .dashicons-yes:before{color:#8BC34A;vertical-align:-1px}.imagify-valid{color:#8BC34A}.imagify-chart{width:33.33%;position:relative}.imagify-doughnut-legend{margin-top:38px;list-style:none}.imagify-doughnut-legend li{display:block;padding-left:30px;position:relative;margin-bottom:15px;border-radius:5px;padding:3px 8px 2px 31px;font-size:14px;font-weight:600;cursor:default;-webkit-transition:background-color .2s ease-in-out;-o-transition:background-color .2s ease-in-out;transition:background-color .2s ease-in-out}.imagify-doughnut-legend li span{display:block;position:absolute;left:0;top:0;width:25px;height:25px;border-radius:50%}.button-text,.imagify-bulk-info p{display:inline-block}.imagify-chart{float:left;margin-bottom:20px}td .imagify-chart{float:none;margin-bottom:0;top:4px}.imagify-chart-container{position:relative;width:180px;float:left;margin-right:20px}.imagify-global-optim-phrase{width:180px;padding-top:20px;font-size:14px;font-weight:700;text-align:center}.imagify-total-percent{color:#46b1ce}td .imagify-chart-container{width:18px;height:18px;float:none;margin-right:10px}.imagify-chart-percent{position:absolute;left:0;right:0;top:50%;margin-top:-14px;text-align:center;font-size:55px;font-weight:700;color:#46B1CE}.imagify-chart-percent span{font-size:20px;vertical-align:super}.media_page_imagify-bulk-optimization .notice,.settings_page_imagify .notice,body[class*="_imagify-ngg-bulk-optimization"] .notice{margin-right:20px;margin-left:2px}.media_page_imagify-bulk-optimization .media-item,body[class*="_imagify-ngg-bulk-optimization"] .media-item{margin:0}.media_page_imagify-bulk-optimization .media-item .progress,body[class*="_imagify-ngg-bulk-optimization"] .media-item .progress{float:none;width:100%;margin:0;background:#1F2331;-webkit-box-shadow:0;box-shadow:0;border-radius:0}.media_page_imagify-bulk-optimization .media-item .percent,body[class*="_imagify-ngg-bulk-optimization"] .media-item .percent{width:auto;padding:0 5px;line-height:1.85;font-size:12px}.media_page_imagify-bulk-optimization .media-item .percent,.media_page_imagify-bulk-optimization .media-item .progress,body[class*="_imagify-ngg-bulk-optimization"] .media-item .percent,body[class*="_imagify-ngg-bulk-optimization"] .media-item .progress{text-align:right}.media_page_imagify-bulk-optimization .media-item .progress .bar,body[class*="_imagify-ngg-bulk-optimization"] .media-item .progress .bar{width:1px;height:22px;margin-top:0;background:#46B1CE;border-radius:0;overflow:visible;-webkit-transition:width .5s;-o-transition:width .5s;transition:width .5s}.imagify-settings .button,.imagify-settings a,.imagify-settings input,.imagify-welcome .button,.imagify-welcome a,.imagify-weolcome input{-webkit-transition:all .275s;-o-transition:all .275s;transition:all .275s}.imagify-settings a{color:#40b1d0}.imagify-options-title{padding-bottom:.5em;border-bottom:3px solid #F2F2F2;font-size:13px;font-weight:500;text-transform:uppercase;letter-spacing:.025em;color:#40b1d0}.imagify-settings,.imagify-settings p,.imagify-settings th{color:#5F758E}@media (max-width:782px){.imagify-settings .form-table th{padding-top:2em;padding-bottom:.5em}}.imagify-settings .form-table td{vertical-align:top}.button .dashicons,.button-text,.imagify-button-primary.imagify-button-primary .dashicons,.imagify-button-secondary.imagify-button-secondary .dashicons,.imagify-button.imagify-button .dashicons,.imagify-notice .button .dashicons,.imagify-settings .button .dashicons,.imagify-welcome .button .dashicons{vertical-align:middle}.imagify-settings .form-table th span{cursor:pointer}.imagify-middle th{padding-top:35px}.imagify-button-primary.imagify-button-primary,.imagify-button-secondary.imagify-button-secondary,.imagify-button.imagify-button,.imagify-notice .button,.imagify-settings .button,.imagify-welcome .button{height:auto;padding:8px 20px;border:0;font-size:14px;font-weight:600;-webkit-box-shadow:0 3px 0 rgba(0,0,0,.15);box-shadow:0 3px 0 rgba(0,0,0,.15);border-radius:3px;cursor:pointer;-webkit-transition:all .275s;-o-transition:all .275s;transition:all .275s}.imagify-notice .button-mini{padding:2px 10px;font-size:13px}.button-primary.button-mini{padding:2px 10px}.imagify-settings .button.button-mini-flat{padding:3px 6px 5px;font-size:12px;-webkit-box-shadow:none!important;box-shadow:none!important;line-height:1.2}.imagify-settings .button.button-mini-flat:focus,.imagify-settings .button.button-mini-flat:hover{-webkit-box-shadow:none!important;box-shadow:none!important}.imagify-button-ghost.imagify-button-ghost,.imagify-title .button-ghost.button-ghost{padding:2px 9px;border:1px solid #40B1D0;font-size:12px;font-weight:400;color:#40B1D0;background:0 0;-webkit-box-shadow:none;box-shadow:none}.imagify-button-ghost.imagify-button-ghost:focus,.imagify-button-ghost.imagify-button-ghost:hover,.imagify-title .button-ghost.button-ghost:focus,.imagify-title .button-ghost.button-ghost:hover{border-color:transparent;color:#000;background:#40B1D0}.imagify-button-ghost.imagify-button-ghost:focus,.imagify-button-ghost.imagify-button-ghost:hover{color:#FFF}.imagify-button-medium.imagify-button-medium{text-transform:uppercase;letter-spacing:.1em;padding:3px 10px;font-weight:700}.imagify-button-medium.imagify-button-ghost{border-width:2px}.button .dashicons{margin-right:5px}.imagify-button-primary.imagify-button-primary,.imagify-settings .button-primary.button-primary,.imagify-welcome .button-primary.button-primary{background:#40B1D0;color:#FFF;-webkit-box-shadow:0 3px 0 rgba(51,142,166,1);box-shadow:0 3px 0 rgba(51,142,166,1);text-shadow:0 -1px 1px #006799,1px 0 1px #006799,0 1px 1px #006799!important}.imagify-button-secondary.imagify-button-secondary{background:#8BC34A;color:#FFF;-webkit-box-shadow:0 3px 0 #6F9C3B;box-shadow:0 3px 0 #6F9C3B;text-shadow:0 -1px 1px #6F9C3B,1px 0 1px #6F9C3B,0 1px 1px #6F9C3B!important}.imagify-button-primary.imagify-button-primary:focus,.imagify-button-primary.imagify-button-primary:hover,.imagify-settings .button-primary:focus,.imagify-settings .button-primary:hover,.imagify-welcome .button-primary:focus,.imagify-welcome .button-primary:hover{background:#338ea6;-webkit-box-shadow:0 3px 0 #1f7a92;box-shadow:0 3px 0 #1f7a92}.imagify-button-secondary.imagify-button-secondary:focus,.imagify-button-secondary.imagify-button-secondary:hover{background:#6F9C3B;color:#FFF}.imagify-button-light.imagify-button-light{background:#FFF;color:#4a4a4a;-webkit-box-shadow:0 2px 0 rgba(0,0,0,.2);box-shadow:0 2px 0 rgba(0,0,0,.2)}.imagify-button-light.imagify-button-light:focus,.imagify-button-light.imagify-button-light:hover{color:#FFF;background:rgba(0,0,0,.2)}.imagify-section-positive .imagify-button-light{color:#709A41}.imagify-button.imagify-button-big{font-size:15px;padding:11px 30px}.imagify-button-big .dashicons{font-size:1.45em;margin-right:6px;margin-left:-4px}.imagify-info,.imagify-logo{vertical-align:top}#imagify-bulk-action{padding:11px 20px}.media-frame-content .imagify-button-primary,.wp_attachment_image .imagify-button-primary{float:left;padding:0 10px 1px;margin:0 5px 2px 0;font-size:13px;line-height:26px;-webkit-box-shadow:0 3px 0 rgba(51,142,166,1);box-shadow:0 3px 0 rgba(51,142,166,1)}.imagify-settings input[type=text]{color:#4A4A4A;font-weight:600;-webkit-box-shadow:none;box-shadow:none}.imagify-settings div.submit.submit{padding-left:235px;padding-top:40px}.imagify-settings p.submit{float:left;margin-top:0}.imagify-settings p.submit .button{margin:0 5px}@media (max-width:850px){.imagify-settings div.submit{padding-left:0}.imagify-settings p.submit{text-align:center}}.imagify-title.imagify-title{position:relative;padding:30px 50px;font-size:23px;background:#2E3243;color:#FFF}.imagify-settings .imagify-title+.imagify-notice{margin:0;border-right:1px solid #D9D9D9;padding-top:15px;padding-bottom:15px}.imagify-section,.imagify-settings div.submit,.imagify-sub-header,.imagify-sub-title.imagify-sub-title{margin:0;padding:20px;background:#F2F5F7}.imagify-section-positive,.imagify-sub-title.imagify-sub-title{padding-left:40px}.imagify-section-positive{background:#8cc152;color:#FFF}.imagify-section-positive p{color:#FFF}.imagify-section-gray{background:#D9E4EB}.imagify-section-gray .imagify-count-title{color:#4a4a4a}.imagify-section p:first-child{margin-top:0}.imagify-section p:last-child{margin-bottom:0}p.imagify-section-title.imagify-section-title{font-size:20px;margin-top:-.3em;margin-bottom:-.6em}.imagify-bulk-info{margin:1em 1em 1em 5px;-webkit-transition:margin .3s;-o-transition:margin .3s;transition:margin .3s}@media (max-width:850px){.imagify-bulk-info{margin:1em}}.imagify-bulk-info p{text-align:left;width:400px;max-width:100%;font-weight:700}@media (min-width:1500px){.imagify-settings div.submit{display:table;width:100%}.imagify-settings div.submit>*{display:table-cell;vertical-align:middle}.imagify-bulk-info{padding:0 25px;text-align:right}}.imagify-settings div.submit{margin-top:2em;padding:20px 0}.imagify-notice .imagify-rate-us .stars,.imagify-sub-header .form-table{margin:0}.imagify-sub-header th{text-align:right}.imagify-sub-header td,.imagify-sub-header th{padding-top:0;padding-bottom:0}[for=api_key]{padding-top:5px}.imagify-notice .imagify-rate-us.imagify-rate-us{position:relative;bottom:0;right:0;text-align:left}.imagify-rate-us.imagify-rate-us{position:absolute;bottom:50%;right:20px;text-align:right;margin-bottom:-2.4em;color:#FFF}.imagify-rate-us a{color:#40B1D0}.imagify-rate-us .stars{display:inline-block;margin:2px 0 0 10px;text-decoration:none;letter-spacing:.2em;vertical-align:-1px}.imagify-rate-us .stars .dashicons:before{font-size:18px}.imagify-rate-us a:focus,.imagify-rate-us a:hover{color:#FEE102}@media (max-width:1220px){.imagify-rate-us.imagify-rate-us{position:static;margin-bottom:0;text-align:left}.imagify-rate-us.imagify-rate-us br{display:none}.imagify-rate-us .stars{display:block;margin-left:0}}.imagify-rkt-notice.imagify-rkt-notice{position:relative;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;-ms-grid-row-align:center;align-items:center;padding:10px 45px 10px 0;border:0;-webkit-box-shadow:none;box-shadow:none;color:#FFF;background:#412355}.media_page_imagify-bulk-optimization .imagify-rkt-notice{margin-left:2px;margin-right:20px}@media (max-width:782px){.media_page_imagify-bulk-optimization .imagify-rkt-notice{margin-left:0;margin-right:12px}}.imagify-rkt-notice .imagify-cross{position:absolute;right:8px;top:50%;width:22px;height:22px;padding:0;margin-top:-11px;background:0 0;color:#FD7300;border-radius:50%;-webkit-transition:all .275s;-o-transition:all .275s;transition:all .275s}.imagify-rkt-notice .imagify-cross .dashicons{position:relative;top:2px;left:1px;-webkit-transition:all .275s;-o-transition:all .275s;transition:all .275s}.imagify-rkt-notice .imagify-cross:hover{background:#FFF}.imagify-rkt-notice .imagify-cross:hover .dashicons{color:#412355}.imagify-rkt-notice .imagify-rkt-coupon,.imagify-rkt-notice .imagify-rkt-cta,.imagify-rkt-notice .imagify-rkt-logo{-ms-flex-negative:0;flex-shrink:0}.imagify-rkt-notice .imagify-rkt-logo{width:150px!important;text-align:center;padding:0 25px 0 30px;line-height:.8}.imagify-rkt-notice .imagify-rkt-msg{width:100%!important;padding:0 15px;font-size:14px;line-height:1.6}.imagify-rkt-notice .imagify-rkt-coupon{width:150px!important;padding:0 15px}.imagify-rkt-notice .imagify-rkt-coupon-code{padding:5px 10px;font-size:23px;font-weight:700;border:1px dashed #F7A933;color:#F7A933}.imagify-rkt-notice .imagify-rkt-cta{width:250px!important;-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;-ms-flex-preferred-size:200px;flex-basis:200px}.imagify-rkt-notice .button.button{position:relative;top:-1px;height:auto;font-weight:600;font-size:14px;-webkit-box-shadow:0 4px 0 #B27A27;box-shadow:0 4px 0 #B27A27;border:0;padding:9px 18px;background:#F7A933;text-shadow:1px 1px 1px rgba(0,0,0,.2)}@media (max-width:880px){.imagify-rkt-notice{-ms-flex-wrap:wrap;flex-wrap:wrap}.imagify-rkt-notice .imagify-rkt-cta,.imagify-rkt-notice .imagify-rkt-logo,.imagify-rkt-notice .imagify-rkt-msg{text-align:left;padding:5px 15px}.imagify-cross.imagify-cross{top:8px;margin-top:0}.imagify-rkt-notice .imagify-cross .dashicons{top:1px}}.imagify-settings-section{padding:10px 20px}.imagify-welcome .imagify-settings-section,[id=imagify-settings]{border:1px solid #D9D9D9;border-top:0 none;background:#FFF}.imagify-br{line-height:2}.imagify-important{color:#F5A623}.imagify-info,.imagify-info a{color:#40B1D0;font-size:12px}.imagify-info{position:relative;display:inline-block;padding-left:25px}.imagify-info .dashicons{position:absolute;left:0;top:-1px}.imagify-visual-label,label+.imagify-info,label+.imagify-options-line{display:inline-block;max-width:70%;margin-left:15px;margin-top:2px!important;-webkit-transition:opacity .3s;-o-transition:opacity .3s;transition:opacity .3s}.imagify-visual-label{vertical-align:-5px}label[for=imagify_sizes_full]+.imagify-info{vertical-align:middle}.imagify-settings.imagify-settings [type=checkbox]:not(:checked)+label .imagify-visual-label,.imagify-settings.imagify-settings [type=checkbox]:not(:checked)+label+.imagify-options-line{opacity:.5}.imagify-settings.imagify-settings [type=checkbox]:checked+label .imagify-visual-label,.imagify-settings.imagify-settings [type=checkbox]:checked+label+.imagify-options-line{opacity:1}.imagify-checkbox-marged{max-width:500px;margin-left:45px}.imagify-checkbox.imagify-checkbox:checked,.imagify-checkbox.imagify-checkbox:not(:checked),.imagify-settings.imagify-settings [type=checkbox]:checked,.imagify-settings.imagify-settings [type=checkbox]:not(:checked){opacity:.01}.imagify-checkbox.imagify-checkbox:checked:focus,.imagify-checkbox.imagify-checkbox:not(:checked):focus,.imagify-settings.imagify-settings [type=checkbox]:checked:focus,.imagify-settings.imagify-settings [type=checkbox]:not(:checked):focus{-webkit-box-shadow:none!important;box-shadow:none!important;outline:0!important;border:0!important}.imagify-checkbox.imagify-checkbox:checked+label,.imagify-checkbox.imagify-checkbox:not(:checked)+label,.imagify-settings [type=checkbox]:checked+label,.imagify-settings [type=checkbox]:not(:checked)+label{position:relative;padding-left:6px;cursor:pointer;vertical-align:top}.imagify-checkbox.imagify-checkbox:checked+label:before,.imagify-checkbox.imagify-checkbox:not(:checked)+label:before,.imagify-settings [type=checkbox]:checked+label:before,.imagify-settings [type=checkbox]:not(:checked)+label:before{content:'';position:absolute;left:0;top:0;width:28px;height:28px;margin:0 0 0 -24px;border:2px solid #8BA6B4;background:#FFF;border-radius:4px}.imagify-checkbox.imagify-checkbox:checked+label:after,.imagify-checkbox.imagify-checkbox:not(:checked)+label:after,.imagify-settings [type=checkbox]:checked+label:after,.imagify-settings [type=checkbox]:not(:checked)+label:after{content:"✓";position:absolute;font-size:1.4em;top:3px;left:-16px;-webkit-transition:all .2s;-o-transition:all .2s;transition:all .2s}.imagify-checkbox.imagify-checkbox[disabled]:checked+label:before,.imagify-checkbox.imagify-checkbox[disabled]:not(:checked)+label:before,.imagify-settings [type=checkbox][disabled]:checked+label:before,.imagify-settings [type=checkbox][disabled]:not(:checked)+label:before{border-color:#ccc;background:#ddd}.imagify-checkbox.imagify-checkbox:not(:checked)+label:after,.imagify-settings [type=checkbox]:not(:checked)+label:after{opacity:0;-webkit-transform:scale(0);-ms-transform:scale(0);transform:scale(0)}.imagify-checkbox.imagify-checkbox:checked+label:after,.imagify-settings [type=checkbox]:checked+label:after{opacity:1;-webkit-transform:scale(1);-ms-transform:scale(1);transform:scale(1)}input[id^=imagify_sizes_]:checked+label{font-weight:700}.medium.imagify-checkbox:checked+label:before,.medium.imagify-checkbox:not(:checked)+label:before{width:22px;height:22px;border-width:1.5px;border-radius:2px;margin-top:0}.medium.imagify-checkbox:checked+label:after,.medium.imagify-checkbox:not(:checked)+label:after{font-size:1.1em;left:-17px;top:3px}.imagify-settings .mini[type=checkbox]:checked+label:before,.imagify-settings .mini[type=checkbox]:not(:checked)+label:before,.mini.imagify-checkbox:checked+label:before,.mini.imagify-checkbox:not(:checked)+label:before{width:15px;height:15px;border-width:1px;border-radius:2px;margin-top:0}.imagify-settings .mini[type=checkbox]:checked+label:after,.imagify-settings .mini[type=checkbox]:not(:checked)+label:after,.mini.imagify-checkbox:checked+label:after,.mini.imagify-checkbox:not(:checked)+label:after{font-size:.9em;left:-21px;top:1px}.imagify-checkbox.imagify-checkbox:checked:focus+label:before,.imagify-checkbox.imagify-checkbox:not(:checked):focus+label:before,.imagify-settings [type=checkbox]:checked:focus+label:before,.imagify-settings [type=checkbox]:not(:checked):focus+label:before{border-style:dotted;border-color:#40b1d0}.imagify-inline-options{position:relative;display:table;width:100%;max-width:600px;border-collapse:collapse}.imagify-small-options{width:300px;margin:1em auto .5em;background:#338EA6;border-radius:4px}.imagify-inline-options input[type=radio]:checked,.imagify-inline-options input[type=radio]:not(:checked){position:absolute;left:5px;top:5px;display:none}.imagify-inline-options input[type=radio]:checked+label,.imagify-inline-options input[type=radio]:not(:checked)+label{position:relative;display:table-cell;padding:13px 10px;text-align:center;font-weight:600;font-size:16px;text-transform:uppercase;letter-spacing:.1em;color:#FFF;background:#2E3243;border-left:1px solid rgba(255,255,255,.2);-webkit-box-shadow:0 -3px 0 rgba(0,0,0,.1) inset,inset -1px 0 0 rgba(255,255,255,.2);box-shadow:0 -3px 0 rgba(0,0,0,.1) inset,inset -1px 0 0 rgba(255,255,255,.2);z-index:2;-webkit-transition:all .275s;-o-transition:all .275s;transition:all .275s}.imagify-small-options input[type=radio]:checked+label,.imagify-small-options input[type=radio]:not(:checked)+label{padding:8px 10px;font-size:13px;color:#FFF;-webkit-box-shadow:none;box-shadow:none;border-left:0}.imagify-bulk-submit .imagify-inline-options input[type=radio]:checked+label,.imagify-bulk-submit .imagify-inline-options input[type=radio]:not(:checked)+label{margin-bottom:1.75em}.imagify-inline-options input[type=radio]:checked+label:first-of-type,.imagify-inline-options input[type=radio]:not(:checked)+label:first-of-type{border-radius:3px 0 0 3px}.imagify-inline-options input[type=radio]:checked+label:last-of-type,.imagify-inline-options input[type=radio]:not(:checked)+label:last-of-type{border-radius:0 3px 3px 0}.imagify-inline-options input[type=radio]:checked+label{background:#8BC34A}.imagify-small-options input[type=radio]:not(:checked)+label{background:#338EA6;color:rgba(255,255,255,.4)}.imagify-small-options input[type=radio]:checked+label{background:#40B1D0}.imagify-inline-options .imagify-info{margin-top:15px}.imagify-btn-info{display:block;font-size:.7em;letter-spacing:0;line-height:1;text-transform:none}.imagify-datas-more-action a,a.btn-rocket{text-transform:uppercase;text-decoration:none}#describe-resize-larger input{width:5em}.imagify-cols:after{content:"";display:table;clear:both}.imagify-col{float:left;width:50%}.imagify-main{float:left;width:70%}.imagify-sidebar{float:right;width:28%;max-width:300px}.imagify-sidebar-section{border:1px solid #BBB;background:#FFF}.imagify-sidebar-section+.imagify-sidebar-section{margin-top:2em}@media (max-width:820px){.imagify-main,.imagify-sidebar{float:none;width:auto}.imagify-settings{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}.imagify-sidebar{-webkit-box-ordinal-group:3;-ms-flex-order:2;order:2;max-width:none;margin-left:0;margin-top:25px}.wp-media-products{text-align:center}.wp-media-products li{display:inline-block;width:100%;max-width:276px}}@media (min-width:1400px){.imagify-main{width:74%}}.imagify-sidebar-title{display:block;padding:20px 15px;border-bottom:1px solid #BBB;font-size:14px;font-weight:700;color:#23282d;background:#F2F5F7}.imagify-sidebar-title img{vertical-align:top;margin-right:5px}.imagify-sidebar .wp-media-products{margin-top:0;margin-bottom:-.5em}.imagify-sidebar .wp-media-products .links{display:block;padding:85px 25px 24px;text-align:center;background-color:#2E3243;background-size:contain;background-repeat:no-repeat;background-position:50% 0;text-decoration:none}.imagify-sidebar .wp-media-products .links p{margin:1.5em auto;color:#FFF}.imagify-sidebar .wp-media-products .wprocket-link{background-image:-o-linear-gradient(top,rgba(59,30,78 ,0),rgba(59,30,78 ,0) 130px,rgba(59 ,30 ,78 ,1) 210px),url(../images/sidebar-wp-rocket.jpg);background-image:linear-gradient(to bottom,rgba(59,30,78 ,0),rgba(59,30,78 ,0) 130px,rgba(59 ,30 ,78 ,1) 210px),url(../images/sidebar-wp-rocket.jpg);background-color:#3B1E4E;background-repeat:repeat-x,no-repeat}.imagify-sidebar-content{padding:10px 20px}.imagify-mark-styled{display:inline-block;padding:1px 2px 1px 4px;line-height:1.3;font-weight:700;background:#F7A933;-webkit-transform-origin:50% 50%;-ms-transform-origin:50% 50%;transform-origin:50% 50%;-webkit-transform:rotateZ(-2deg) rotateX(-10deg) skewX(-2deg) skewY(-3deg);transform:rotateZ(-2deg) rotateX(-10deg) skewX(-2deg) skewY(-3deg);text-shadow:1px 1px 0 rgba(0,0,0,.2)}.imagify-mark-styled span{display:inline-block;-webkit-transform:rotateZ(2deg) rotateX(10deg) skewX(2deg) skewY(3deg);transform:rotateZ(2deg) rotateX(10deg) skewX(2deg) skewY(3deg)}.imagify-discount-code,a.btn-rocket{display:block;text-shadow:1px 1px 0 rgba(0,0,0,.2);font-weight:700}.imagify-discount-code{margin:.35em 0 .5em;font-size:2em;letter-spacing:.05em;text-align:center}.imagify-big-text{font-size:15px;font-weight:700}.imagify-big-text strong{font-size:20px}a.btn-rocket{font-size:1.15em;padding:12px;background:#F7A933;-webkit-box-shadow:0 3px 0 #D69626;box-shadow:0 3px 0 #D69626;border-radius:3px;color:#FFF}a.btn-rocket:focus,a.btn-rocket:hover{background:#ff8c00;-webkit-box-shadow:0 3px 0 #ff8c00;box-shadow:0 3px 0 #ff8c00}.imagify-welcome{margin:30px 20px 0 0}.imagify-welcome .baseline{display:inline-block;margin:.2em 0 0 2em;font-size:17px}.imagify-welcome .imagify-logo{vertical-align:middle}.imagify-welcome-remove{position:absolute;top:50%;right:15px;margin-top:-8px;color:#FFF;text-decoration:none}.imagify-columns{overflow:hidden;padding:15px 0;counter-reset:cols}.imagify-columns [class^=col-]{float:left;-webkit-box-sizing:border-box;box-sizing:border-box}.imagify-columns .col-1-3{width:33.333%;padding-left:28px}.imagify-columns .col-2-3{width:66.666%;padding-left:28px}.imagify-columns .col-1-2{width:50%;padding:0 20px}.imagify-columns .col-overview{padding-left:20px}.imagify-columns .col-informations{width:36.6%;padding-right:30px}.imagify-columns .col-statistics{width:30%}@media (max-width:830px){.imagify-columns [class^=col-]{float:none;margin-bottom:1.5em}.imagify-columns .col-1-2,.imagify-columns .col-1-3{width:auto;padding:0 28px;clear:both;padding-top:1em}}.imagify-columns [class^=col-] img{float:left;margin-right:18px}.imagify-col-content{overflow:hidden}.imagify-col-title{margin:0 0 15px;font-size:23px}.counter .imagify-col-title:before{counter-increment:cols;content:counter(cols) ". ";color:#40B1D0}.imagify-col-desc{color:#5F758E;margin-bottom:2em}.imagify-notice.imagify-notice{position:relative;display:-webkit-box;display:-ms-flexbox;display:flex;padding:0;margin:10px 20px 10px 2px;border:0;background:#2E3243;-webkit-box-shadow:none;box-shadow:none;color:#FFF}@media (max-width:782px){.imagify-notice.imagify-notice,.imagify-welcome{margin-right:12px}}@media (max-width:450px){.imagify-notice.imagify-notice{-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}}.wrap .imagify-notice{margin:5px 15px 2px;position:relative}.imagify-notice-logo{padding:18px 23px;background:#40B1D0}.updated .imagify-notice-logo{background:#8BC34A}.error .imagify-notice-logo{background:#D0021B}.imagify-popin-message{padding:5px 15px;text-align:left}.imagify-popin-message.imagify-error p{color:#FFF}.imagify-notice-title{font-size:15px}.imagify-notice-content{padding:5px 23px}.imagify-notice-content.imagify-notice-content p{margin:.65em 0}.imagify-notice a{color:#40B1D0}.imagify-notice a:focus,.imagify-notice a:hover{color:#FEE102}.imagify-notice code{background:rgba(0,0,0,.4)}.column-imagify_optimized_file.column-imagify_optimized_file{width:300px;text-align:center;vertical-align:middle}.column-imagify_optimized_file>*{max-width:235px;margin:0 auto}ul.imagify-datas-list.imagify-datas-list{margin:0 auto;color:#555;font-size:10px}.compat-field-imagify .label{vertical-align:top}.compat-field-imagify ul.imagify-datas-list{margin-top:7px;font-size:11px}ul.imagify-datas-list .big{font-size:12px;color:#40B1D0}.imagify-data-item{overflow:hidden}.imagify-data-item .imagify-chart{display:inline-block;top:1px;width:20px;vertical-align:middle;margin-bottom:0}li.imagify-data-item{clear:both;margin-bottom:2px}ul.imagify-datas-list .imagify-data-item span.data,ul.imagify-datas-list .imagify-data-item strong{float:left;width:50%;-webkit-box-sizing:border-box;box-sizing:border-box}ul.imagify-datas-list .imagify-data-item span.data{text-align:left;padding-right:5px}.compat-field-imagify .imagify-datas-list .imagify-data-item .data{width:130px;text-align:left;font-weight:700}.media-sidebar .imagify-datas-list .imagify-data-item .data,.media-sidebar .imagify-datas-list .imagify-data-item strong{width:auto;float:none}ul.imagify-datas-list .imagify-data-item strong{text-align:left;padding-left:5px}.imagify-datas-more-action.imagify-datas-more-action{margin:.4em auto;background:-webkit-gradient(linear,left top,left bottom,from(transparent),color-stop(49%,transparent),color-stop(50%,rgba(0,0,0,.075)),color-stop(58%,rgba(0,0,0,.075)),color-stop(58%,transparent),to(transparent));background:-o-linear-gradient(top,transparent,transparent 49%,rgba(0,0,0,.075) 50%,rgba(0,0,0,.075) 58%,transparent 58%,transparent);background:linear-gradient(to bottom,transparent,transparent 49%,rgba(0,0,0,.075) 50%,rgba(0,0,0,.075) 58%,transparent 58%,transparent)}.imagify-datas-more-action a{display:inline-block;padding:0 5px;background:#40B1D0;color:#FFF;font-size:9px;font-weight:700;line-height:1.9}.imagify-datas-more-action a.is-open{background:#555}.imagify-datas-more-action a.is-open .dashicons{-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg)}.imagify-datas-more-action a .dashicons{font-size:14px;vertical-align:middle;line-height:.8}.imagify-datas-more-action .the-text,.imagify-datas-more-action a .dashicons:before{line-height:20px;vertical-align:middle}.imagify-datas-more-action .the-text{display:inline-block;height:20px}ul.imagify-datas-details.imagify-datas-details{margin:.7em auto}.imagify-datas-details strong{color:#40B1D0}.imagify-datas-details .original{color:#555}.imagify-datas-actions-links{overflow:hidden;border-top:2px solid transparent;padding-top:5px;font-size:8px}.imagify-datas-actions-links a{position:relative;display:inline-block;padding-left:17px;text-decoration:none;font-weight:600}.compat-field-imagify .imagify-datas-actions-links{max-width:300px}.misc-pub-imagify .imagify-datas-actions-links{border-top:2px solid #f2f2f2;padding-bottom:5px}.compat-field-imagify .imagify-datas-actions-links a,.misc-pub-imagify .imagify-datas-actions-links a{font-size:10px;float:left;width:50%}.media-sidebar .compat-field-imagify .imagify-datas-actions-links a,.submitbox .misc-pub-imagify .imagify-datas-actions-links a{display:block;width:auto;float:none}.column-imagify_optimized_file .imagify-datas-actions-links a{margin:0 .7em;padding-left:15px}.imagify-datas-actions-links a:only-child{float:none;width:auto}.imagify-datas-details.is-open+.imagify-datas-actions-links{border-top-color:rgba(0,0,0,.075)}.imagify-datas-actions-links .dashicons{position:absolute;left:0;top:4px;width:12px;margin-right:2px;font-size:11px}.imagify-title>h1{padding:0}.imagify-title-right{display:table;float:right;margin-top:-10px}.imagify-title-right p{margin:0}.imagify-title-right a{font-weight:700;text-decoration:none}.imagify-title-right>div{display:table-cell;vertical-align:middle}.imagify-title-right .dashicons-arrow-down-alt2{vertical-align:-4px;margin-left:2px}@media (max-width:1200px){.imagify-bulk .imagify-title{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}.imagify-title-right{-webkit-box-ordinal-group:3;-ms-flex-order:2;order:2;margin-top:20px}}.imagify-account,.imagify-account-link{padding-right:15px}.imagify-sep-v{width:1px;background:rgba(255,255,255,.2)}.imagify-credit-left{position:relative;min-width:280px;padding-left:15px}.imagify-meteo-icon{display:inline-block;height:38px;vertical-align:middle;margin-right:10px}.imagify-user-plan{color:#40b1d0}@media (max-width:630px){.imagify-title-right,.imagify-title-right>div{display:block;width:auto}.imagify-title-right>div{margin-top:10px;max-width:100%}.imagify-credit-left{padding-left:0}}.imagify-meteo-title.imagify-meteo-title{color:#FFF;font-size:17px}.imagify-space-left{display:inline-block;min-height:38px;min-width:245px;vertical-align:middle}.imagify-space-left>p{color:#FFF}#wp-admin-bar-imagify-profile [class^=imagify-bar-],[class^=imagify-bar-]{position:relative;height:1.5em;width:100%;background:#60758D;color:#FFF;font-size:10px}.base-transparent{background:0 0}[class^=imagify-bar-].right-outside-number{-webkit-box-sizing:border-box;box-sizing:border-box;padding-right:4.5em}.right-outside-number .imagify-barnb{display:block;margin-right:-4.5em;text-align:right;font-weight:700;line-height:1.5}#wp-admin-bar-imagify-profile .imagify-progress-value,.imagify-progress-value{position:absolute;top:0;right:0;left:0;bottom:0;text-align:center;line-height:13px;font-weight:700}#wp-admin-bar-imagify-profile .imagify-progress,.imagify-progress{height:1.5em}.imagify-progress{-webkit-transition:width .3s;-o-transition:width .3s;transition:width .3s}.imagify-bar-positive .imagify-progress{background:#8CC152}.imagify-bar-positive .imagify-barnb{color:#8CC152}.imagify-bar-negative .imagify-progress{background:#73818C}.imagify-bar-negative .imagify-barnb{color:#73818C}.imagify-bar-neutral .imagify-progress{background:#F5A623}.imagify-space-left .imagify-bar-negative .imagify-progress{background:#D0021B}#wpadminbar #wp-admin-bar-imagify-profile *{line-height:1.5;white-space:initial}#wpadminbar #wp-admin-bar-imagify .ab-submenu{padding-bottom:0}#wpadminbar #wp-admin-bar-imagify-profile .ab-item{height:auto;padding:0 13px}#wpadminbar #wp-admin-bar-imagify-profile{min-width:200px;padding:15px 0 10px;margin-top:.7em;background:#222}#wp-admin-bar-imagify .dashicons{font-family:dashicons;font-size:18px;vertical-align:middle;margin:0 5px 0 0}#wp-admin-bar-imagify .button-text{display:inline-block;vertical-align:middle}#wp-admin-bar-imagify .imagify-abq-row{display:table;width:100%}#wp-admin-bar-imagify .imagify-abq-row+.imagify-abq-row{margin-top:.75em}#wp-admin-bar-imagify .imagify-abq-row>*{display:table-cell}#wp-admin-bar-imagify-profile .imagify-meteo-icon{padding-right:7px}#wp-admin-bar-imagify-profile .imagify-meteo-icon img{width:37px}#wp-admin-bar-imagify-profile .imagify-meteo-title{font-size:17px}#wp-admin-bar-imagify-profile .imagify-meteo-subs{color:#72889F}#wpadminbar #wp-admin-bar-imagify-profile strong{font-weight:700}#wpadminbar #wp-admin-bar-imagify-profile .imagify-user-plan,#wpadminbar #wp-admin-bar-imagify-profile a{padding:0;color:#40B1D0}#wpadminbar #wp-admin-bar-imagify-profile .imagify-account-link{display:table}#wpadminbar #wp-admin-bar-imagify-profile .imagify-account-link>*{display:table-cell}#wpadminbar #wp-admin-bar-imagify-profile .imagify-space-left{max-width:210px;min-width:210px;width:210px}#wpadminbar #wp-admin-bar-imagify-profile .imagify-space-left p{font-size:12px}#wp-admin-bar-imagify-profile .imagify-error,#wp-admin-bar-imagify-profile .imagify-warning{padding:10px;margin:0 -13px -13px}#wp-admin-bar-imagify-profile .imagify-error p+p,#wp-admin-bar-imagify-profile .imagify-warning p+p{margin-top:.5em}#wp-admin-bar-imagify-profile .imagify-error p+p+p,#wp-admin-bar-imagify-profile .imagify-warning p+p+p,.imagify-list-infos li+li{margin-top:1em}#wpadminbar #wp-admin-bar-imagify-profile .btn-ghost,.btn-ghost{display:inline-block;height:auto;padding:7px 10px;border:1px solid #FFF;text-align:center;background:0 0;color:#FFF;border-radius:3px;-webkit-transition:all .275s;-o-transition:all .275s;transition:all .275s}#wpadminbar #wp-admin-bar-imagify-profile .btn-ghost:focus,#wpadminbar #wp-admin-bar-imagify-profile .btn-ghost:hover,.btn-ghost:focus,.btn-ghost:hover{background:#FFF;color:#888}.imagify-list-infos{max-width:100%;width:415px}.imagify-info-block,.imagify-list-infos li{position:relative;padding:10px;padding-left:42px;background:#D9E4EB;border-radius:4px;line-height:1.6}.imagify-list-infos .imagify-alt.imagify-alt{background:#8BA7B5;color:#FFF;font-weight:700}.imagify-info-block:before,.imagify-list-infos li:before{content:"";position:absolute;left:13px;top:14px;height:16px;width:16px;border:1px solid #46b1ce;border-radius:10px}.imagify-info-block:after,.imagify-list-infos li:after{content:"i";position:absolute;left:20px;top:13px;font-style:italic;color:#46b1ce}.imagify-cell .imagify-info-block{padding-top:0}.imagify-cell .imagify-info-block:after{top:6px}.imagify-cell .imagify-info-block:before{top:7px}.imagify-list-infos .imagify-alt:after,.imagify-list-infos .imagify-alt:before{color:#fff;border-color:#fff}.imagify-sub-title.imagify-sub-title{font-size:23px;background:#FFF;color:#2E3243;border-left:1px solid #D9D9D9;border-right:1px solid #D9D9D9;font-weight:lighter}.imagify-sub-title .icon-bulk{margin-right:10px;vertical-align:middle}.imagify-sub-title .title-text{display:inline-block;line-height:1;vertical-align:middle}.imagify-bulk .imagify-settings-section{border:1px solid #D9D9D9;border-top:0;background:#F2F5F7;color:#4A4A4A}.imagify-bulk .imagify-settings-section h3,.imagify-bulk .imagify-settings-section li,.imagify-bulk .imagify-settings-section p{color:#4A4A4A}.imagify-bulk .imagify-settings-section h3{margin-bottom:2em}.imagify-title .imagify-tooltips{position:absolute;top:100%;left:0}.imagify-tooltips .icon-round{float:left;display:inline-block;width:28px;height:28px;border:1px solid #FFF;margin-right:8px;margin-bottom:8px;font-size:17px;font-style:italic;line-height:29px;font-weight:700;text-align:center;border-radius:50%}.imagify-tooltips .tooltip-content{display:block;position:relative;max-width:250px;padding:7px 15px 8px;background:#2e3242;color:#FFF;font-size:10px;border-radius:3px}.imagify-tooltips.right .tooltip-content{margin-left:12px}.imagify-tooltips.bottom .tooltip-content{margin-top:4px}.imagify-inline-options label .tooltip-content{position:absolute;left:0;right:0;top:100%;text-transform:none;font-size:10px;letter-spacing:0;text-align:center}.imagify-ac-rt-big,.imagistatus{text-transform:uppercase;font-weight:700}.imagify-tooltips .tooltip-content:after{content:"";position:absolute}.imagify-tooltips.right .tooltip-content:after{top:16px;left:-6px;border-right:8px solid #2e3242;border-top:6px solid transparent;border-bottom:6px solid transparent}.imagify-tooltips.bottom .tooltip-content:after{top:-5px;left:50%;margin-left:-3px;border-bottom:6px solid #2e3242;border-left:6px solid transparent;border-right:6px solid transparent}.imagify-space-tooltips .tooltip-content{max-width:280px;margin-top:20px;margin-left:0;padding:5px 15px;font-size:13px;background:#40B1D0;-webkit-box-shadow:0 3px 0 #338EA6;box-shadow:0 3px 0 #338EA6}.imagify-space-tooltips .tooltip-content:after{top:-14px;left:50%;margin-left:-7px;border:0;border-bottom:15px solid #40B1D0;border-left:15px solid transparent;border-right:15px solid transparent}.tooltip-content.tooltip-table{display:table;width:100%}.tooltip-content.tooltip-table>*{display:table-cell;vertical-align:middle}.tooltip-content .cell-icon{width:28px}.tooltip-content .cell-icon .icon{margin-bottom:0}.tooltip-content .cell-text{padding:5px 10px 5px 0;line-height:1.3}.tooltip-content .cell-sep{width:1px;background:rgba(255,255,255,.4)}.tooltip-content .cell-cta{padding-left:10px}.tooltip-content .cell-cta a{display:block;color:#FFF;width:100%;height:100%;white-space:nowrap}.imagify-number-you-optimized .number{display:table-cell;padding-right:15px;font-size:36px;font-weight:700;line-height:1.1;vertical-align:middle;white-space:nowrap}.imagify-number-you-optimized .text{display:table-cell;vertical-align:middle;overflow:hidden;font-size:12px}.imagify-number-you-optimized .text br{display:none}.imagify-number-you-optimized>p{display:table}.imagify-number-you-optimized{padding-bottom:.85em;margin-bottom:1.35em;overflow:hidden;border-bottom:1px solid rgba(0,0,0,.05)}.imagify-bars p{font-weight:700;font-size:12px;margin-bottom:0}.imagify-bars+.imagify-number-you-optimized{border-bottom:0;padding-top:.85em}.imagify-bars+.imagify-number-you-optimized p{color:#46b1ce}.imagify-bulk-table{margin-top:2em;max-height:600px;max-height:60vh;overflow:auto}.imagify-ac-report-text,.imagiuploaded{overflow:hidden}.imagify-bulk-table table{width:100%;border-spacing:0;border-collapse:collapse;border:1px solid #D3D3D3}.imagify-bulk-table td{padding:8px 15px}.imagify-bulk-table thead th,.imagify-bulk-table thead tr{background:#2E3242}.imagify-bulk-table tfoot th,.imagify-bulk-table tfoot tr{background:#73818C}.imagify-bulk-table thead th{padding:14px 15px;text-align:left;color:#F2F5F7;font-weight:700;font-size:14px}.imagify-bulk-table tfoot td{padding:14px 15px;color:#F9FAFA}.imagify-bulk-table tbody td,.imagify-bulk-table tbody tr{background:#FFF}.imagify-bulk-table tbody tr:nth-child(odd),.imagify-bulk-table tbody tr:nth-child(odd) td{background:#F2F5F7}.imagify-bulk-table .imagify-row-progress{display:none}.imagify-bulk-table .imagify-row-progress,.imagify-bulk-table .imagify-row-progress td{height:15px;padding:0}.imagify-bulk-table .imagify-no-uploaded-yet td{height:200px;font-size:17px;letter-spacing:.1em;word-spacing:.12em;vertical-align:middle;text-transform:uppercase;font-weight:700;text-align:center;color:#999;background-color:#FFF}.imagify-row-complete{padding:35px 20px;margin-top:2em;background:#8BC34A;color:#FFF;text-shadow:0 0 2px rgba(0,0,0,.1)}.imagify-row-complete .imagify-ac-chart{margin-top:3px}.imagify-row-complete p{color:#FFF;margin:0}@-webkit-keyframes congrate{0%{opacity:0;-webkit-transform:scale(1)}50%{-webkit-transform:scale(1.05);opacity:1}100%{-webkit-transform:scale(1);opacity:1}}@keyframes congrate{0%{opacity:0;-webkit-transform:scale(1);transform:scale(1)}50%{-webkit-transform:scale(1.05);transform:scale(1.05);opacity:1}100%{-webkit-transform:scale(1);transform:scale(1);opacity:1}}.imagify-row-complete.done{-webkit-animation:congrate .5s ease-in-out;animation:congrate .5s ease-in-out}.imagify-all-complete{margin:1.5em 0}.imagify-all-complete>div{display:inline-block;vertical-align:middle}.imagify-ac-report{min-width:310px}.imagify-ac-chart{width:46px;height:46px;float:left;margin:0 20px 0 10px}.imagify-ac-report-text p{line-height:1.3}.imagify-ac-rt-big{font-size:24px;letter-spacing:.15em;word-spacing:.15em}.imagify-ac-share{text-align:right}.imagify-ac-share-content{display:inline-block;padding:10px 15px;background:rgba(255,255,255,.2)}.imagify-ac-share-content>*{display:inline-block;vertical-align:middle}.imagify-bulk-table .imagify-ac-share-content p{margin-right:5px}.imagify-share-networks,.imagify-share-networks li{margin:0}.imagify-share-networks li{display:inline-block}.imagify-share-networks a{display:inline-block;vertical-align:-7px;margin:0 5px;text-decoration:none;color:#FFF}.imagify-cell-filename{max-width:200px}.imagify-cell-status{max-width:145px}.imagify-cell-status .dashicons-warning{margin-right:2px}.imagify-cell-thumbnails{max-width:120px}td.imagify-cell-filename{-o-text-overflow:clip;text-overflow:clip;white-space:nowrap;overflow:hidden}.imagify-bulk-table td.imagify-cell-totaloriginal{padding-right:78px}.imagifilename,.imagiuploaded{display:inline-block;vertical-align:middle}.imagifilename{font-size:12px}.imagiuploaded{width:33px;height:33px;margin-right:5px;margin-left:-8px;background:url(../images/upload-image.png) no-repeat;background-size:cover}.imagiuploaded img{max-widht:100%;height:auto}.imagistatus{color:#8CA6B3}.status-compressing{color:#46B1CE}.status-error{color:#CE0B24}.status-warning{color:#f5a623}.status-complete{color:#8CC152}.imagify-error{background:#D0021B;color:#FFF}.imagify-settings-section .imagify-error{display:inline-block;padding:7px 10px;margin:10px 0 0 45px;border-radius:3px}.imagify-settings-section .imagify-error code{font-weight:400}.imagify-settings-section .imagify-error.hidden{display:none}#wpadminbar .imagify-warning *,.imagify-warning{background:#f5a623;color:#FFF;text-shadow:0 0 2px rgba(0,0,0,.2)}.imagify-bulk-table .imagify-cell-thumbnails{text-align:center}.imagify-cell-percentage,.imagify-cell-savings{color:#46B1CE;font-weight:700}.imagify-cell-optimized{font-weight:700}.imagify-cell-totaloriginal{text-align:right}.imagify-modal .h2,.imagify-modal .h3{font-weight:400;letter-spacing:.075em;text-align:center}.dashicons.rotate{-webkit-animation:icon-rotate 2.6s infinite linear;animation:icon-rotate 2.6s infinite linear}.dashicons-admin-generic{-webkit-transform-origin:48.75% 51.75%;-ms-transform-origin:48.75% 51.75%;transform-origin:48.75% 51.75%}.imagify-modal{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.js .imagify-modal{display:none;position:fixed;top:0;right:0;bottom:0;left:0;background-color:#1F2332;background-color:rgba(31,35,50,.95);z-index:99999}.imagify-modal-content{-webkit-box-sizing:border-box;box-sizing:border-box;position:relative;width:800px;max-width:95%;max-height:90vw;overflow:auto;padding:20px 25px;margin:1em auto;background:#FFF;-webkit-box-shadow:1px 1px 4px rgba(0,0,0,.7);box-shadow:1px 1px 4px rgba(0,0,0,.7);border-radius:3px}#imagify-visual-comparison .imagify-modal-content,.imagify-visual-comparison .imagify-modal-content{max-width:1400px;background:0 0;padding:5px;-webkit-box-shadow:none;box-shadow:none;border-radius:0}.imagify-modal .h2{margin:.5em 0;color:#8ba6b4;font-size:24px}.imagify-modal .h3{color:#40b1d0;font-size:18px}.text-justify{text-align:justify}.imagify-modal .close-btn{display:none;visibility:hidden;position:absolute;right:20px;top:20px;font-size:1.2em;border:0;background:0 0;border-radius:0;cursor:pointer}.imagify-modal .close-btn i{margin-left:-2px}.imagify-modal .close-btn:focus,.imagify-modal .close-btn:hover{color:#40b1d0}.js .imagify-modal .close-btn{display:block;visibility:visible}.js .imagify-iframe-viewing .close-btn{display:none}#imagify-visual-comparison .close-btn,.imagify-visual-comparison .close-btn{top:50px;right:5px;width:33px;height:33px;padding:1px 0 0 2px;border:1px solid #F2F2F2;color:#F2F2F2;line-height:19px;text-align:center;border-radius:50%}.imagify-visual-comparison .close-btn,.wp_attachment_image #imagify-visual-comparison .close-btn{top:0}.imagify-visual-comparison .imagify-modal-content,.wp_attachment_image #imagify-visual-comparison .imagify-modal-content{padding-top:40px}.imagify-modal .imagify-comparison-title{font-size:28px;margin-bottom:1em;color:#F2F2F2;text-align:left}.imagify-modal .imagify-comparison-title .twentytwenty-duo-buttons{position:static;margin:0 10px 0 15px}.imagify-comparison-title .twentytwenty-duo-buttons button{float:none;padding:6px 12px;font-size:16px;text-transform:none;border:1px solid #40B1D0;color:#889;letter-spacing:0}.imagify-comparison-title .twentytwenty-duo-buttons button:focus{outline:0;-webkit-box-shadow:none;box-shadow:none}.imagify-comparison-title .twentytwenty-duo-buttons .selected{border:1px solid #40B1D0;color:#FFF;background:#40B1D0}.imagify-comparison-levels{margin:15px 0;overflow:hidden}.imagify-comparison-levels div{display:none;min-width:175px;font-size:11px}.imagify-comparison-levels .imagify-chart,.imagify-comparison-levels .imagify-chart-container{width:25px;float:none;margin:0}.imagify-visual-comparison .imagify-chart-container canvas{width:15px!important;height:15px!important;margin-right:5px}.imagify-c-level.go-left{float:left}.imagify-c-level.go-right{float:right}.imagify-c-level.go-left,.imagify-c-level.go-right{display:table}.imagify-c-level .imagify-c-level-row{display:table-row;margin:0;color:#FFF}.imagify-c-level-row>span{display:table-cell;padding:2px 0}.imagify-c-level-row .value{text-align:right;padding-left:5px}.imagify-c-level-row .value.level{color:#40b1d0}.imagify-c-level-row .value.size{color:#8bc34a;font-weight:700}.imagify-c-level-row .value .imagify-chart{top:1px}@-webkit-keyframes icon-rotate{from{-webkit-transform:rotate(0);transform:rotate(0)}to{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@keyframes icon-rotate{from{-webkit-transform:rotate(0);transform:rotate(0)}to{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}.imagify-menu-bar-img{margin-top:1em}.imagify-modal .loader{position:absolute;top:50%;left:50%;margin:-32px 0 0 -32px;opacity:0;visibility:hidden;-webkit-transition:opacity .4s;-o-transition:opacity .4s;transition:opacity .4s}.imagify-modal .loading .loader{visibility:visible;opacity:1}.imagify-settings .imagify-visual-comparison-text{margin-top:1em;color:#40b1d0;font-weight:700}.imagify-border-styled,.imagify-flex-table,.imagify-modal-cols,.imagify-offer-header,.imagify-payment-modal .imagify-modal-content,.imagify-tabs{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row}.imagify-analyzing .imagify-numbers-calc,.imagify-modal-content.imagify-iframe-viewing .imagify-modal-sidebar,.imagify-modal-content.imagify-success-viewing .imagify-modal-sidebar,.imagify-modal-section .imagify-loader,.imagify-modal-section.imagify-analyzing .imagify-modal-cols,.imagify-numbers-notcalc{display:none}.imagify-border-styled,.imagify-modal-cols{-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.imagify-payment-modal{text-align:center;color:#7A8996}.imagify-payment-modal *{-webkit-box-sizing:border-box;box-sizing:border-box}.imagify-modal-loader{position:absolute;top:0;left:0;right:0;bottom:0;background:url(../images/loader-balls.svg) center no-repeat #fff;z-index:10}.imagify-payment-modal .imagify-modal-content{width:980px;max-width:100%;min-width:925px;padding:0}.imagify-modal-content.imagify-iframe-viewing{width:980px;height:672px;overflow:hidden}.imagify-iframe-viewing #imagify-payment-process-view{width:980px;height:668px}.imagify-payment-modal .imagify-modal-main{width:70%}.imagify-iframe-viewing .imagify-modal-main{width:auto}.imagify-payment-modal .imagify-modal-content.imagify-success-viewing{min-width:auto;width:450px;min-height:300px}.imagify-success-viewing .imagify-modal-main{width:100%}.imagify-payment-modal .imagify-modal-sidebar{width:30%;padding:15px 20px;background:#1F2332;color:#FFF}.imagify-modal-section{padding:0 25px}.imagify-modal-section.section-gray{margin:0 0 1em;padding:10px 25px 15px;background:#F6F7FB}.imagify-tabs-contents .section-gray{padding:8px 25px 10px}.imagify-modal-section .imagify-modal-title:first-child{margin-top:1em;margin-bottom:1.5em}.imagify-modal-section.section-gray .imagify-modal-title{margin-top:.5em;margin-bottom:.5em}.imagify-modal-title{font-size:1.8em}.imagify-analyzing .imagify-numbers-notcalc,.imagify-modal-section.imagify-analyzing .imagify-loader{display:block}.imagify-modal-section .imagify-loader{margin:2em auto}.imagify-border-styled{width:200px;margin:0 auto;color:#8BC34A;font-weight:700;font-size:.925em}.imagify-big-number,.imagify-payment-modal strong{font-weight:700;color:#4A4A4A}.imagify-big-number{font-size:3.7em;margin:-3px 0;line-height:1}.imagify-border-styled:after,.imagify-border-styled:before{content:"";height:1px;background:rgba(0,0,0,.1);-ms-flex-preferred-size:40px;flex-basis:40px}.imagify-border-styled:before{margin-right:5px}.imagify-border-styled:after{margin-left:5px}.imagify-col{-ms-flex-preferred-size:50%;flex-basis:50%}.imagify-modal .imagify-cols{padding:0 20px}.imagify-payment-modal .imagify-iconed{margin:1.5em 5em 1.5em 0}.imagify-iconed{position:relative;text-align:left;padding-left:42px;margin-right:15px;font-weight:500}.imagify-iconed .dashicons,.imagify-iconed .icon{position:absolute;font-size:2em;left:0;top:2px;color:#40B1D0}.imagify-payment-modal .close-btn{top:10px;right:10px;width:24px;height:24px;padding:2px 0 0 4.5px;color:#FFF;background:#40B1D0;border-radius:50%;-webkit-transition:all .275s;-o-transition:all .275s;transition:all .275s}.imagify-payment-modal .close-btn i{margin-left:-3.5px;margin-top:-.5px}.imagify-payment-modal .close-btn:hover{background:#F6F7FB}.imagify-offer-line{margin-top:1.5em}.imagify-offer-line+.imagify-offer-line{margin-top:.75em}.imagify-offer-header{-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;-webkit-box-align:center;-ms-flex-align:center;align-items:center;padding:0 0 0 15px;border-radius:4px 4px 0 0;-webkit-transition:all .275s;-o-transition:all .275s;transition:all .275s}.imagify-offer-header.imagify-offer-header.imagify-offer-header .imagify-inline-options label:last-child{border-radius:0 4px 0 0}.imagify-offer-header .imagify-inline-options{width:auto}.imagify-offer-title{font-weight:700;margin:0}.imagify-offer-header,.imagify-offer-header .imagify-inline-options input[type=radio]:not(:checked)+label{background:#E5EBEF}.imagify-offer-onetime .imagify-offer-header{padding-top:8px;padding-bottom:8px}.imagify-offer-onetimes>div{padding-top:15px;padding-bottom:15px}.imagify-offer-header .imagify-inline-options input[type=radio]:checked+label,.imagify-offer-header .imagify-inline-options input[type=radio]:not(:checked)+label{position:relative;padding:7px 30px;font-size:1em;letter-spacing:.05em;color:inherit;-webkit-box-shadow:0 0 0;box-shadow:0 0 0;border-radius:0}.imagify-offer-header .imagify-inline-options input[type=radio]:checked+label{background:#F6F7FB}.imagify-2-free{position:absolute;bottom:100%;left:0;right:0;padding:2px 10px;margin-bottom:8px;font-size:.8em;letter-spacing:0;text-transform:none;text-align:center;color:#FFF;background:#10121A;border-radius:2px}.imagify-2-free:after{content:"";position:absolute;left:50%;bottom:-3px;margin-left:-3px;border-top:3px solid #10121A;border-left:3px solid transparent;border-right:3px solid transparent}.imagify-2-free.imagify-b-right{bottom:auto;left:100%;right:-100%;margin-bottom:0;margin-left:8px}.imagify-2-free.imagify-b-right:after{left:-3px;bottom:auto;top:50%;margin-top:-3px;margin-left:0;border-right:3px solid #10121A;border-top:3px solid transparent;border-bottom:3px solid transparent;border-left:0}.imagify-2-free.imagify-b-bottom{bottom:-100%;left:0;right:0;margin-top:8px}.imagify-2-free.imagify-b-bottom:after{top:-3px;bottom:auto;border-bottom:3px solid #10121A;border-left:3px solid transparent;border-right:3px solid transparent;border-top:0}.imagify-offer-content{text-align:left;background:#F6F7FB;border-radius:0 0 4px 4px;-webkit-transition:all .275s;-o-transition:all .275s;transition:all .275s}.imagify-offer-onetime .imagify-offer-content{padding:10px 0}div.imagify-col-checkbox{position:relative;width:25.5%;padding-top:10px;padding-bottom:7px}.imagify-col-checkbox label{display:block;padding-left:55px!important}.imagify-col-checkbox .imagify-checkbox.imagify-checkbox:checked,.imagify-col-checkbox .imagify-checkbox.imagify-checkbox:not(:checked){position:absolute;top:50%;left:6px;margin:-8px 0 0}.imagify-col-checkbox .imagify-checkbox.imagify-checkbox:checked+label:before,.imagify-col-checkbox .imagify-checkbox.imagify-checkbox:not(:checked)+label:before{margin:0;top:-2px;left:6px;-webkit-transition:all .275s;-o-transition:all .275s;transition:all .275s}.imagify-offer-by,.imagify-offer-size{-webkit-transition:all .275s;-o-transition:all .275s}.imagify-col-checkbox .imagify-checkbox.imagify-checkbox:checked+label:after,.imagify-col-checkbox .imagify-checkbox.imagify-checkbox:not(:checked)+label:after{top:1px;left:13px}.imagify-offer-size{font-size:30px;color:#2E3243;font-weight:700;transition:all .275s}.imagify-offer-by{font-size:10px;transition:all .275s}.imagify-approx{display:none;font-size:11px;line-height:1.2;-webkit-transition:all .275s;-o-transition:all .275s;transition:all .275s}div.imagify-col-price{width:35%}.imagify-flex-table .imagify-price-block{padding-left:0;padding-right:0}.imagify-offer-monthlies .imagify-price-block,.imagify-offer-monthly .imagify-flex-table .imagify-price-block{padding-top:0}.imagify-flex-table .imagify-price-complement{padding-right:0;font-size:10px;font-weight:700}.imagify-price-block,.imagify-price-discount{white-space:nowrap}.imagify-price-block span,.imagify-price-discount span{display:inline-block;vertical-align:middle}.imagify-price-discount.imagify-price-discount{position:relative;-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;padding-top:15px;font-weight:700;width:70px}.imagify-price-discount:before{content:"";position:absolute;top:25px;width:62%;height:2px;background:#2E3243;-webkit-transform:rotate(-15deg);-ms-transform:rotate(-15deg);transform:rotate(-15deg)}.imagify-offer-onetimes .imagify-price-discount:before{width:100%}.imagify-price-discount-dollar{color:#2E3243}.imagify-price-discount-number{color:#8BA6B4}.imagify-offer-selected .imagify-price-discount-number{color:#FFF}span.imagify-dollars{color:#1F2332;font-size:18px;font-weight:700;vertical-align:-2px}.imagify-offer-onetime .imagify-col-price{padding-top:0}.imagify-offer-onetime .imagify-dollars{vertical-align:-1px}.imagify-price-big,.imagify-price-mini{color:#40B1D0;font-weight:700}.imagify-price-big{font-size:36px}span.imagify-price-mini{font-size:18px;vertical-align:2px}span.imagify-price-by{font-size:10px;color:#1F2332;vertical-align:-13px;text-indent:-27px}.imagify-col-other-actions{width:18.5%;text-align:right}.imagify-col-other-actions a{font-size:11px}.imagify-offer-selected,.imagify-offer-selected .imagify-col-other-actions a,.imagify-offer-selected .imagify-offer-size,.imagify-offer-selected .imagify-offer-title,.imagify-offer-selected .imagify-price-big,.imagify-offer-selected .imagify-price-complement,.imagify-offer-selected .imagify-price-mini{color:#FFF}.imagify-offer-selected .imagify-offer-header,.imagify-offer-selected .imagify-offer-header .imagify-inline-options input[type=radio]:not(:checked)+label{background:#338EA6}.imagify-offer-selected .imagify-offer-content,.imagify-offer-selected .imagify-offer-header .imagify-inline-options input[type=radio]:checked+label{background:#40B1D0}.imagify-offer-selected .imagify-checkbox.imagify-checkbox:checked+label:before,.imagify-offer-selected .imagify-checkbox.imagify-checkbox:not(:checked)+label:before{border-color:#FFF;background:#40B1D0}.imagify-offer-selected .imagify-offer-by{color:#2E3243}.imagify-enough-free .imagify-not-enough-title,.imagify-enough-title{display:none}.imagify-enough-free .imagify-enough-title{display:block}.imagify-submit-line{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;-webkit-box-align:center;-ms-flex-align:center;align-items:center;margin:2em 0;text-align:left}.imagify-coupon-section{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.imagify-coupon-section p{margin:0;line-height:1.3}.imagify-coupon-text{width:200px;max-width:100%;padding-right:15px}.imagify-coupon-loader{display:none}.imagify-coupon-text.checking{text-align:right}.imagify-coupon-text.checking .imagify-coupon-loader{display:inline}.imagify-coupon-text.checking label{display:none}.imagify-coupon-input{position:relative}.imagify-coupon-input input{position:relative;z-index:1}[id=imagify-coupon-validate].button-secondary{position:absolute;top:1px;right:3px;bottom:2px;-webkit-box-shadow:none;box-shadow:none;padding:4px 10px;z-index:0;-webkit-transition:-webkit-transform .275s;-o-transition:transform .275s;transition:transform .275s;transition:transform .275s,-webkit-transform .275s}.imagify-canbe-validate [id=imagify-coupon-validate]{-webkit-transform:translateX(45px);-ms-transform:translateX(45px);transform:translateX(45px)}.imagify-modal-section+.imagify-modal-promotion{margin-top:-1em}.imagify-modal-promotion{position:relative;overflow:hidden;display:none;-webkit-box-align:center;-ms-flex-align:center;align-items:center;padding:15px 25px;background:#604D90;text-shadow:0 0 3px rgba(0,0,0,.3)}.imagify-modal-promotion.active{display:-webkit-box;display:-ms-flexbox;display:flex}[id=imagify-pricing-tab-onetime] .imagify-modal-promotion{margin-bottom:4em}.imagify-modal-promotion:before{content:"\f488";position:absolute;top:28px;left:8%;font-family:dashicons;font-size:90px;color:#8476A9;text-shadow:none}.imagify-modal-promotion p{position:relative;margin:.2em 0;color:#FFF}.imagify-promo-title{-ms-flex-preferred-size:100%;flex-basis:100%;text-transform:uppercase;font-size:20px;font-weight:700;letter-spacing:.125em}.imagify-until-date{-ms-flex-preferred-size:200px;flex-basis:200px;text-align:right}.imagify-until-date strong{color:#FFF}.imagify-submit-line button{font-size:16px}input.imagify-coupon-code{padding:10px;border:2px solid #7A8996;font-size:.875em;font-weight:700;border-radius:3px}.validated.imagify-coupon-section .imagify-coupon-text,.validated.imagify-coupon-section strong{color:#8BC34A}.validated.imagify-coupon-section .imagify-coupon-code{color:#8BC34A;border-color:#8BC34A}.invalid.imagify-coupon-section .imagify-coupon-text,.invalid.imagify-coupon-section strong{color:#d0021b}.invalid.imagify-coupon-section .imagify-coupon-code{color:#d0021b;border-color:#d0021b}.imagify-footer-lines{width:500px;max-width:100%;margin:2em auto 2.5em;font-size:.85em;line-height:1.5}.imagify-year-selected .imagify-switch-my .imagify-yearly{display:block}.imagify-month-selected .imagify-switch-my .imagify-yearly,.imagify-year-selected .imagify-switch-my .imagify-monthly{display:none}.imagify-month-selected .imagify-switch-my .imagify-monthly{display:block}.imagify-flex-table{-webkit-box-align:center;-ms-flex-align:center;align-items:center}.imagify-flex-table>*{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;padding:7px 15px}div.imagify-col-details{width:22%;padding-left:25px}.imagify-col-details p{margin:0}.imagify-pricing-table{margin:0 20px}.imagify-pricing-table .imagify-offer-line{padding:.6em 0;border:2px solid #E8EEF0;text-align:left;border-radius:3px}.imagify-pricing-table .imagify-offer-line:first-child{margin-top:.75em}.imagify-pricing-table .imagify-offer-line.imagify-offer-selected:first-child{margin-top:1.75em}.imagify-pricing-table .imagify-offer-line+.imagify-offer-line{margin-top:-2px}.imagify-pricing-table .imagify-col-other-actions{width:20.5%}.imagify-pricing-table .imagify-approx{margin-left:0;line-height:.5;margin-bottom:1em}.imagify-pricing-table .imagify-offer-selected{-webkit-transform:scale(1.03);-ms-transform:scale(1.03);transform:scale(1.03);background:#40B1D0;border-width:0}.imagify-pricing-table .imagify-offer-selected .imagify-approx{color:#FFF}.imagify-pricing-table .imagify-button-secondary{padding:3px 20px;-webkit-box-shadow:none;box-shadow:none;text-transform:uppercase;font-size:12px;letter-spacing:.025em}.imagify-offer-selected.imagify-offer-selected .imagify-button-secondary{border:2px solid #FFF;background:#40B1D0;-webkit-box-shadow:none;box-shadow:none;text-shadow:none!important}.imagify-offer-selected.imagify-offer-selected .imagify-button-secondary:focus,.imagify-offer-selected.imagify-offer-selected .imagify-button-secondary:hover{background:#FFF;color:#40B1D0}.imagify-col .imagify-special-needs{margin-left:25px}.imagify-special-needs strong{font-size:25px;font-weight:700;color:#40B1D0}.imagify-special-needs span{display:block;font-size:12px;margin-top:-.5em}div.imagify-col-price{position:relative}.imagify-recommend{display:none;position:absolute;left:-20px;bottom:100%;padding:0;margin-bottom:8px;color:#1F2332;font-weight:700;font-style:italic}.imagify-offer-selected .imagify-recommend,.imagify-tab-content.imagify-current{display:block}[class*=imagify-onetime-] .imagify-recommend{left:65px;margin-bottom:20px}.imagify-recommend:before{content:"";position:absolute;top:7px;left:-35px;width:29px;height:30px;background:url(../images/icon-arrow-choice.png) 0 no-repeat;background-size:contain}@media only screen and (-webkit-min-device-pixel-ratio:2),only screen and (-o-min-device-pixel-ratio:2/1),only screen and (min-resolution:192dpi),only screen and (min-resolution:2dppx){.imagify-recommend:before{background-image:url(../images/icon-arrow-choice.svg)}}.imagify-offer-line[class*=imagify-onetime-]{padding:0;margin:.3em 0 0}.imagify-offer-line.imagify-offer-line[class*=imagify-onetime-]:first-child{margin-top:2em}.imagify-offer-line[class*=imagify-onetime-]+.imagify-offer-line{margin-top:.5em}.imagify-offer-selected.imagify-offer-line[class*=imagify-onetime-]{-webkit-transform:scale(1);-ms-transform:scale(1);transform:scale(1);border-width:2px}.imagify-offer-line[class*=imagify-onetime-] .imagify-col-details{position:relative;overflow:hidden;width:21%;background:#1F2332;color:#FFF}.imagify-offer-selected.imagify-offer-line[class*=imagify-onetime-] .imagify-col-details{background:#338EA6}.imagify-offer-line[class*=imagify-onetime-] .imagify-col-details:before{content:"";position:absolute;bottom:0;right:25px;width:75px;height:54px;background:url(../images/icon-pack.png)}.imagify-offer-line[class*=imagify-onetime-] .imagify-col-other-actions{width:30%}.imagify-offer-line[class*=imagify-onetime-] .imagify-approx,.imagify-offer-line[class*=imagify-onetime-] .imagify-offer-size{color:#FFF}.imagify-offer-line[class*=imagify-onetime-] .imagify-offer-size{font-size:24px}.imagify-offer-line[class*=imagify-onetime-] .imagify-approx{font-size:12px}.imagify-offer-line[class*=imagify-onetime-] .imagify-price-block{padding-left:10px}.imagify-offer-line[class*=imagify-onetime-] .imagify-dollars{vertical-align:middle}.imagify-offer-line[class*=imagify-onetime-] .imagify-price-big{vertical-align:-5px}.imagify-offer-line[class*=imagify-onetime-] .imagify-price-mini{vertical-align:7px}.imagify-tabs{margin-bottom:0;list-style:none;background:#E5EBEF}.imagify-modal-content .imagify-tabs{margin:1em 0 0}.imagify-tab{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;width:50%;margin:0;font-size:23px}.imagify-tab a{display:block;padding:15px 10px;color:inherit;text-decoration:none}.imagify-tab a:focus{-webkit-box-shadow:none;box-shadow:none;outline:0;color:#40B1D8}.imagify-tab.imagify-current a{background:#F6F7FB}.imagify-tab-content{display:none}.imagify-tab-content .imagify-modal-section:first-child{margin-top:0}.imagify-modal-sidebar-content,.imagify-payment-modal .imagify-modal-sidebar{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}.imagify-modal-sidebar-content{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1}p.imagify-modal-sidebar-title{margin-top:5px;padding-right:40px;font-size:18px;color:#FFF}.imagify-modal-testimony{margin-top:1em}.imagify-modal-testimony+.imagify-modal-testimony{margin-top:2em}@media (max-height:620px){.imagify-modal-testimony+.imagify-modal-testimony{display:none}}.imagify-modal-testimony-person{display:table;width:100%}.imagify-modal-testimony-person>*{display:table-cell;vertical-align:middle}.imagify-modal-avatar{width:114px;line-height:0}.imagify-modal-avatar img{border:2px solid #FFF;border-radius:50%;width:96px;height:96px}.imagify-modal-identity a{text-decoration:none;font-weight:700}.imagify-modal-identity a:first-child{font-size:13px}.imagify-modal-identity a:first-child+a{display:block;font-size:10px;color:#7A8996}.imagify-modal-testimony-content p{font-size:13px;font-style:italic;line-height:1.7;color:#7A8996}.imagify-modal-sidebar-trust{margin-top:auto;padding-top:1.5em}.imagify-modal-sidebar-trust p{margin:0;font-weight:700;font-size:12px;line-height:1.7}.imagify-modal-sidebar-trust p img{margin-right:3px;vertical-align:-2px}.imagify-modal-sidebar-trust p+p{font-size:11px}.imagify-cart{text-align:left}.imagify-cart .imagify-cart-list{border-top:1px solid rgba(122,137,150,.2);border-bottom:1px solid rgba(122,137,150,.2)}.imagify-cart .imagify-cart-label{margin-bottom:.5em;font-size:10px;color:#2E3243}.imagify-cart-list p{margin:0;font-weight:700}.imagify-cart-item{margin:.4em 0}.imagify-cart .imagify-cart-suggestion{margin-top:-.3em}.imagify-cart-suggestion a,.imagify-cl-description p{font-size:10px}.imagify-remove-from-cart{border:0;padding:0;width:14px;height:14px;line-height:13px;border-radius:50%;background:#40B1D0;cursor:pointer;-webkit-transition:background .3s;-o-transition:background .3s;transition:background .3s}.imagify-remove-from-cart i:before{position:relative;top:-6px;left:-3px;font-size:13px;color:#FFF}.imagify-remove-from-cart:focus,.imagify-remove-from-cart:hover{background:#D0021B}.imagify-cart .imagify-cl-remove{-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;width:45px}.imagify-cart .imagify-cl-name{-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;width:200px}.imagify-cart .imagify-cl-description{-webkit-align-self:flex-start;-ms-flex-item-align:start;align-self:flex-start;padding-top:10px}.imagify-cart .imagify-cl-price{text-align:right}#imagify-payment-iframe{width:980px;height:672px;background:url(../images/loader-balls.svg) 50% 50% no-repeat #f6f7fb}.imagify-success-view{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;height:100%}.imagify-success-view p{font-weight:700;font-size:16px}.imagify-cart-emptied-item{margin:.3em auto;padding:6px 20px;background:#E6EBEF;border-radius:20px}.imagify-cart-emptied-item.imagify-cart-emptied-item p{font-weight:700}.imagify-cart-emptied-item a{color:#40b1d0;float:right;font-weight:700}
|
assets/js/bulk.js
CHANGED
@@ -181,7 +181,7 @@ window.imagify = window.imagify || {
|
|
181 |
|
182 |
e.preventDefault();
|
183 |
|
184 |
-
if (
|
185 |
optimizationLevel = -1;
|
186 |
}
|
187 |
|
@@ -262,20 +262,20 @@ window.imagify = window.imagify || {
|
|
262 |
|
263 |
// Before the attachment optimization.
|
264 |
Optimizer.before( function( data ) {
|
265 |
-
table.find( '.imagify-row-progress' ).after( '<tr id="attachment-' + data.id + '"><td class="imagify-cell-filename"><span class="imagiuploaded"><img src="' + data.thumbnail + '"
|
266 |
} )
|
267 |
// After the attachment optimization.
|
268 |
.each( function( data ) {
|
269 |
var $progress = $( '#imagify-progress-bar' ),
|
270 |
errorClass = 'error',
|
271 |
errorDashicon = 'dismiss',
|
272 |
-
errorMessage =
|
273 |
|
274 |
$progress.css( { 'width': data.progress + '%' } );
|
275 |
$progress.find( '.percent' ).html( data.progress + '%' );
|
276 |
|
277 |
if ( data.success ) {
|
278 |
-
$( '#attachment-' + data.image + ' .imagify-cell-status' ).html( '<span class="imagistatus status-complete"><span class="dashicons dashicons-yes"></span>
|
279 |
$( '#attachment-' + data.image + ' .imagify-cell-original' ).html( data.original_size_human );
|
280 |
$( '#attachment-' + data.image + ' .imagify-cell-optimized' ).html( data.new_size_human );
|
281 |
$( '#attachment-' + data.image + ' .imagify-cell-percentage' ).html( '<span class="imagify-chart"><span class="imagify-chart-container"><canvas height="18" width="18" id="imagify-consumption-chart" style="width: 18px; height: 18px;"></canvas></span></span><span class="imagipercent">' + data.percent + '</span>%' );
|
@@ -285,7 +285,7 @@ window.imagify = window.imagify || {
|
|
285 |
|
286 |
// The table footer total optimized files.
|
287 |
files = files + data.thumbnails + 1;
|
288 |
-
$( '.imagify-cell-nb-files' ).html(
|
289 |
|
290 |
// The table footer original size.
|
291 |
original_overall_size = original_overall_size + data.original_overall_size;
|
@@ -312,10 +312,10 @@ window.imagify = window.imagify || {
|
|
312 |
if ( data.error.indexOf( 'This image is already compressed' ) >= 0 ) {
|
313 |
errorClass = 'warning';
|
314 |
errorDashicon = 'warning';
|
315 |
-
errorMessage =
|
316 |
} else {
|
317 |
errors++;
|
318 |
-
$( '.imagify-cell-errors' ).html(
|
319 |
}
|
320 |
|
321 |
$( '#attachment-' + data.image ).after( '<tr><td colspan="7"><span class="status-' + errorClass + '">' + data.error + '</span></td></tr>' );
|
@@ -356,7 +356,7 @@ window.imagify = window.imagify || {
|
|
356 |
}
|
357 |
} )
|
358 |
.error( function( id ) {
|
359 |
-
imagify.log(
|
360 |
} )
|
361 |
.run();
|
362 |
} )
|
181 |
|
182 |
e.preventDefault();
|
183 |
|
184 |
+
if ( undefined === optimizationLevel ) {
|
185 |
optimizationLevel = -1;
|
186 |
}
|
187 |
|
262 |
|
263 |
// Before the attachment optimization.
|
264 |
Optimizer.before( function( data ) {
|
265 |
+
table.find( '.imagify-row-progress' ).after( '<tr id="attachment-' + data.id + '"><td class="imagify-cell-filename"><span class="imagiuploaded"><img src="' + data.thumbnail + '" alt=""/></span><span class="imagifilename">' + data.filename + '</span></td><td class="imagify-cell-status"><span class="imagistatus status-compressing"><span class="dashicons dashicons-admin-generic rotate"></span>' + imagifyBulk.labels.optimizing + '<span></span></span></td><td class="imagify-cell-original"></td><td class="imagify-cell-optimized"></td><td class="imagify-cell-percentage"></td><td class="imagify-cell-thumbnails"></td><td class="imagify-cell-savings"></td></tr>' );
|
266 |
} )
|
267 |
// After the attachment optimization.
|
268 |
.each( function( data ) {
|
269 |
var $progress = $( '#imagify-progress-bar' ),
|
270 |
errorClass = 'error',
|
271 |
errorDashicon = 'dismiss',
|
272 |
+
errorMessage = imagifyBulk.labels.error;
|
273 |
|
274 |
$progress.css( { 'width': data.progress + '%' } );
|
275 |
$progress.find( '.percent' ).html( data.progress + '%' );
|
276 |
|
277 |
if ( data.success ) {
|
278 |
+
$( '#attachment-' + data.image + ' .imagify-cell-status' ).html( '<span class="imagistatus status-complete"><span class="dashicons dashicons-yes"></span>' + imagifyBulk.labels.complete + '</span>' );
|
279 |
$( '#attachment-' + data.image + ' .imagify-cell-original' ).html( data.original_size_human );
|
280 |
$( '#attachment-' + data.image + ' .imagify-cell-optimized' ).html( data.new_size_human );
|
281 |
$( '#attachment-' + data.image + ' .imagify-cell-percentage' ).html( '<span class="imagify-chart"><span class="imagify-chart-container"><canvas height="18" width="18" id="imagify-consumption-chart" style="width: 18px; height: 18px;"></canvas></span></span><span class="imagipercent">' + data.percent + '</span>%' );
|
285 |
|
286 |
// The table footer total optimized files.
|
287 |
files = files + data.thumbnails + 1;
|
288 |
+
$( '.imagify-cell-nb-files' ).html( imagifyBulk.labels.nbrFiles.replace( '%s', files ) );
|
289 |
|
290 |
// The table footer original size.
|
291 |
original_overall_size = original_overall_size + data.original_overall_size;
|
312 |
if ( data.error.indexOf( 'This image is already compressed' ) >= 0 ) {
|
313 |
errorClass = 'warning';
|
314 |
errorDashicon = 'warning';
|
315 |
+
errorMessage = imagifyBulk.labels.notice;
|
316 |
} else {
|
317 |
errors++;
|
318 |
+
$( '.imagify-cell-errors' ).html( imagifyBulk.labels.nbrErrors.replace( '%s', errors ) );
|
319 |
}
|
320 |
|
321 |
$( '#attachment-' + data.image ).after( '<tr><td colspan="7"><span class="status-' + errorClass + '">' + data.error + '</span></td></tr>' );
|
356 |
}
|
357 |
} )
|
358 |
.error( function( id ) {
|
359 |
+
imagify.log( "Can't optimize image with id " + id + "." );
|
360 |
} )
|
361 |
.run();
|
362 |
} )
|
assets/js/bulk.min.js
CHANGED
@@ -1 +1 @@
|
|
1 |
-
window.imagify=window.imagify||{concat:ajaxurl.indexOf("?")>0?"&":"?",log:function(a){void 0!==console&&console.log(a)},info:function(a){void 0!==console&&console.info(a)}},function(a,b,c,d){function e(b){b.each(function(){var b=a(this),c=parseInt(b.closest(".imagify-chart").next(".imagipercent").text(),10),d=[{value:c,color:"#00B3D3"},{value:100-c,color:"#D8D8D8"}];new Chart(b[0].getContext("2d")).Doughnut(d,{segmentStrokeColor:"#FFF",segmentStrokeWidth:1,animateRotate:!0,tooltipEvents:[]})})}function f(b){b.each(function(){var b=a(this),c=parseInt(b.closest(".imagify-ac-chart").attr("data-percent"),10),d=[{value:c,color:"#40B1D0"},{value:100-c,color:"#FFFFFF"}];new Chart(b[0].getContext("2d")).Doughnut(d,{segmentStrokeColor:"transparent",segmentStrokeWidth:0,animateRotate:!0,animation:!0,percentageInnerCutout:70,tooltipEvents:[]})})}var g,h,i=b.getElementById("imagify-overview-chart"),j=[{value:imagifyBulk.labels.totalUnoptimizedAttachments,color:"#D9E4EB",highlight:"#D9E4EB",label:imagifyBulk.labels.overviewChartLabels.unoptimized},{value:imagifyBulk.labels.totalOptimizedAttachments,color:"#46B1CE",highlight:"#46B1CE",label:imagifyBulk.labels.overviewChartLabels.optimized},{value:imagifyBulk.labels.totalErrorsAttachments,color:"#2E3242",highlight:"#2E3242",label:imagifyBulk.labels.overviewChartLabels.error}];i&&(g=new Chart(i.getContext("2d")).Doughnut(j,{segmentStrokeColor:"transparent",segmentStrokeWidth:0,animateRotate:!0,animation:!0,percentageInnerCutout:85,legendTemplate:'<ul class="imagify-<%=name.toLowerCase()%>-legend"><% for (var i=0; i<segments.length; i++){%><li><span style="background-color:<%=segments[i].fillColor%>"></span><%if(segments[i].label){%><%=segments[i].label%><%}%></li><%}%></ul>',tooltipTemplate:"<%= value %>"}),h='<ul class="imagify-doughnut-legend">',a(j).each(function(a){h+='<li><span style="background-color:'+j[a].color+'"></span>'+j[a].label+"</li>"}),h+="</ul>",b.getElementById("imagify-overview-chart-legend").innerHTML=h),a(b).on("heartbeat-send",function(a,b){b.imagify_heartbeat=imagifyBulk.heartbeat_id}),a(b).on("heartbeat-tick",function(b,c){c.imagify_bulk_data&&(c=c.imagify_bulk_data,a("#imagify-overview-chart-percent").html(c.optimized_attachments_percent+"<span>%</span>"),a(".imagify-total-percent").html(c.optimized_attachments_percent+"%"),a(".imagify-unconsumed-percent").html(c.unconsumed_quota+"%"),a(".imagify-unconsumed-bar").css("width",c.unconsumed_quota+"%"),a("#imagify-total-optimized-attachments").html(c.already_optimized_attachments),a("#imagify-original-bar").find(".imagify-barnb").html(c.original_human),a("#imagify-optimized-bar").css("width",c.optimized_percent+"%").find(".imagify-barnb").html(c.optimized_human),a("#imagify-total-optimized-attachments-pct").html(c.optimized_percent+"%"),g.segments[0].value=c.unoptimized_attachments,g.segments[1].value=c.optimized_attachments,g.segments[2].value=c.errors_attachments,g.update())}),a("#imagify-simulate-bulk-action").on("click",function(b){b.preventDefault(),a("#imagify-bulk-action").trigger("click")}),a("#imagify-bulk-action").on("click",function(b){var d,g=a(this),h=a('[name="optimization_level"]:checked').val();b.preventDefault(),void 0===h&&(h=-1),g.attr("disabled")||(g.attr("disabled","disabled"),g.find(".dashicons").addClass("rotate"),d=function(){return imagifyBulk.labels.processing},a(c).on("beforeunload",d),swal({title:imagifyBulk.labels.waitTitle,html:imagifyBulk.labels.waitText,showConfirmButton:!1,imageUrl:imagifyBulk.labels.waitImageUrl}),a.get(ajaxurl+imagify.concat+"action="+imagifyBulk.ajax_action+"&optimization_level="+h+"&imagifybulkuploadnonce="+a("#imagifybulkuploadnonce").val()).done(function(b){var h,i,j="",k="",l=0,m=0,n=0,o=0;if(!b.success)return g.removeAttr("disabled"),g.find(".dashicons").removeClass("rotate"),a(c).off("beforeunload",d),"invalid-api-key"===b.data.message&&(j=imagifyBulk.labels.invalidAPIKeyTitle),"over-quota"===b.data.message&&(j=imagifyBulk.labels.overQuotaTitle,imagifyBulk.labels.overQuotaText),"no-images"===b.data.message&&(j=imagifyBulk.labels.noAttachmentToOptimizeTitle,k=imagifyBulk.labels.noAttachmentToOptimizeText),void swal({title:j,html:k,type:"info",customClass:"imagify-sweet-alert"});swal.close(),a(".imagify-row-progress").slideDown(),a(".imagify-no-uploaded-yet, .imagify-row-complete").hide(200),i=a(".imagify-bulk-table table tbody"),h=new ImagifyGulp({lib:ajaxurl+imagify.concat+"action=imagify_bulk_upload&imagifybulkuploadnonce="+a("#imagifybulkuploadnonce").val(),images:b.data,context:imagifyBulk.ajax_context}),h.before(function(a){i.find(".imagify-row-progress").after('<tr id="attachment-'+a.id+'"><td class="imagify-cell-filename"><span class="imagiuploaded"><img src="'+a.thumbnail+'"
|
1 |
+
window.imagify=window.imagify||{concat:ajaxurl.indexOf("?")>0?"&":"?",log:function(a){void 0!==console&&console.log(a)},info:function(a){void 0!==console&&console.info(a)}},function(a,b,c,d){function e(b){b.each(function(){var b=a(this),c=parseInt(b.closest(".imagify-chart").next(".imagipercent").text(),10),d=[{value:c,color:"#00B3D3"},{value:100-c,color:"#D8D8D8"}];new Chart(b[0].getContext("2d")).Doughnut(d,{segmentStrokeColor:"#FFF",segmentStrokeWidth:1,animateRotate:!0,tooltipEvents:[]})})}function f(b){b.each(function(){var b=a(this),c=parseInt(b.closest(".imagify-ac-chart").attr("data-percent"),10),d=[{value:c,color:"#40B1D0"},{value:100-c,color:"#FFFFFF"}];new Chart(b[0].getContext("2d")).Doughnut(d,{segmentStrokeColor:"transparent",segmentStrokeWidth:0,animateRotate:!0,animation:!0,percentageInnerCutout:70,tooltipEvents:[]})})}var g,h,i=b.getElementById("imagify-overview-chart"),j=[{value:imagifyBulk.labels.totalUnoptimizedAttachments,color:"#D9E4EB",highlight:"#D9E4EB",label:imagifyBulk.labels.overviewChartLabels.unoptimized},{value:imagifyBulk.labels.totalOptimizedAttachments,color:"#46B1CE",highlight:"#46B1CE",label:imagifyBulk.labels.overviewChartLabels.optimized},{value:imagifyBulk.labels.totalErrorsAttachments,color:"#2E3242",highlight:"#2E3242",label:imagifyBulk.labels.overviewChartLabels.error}];i&&(g=new Chart(i.getContext("2d")).Doughnut(j,{segmentStrokeColor:"transparent",segmentStrokeWidth:0,animateRotate:!0,animation:!0,percentageInnerCutout:85,legendTemplate:'<ul class="imagify-<%=name.toLowerCase()%>-legend"><% for (var i=0; i<segments.length; i++){%><li><span style="background-color:<%=segments[i].fillColor%>"></span><%if(segments[i].label){%><%=segments[i].label%><%}%></li><%}%></ul>',tooltipTemplate:"<%= value %>"}),h='<ul class="imagify-doughnut-legend">',a(j).each(function(a){h+='<li><span style="background-color:'+j[a].color+'"></span>'+j[a].label+"</li>"}),h+="</ul>",b.getElementById("imagify-overview-chart-legend").innerHTML=h),a(b).on("heartbeat-send",function(a,b){b.imagify_heartbeat=imagifyBulk.heartbeat_id}),a(b).on("heartbeat-tick",function(b,c){c.imagify_bulk_data&&(c=c.imagify_bulk_data,a("#imagify-overview-chart-percent").html(c.optimized_attachments_percent+"<span>%</span>"),a(".imagify-total-percent").html(c.optimized_attachments_percent+"%"),a(".imagify-unconsumed-percent").html(c.unconsumed_quota+"%"),a(".imagify-unconsumed-bar").css("width",c.unconsumed_quota+"%"),a("#imagify-total-optimized-attachments").html(c.already_optimized_attachments),a("#imagify-original-bar").find(".imagify-barnb").html(c.original_human),a("#imagify-optimized-bar").css("width",c.optimized_percent+"%").find(".imagify-barnb").html(c.optimized_human),a("#imagify-total-optimized-attachments-pct").html(c.optimized_percent+"%"),g.segments[0].value=c.unoptimized_attachments,g.segments[1].value=c.optimized_attachments,g.segments[2].value=c.errors_attachments,g.update())}),a("#imagify-simulate-bulk-action").on("click",function(b){b.preventDefault(),a("#imagify-bulk-action").trigger("click")}),a("#imagify-bulk-action").on("click",function(b){var d,g=a(this),h=a('[name="optimization_level"]:checked').val();b.preventDefault(),void 0===h&&(h=-1),g.attr("disabled")||(g.attr("disabled","disabled"),g.find(".dashicons").addClass("rotate"),d=function(){return imagifyBulk.labels.processing},a(c).on("beforeunload",d),swal({title:imagifyBulk.labels.waitTitle,html:imagifyBulk.labels.waitText,showConfirmButton:!1,imageUrl:imagifyBulk.labels.waitImageUrl}),a.get(ajaxurl+imagify.concat+"action="+imagifyBulk.ajax_action+"&optimization_level="+h+"&imagifybulkuploadnonce="+a("#imagifybulkuploadnonce").val()).done(function(b){var h,i,j="",k="",l=0,m=0,n=0,o=0;if(!b.success)return g.removeAttr("disabled"),g.find(".dashicons").removeClass("rotate"),a(c).off("beforeunload",d),"invalid-api-key"===b.data.message&&(j=imagifyBulk.labels.invalidAPIKeyTitle),"over-quota"===b.data.message&&(j=imagifyBulk.labels.overQuotaTitle,imagifyBulk.labels.overQuotaText),"no-images"===b.data.message&&(j=imagifyBulk.labels.noAttachmentToOptimizeTitle,k=imagifyBulk.labels.noAttachmentToOptimizeText),void swal({title:j,html:k,type:"info",customClass:"imagify-sweet-alert"});swal.close(),a(".imagify-row-progress").slideDown(),a(".imagify-no-uploaded-yet, .imagify-row-complete").hide(200),i=a(".imagify-bulk-table table tbody"),h=new ImagifyGulp({lib:ajaxurl+imagify.concat+"action=imagify_bulk_upload&imagifybulkuploadnonce="+a("#imagifybulkuploadnonce").val(),images:b.data,context:imagifyBulk.ajax_context}),h.before(function(a){i.find(".imagify-row-progress").after('<tr id="attachment-'+a.id+'"><td class="imagify-cell-filename"><span class="imagiuploaded"><img src="'+a.thumbnail+'" alt=""/></span><span class="imagifilename">'+a.filename+'</span></td><td class="imagify-cell-status"><span class="imagistatus status-compressing"><span class="dashicons dashicons-admin-generic rotate"></span>'+imagifyBulk.labels.optimizing+'<span></span></span></td><td class="imagify-cell-original"></td><td class="imagify-cell-optimized"></td><td class="imagify-cell-percentage"></td><td class="imagify-cell-thumbnails"></td><td class="imagify-cell-savings"></td></tr>')}).each(function(b){var c=a("#imagify-progress-bar"),d="error",f="dismiss",g=imagifyBulk.labels.error;if(c.css({width:b.progress+"%"}),c.find(".percent").html(b.progress+"%"),b.success)return a("#attachment-"+b.image+" .imagify-cell-status").html('<span class="imagistatus status-complete"><span class="dashicons dashicons-yes"></span>'+imagifyBulk.labels.complete+"</span>"),a("#attachment-"+b.image+" .imagify-cell-original").html(b.original_size_human),a("#attachment-"+b.image+" .imagify-cell-optimized").html(b.new_size_human),a("#attachment-"+b.image+" .imagify-cell-percentage").html('<span class="imagify-chart"><span class="imagify-chart-container"><canvas height="18" width="18" id="imagify-consumption-chart" style="width: 18px; height: 18px;"></canvas></span></span><span class="imagipercent">'+b.percent+"</span>%"),e(a("#attachment-"+b.image+" .imagify-cell-percentage").find("canvas")),a("#attachment-"+b.image+" .imagify-cell-thumbnails").html(b.thumbnails),a("#attachment-"+b.image+" .imagify-cell-savings").html(h.humanSize(b.overall_saving,1)),l=l+b.thumbnails+1,a(".imagify-cell-nb-files").html(imagifyBulk.labels.nbrFiles.replace("%s",l)),n+=b.original_overall_size,a(".imagify-total-original").html(h.humanSize(n,1)),o+=b.overall_saving,void a(".imagify-total-gain").html(h.humanSize(o,1));b.error.indexOf("You've consumed all your data")>=0&&swal({title:imagifyBulk.labels.overQuotaTitle,html:imagifyBulk.labels.overQuotaText,type:"error",customClass:"imagify-sweet-alert"}).then(function(){location.reload()}),b.error.indexOf("This image is already compressed")>=0?(d="warning",f="warning",g=imagifyBulk.labels.notice):(m++,a(".imagify-cell-errors").html(imagifyBulk.labels.nbrErrors.replace("%s",m))),a("#attachment-"+b.image).after('<tr><td colspan="7"><span class="status-'+d+'">'+b.error+"</span></td></tr>"),a("#attachment-"+b.image+" .imagify-cell-status").html('<span class="imagistatus status-'+d+'"><span class="dashicons dashicons-'+f+'"></span>'+g+"</span>")}).done(function(b){var e;g.removeAttr("disabled").find(".dashicons").removeClass("rotate"),a(c).off("beforeunload",d),a(".imagify-row-progress").slideUp(),"NaN"!==b.global_percent&&(a(".imagify-row-complete").removeClass("hidden").addClass("done").attr("aria-hidden","false"),a("html, body").animate({scrollTop:a(".imagify-row-complete").offset().top},200),a(".imagify-ac-rt-total-gain").html(b.global_gain_human),a(".imagify-ac-rt-total-original").html(b.global_original_size_human),e=imagifyBulk.labels.textToShare,e=e.replace("%1$s",b.global_gain_human),e=e.replace("%2$s",b.global_original_size_human),e=encodeURIComponent(e),a(".imagify-sn-twitter").attr("href","https://twitter.com/intent/tweet?source=webclient&original_referer="+imagifyBulk.labels.pluginURL+"&text="+e+"&url="+imagifyBulk.labels.pluginURL+"&related=imagify&hastags=performance,web,wordpress"),a(".imagify-ac-chart").attr("data-percent",b.global_percent),f(a(".imagify-ac-chart").find("canvas")))}).error(function(a){imagify.log("Can't optimize image with id "+a+".")}).run()}).fail(function(){swal({title:imagifyBulk.labels.getUnoptimizedImagesErrorTitle,html:imagifyBulk.labels.getUnoptimizedImagesErrorText,type:"error",customClass:"imagify-sweet-alert"}).then(function(){location.reload()})}))})}(jQuery,document,window),function(a,b,c,d){var e,f;c.innerWidth?(e=(c.innerWidth-700)/2,f=(c.innerHeight-290)/2):(e=(b.body.clientWidth-700)/2,f=(b.body.clientHeight-290)/2),[].forEach.call(b.querySelectorAll(".imagify-share-networks a"),function(a){a.addEventListener("click",function(a){c.open(this.href,"","status=no, scrollbars=no, menubar=no, top="+f+", left="+e+", width=700, height=290"),a.preventDefault()},!1)})}(jQuery,document,window);
|
assets/js/imagify.js
CHANGED
@@ -2,7 +2,7 @@
|
|
2 |
* imagify-gulpjs - version 0.0.1 - 2016-04-07
|
3 |
* WP Media <contact@wp-media.me>
|
4 |
*
|
5 |
-
* Note: when updating this file, don't forget to replace `this.buffer_size = 1;` by `this.buffer_size = imagifyBulk.buffer_size;`.
|
6 |
*/
|
7 |
(function () {
|
8 |
'use strict';
|
@@ -94,13 +94,13 @@ window.ImagifyGulp = function () {
|
|
94 |
key: 'humanSize',
|
95 |
value: function humanSize( bytes ) {
|
96 |
if ( 0 === bytes ) {
|
97 |
-
return '
|
98 |
}
|
99 |
|
100 |
-
var sizes = [ '
|
101 |
i = parseInt( Math.floor( Math.log( bytes ) / Math.log( 1024 ) ) );
|
102 |
|
103 |
-
return ( bytes / Math.pow( 1024, i ) ).toFixed( 2 ) + sizes[ i ];
|
104 |
}
|
105 |
}, {
|
106 |
key: 'run',
|
2 |
* imagify-gulpjs - version 0.0.1 - 2016-04-07
|
3 |
* WP Media <contact@wp-media.me>
|
4 |
*
|
5 |
+
* Note: when updating this file, don't forget to replace `this.buffer_size = 1;` by `this.buffer_size = imagifyBulk.buffer_size;`. Also, humanSize() has been edited to use a correct format.
|
6 |
*/
|
7 |
(function () {
|
8 |
'use strict';
|
94 |
key: 'humanSize',
|
95 |
value: function humanSize( bytes ) {
|
96 |
if ( 0 === bytes ) {
|
97 |
+
return '0\u00A0kB';
|
98 |
}
|
99 |
|
100 |
+
var sizes = [ 'B', 'kB', 'MB' ],
|
101 |
i = parseInt( Math.floor( Math.log( bytes ) / Math.log( 1024 ) ) );
|
102 |
|
103 |
+
return ( bytes / Math.pow( 1024, i ) ).toFixed( 2 ) + '\u00A0' + sizes[ i ];
|
104 |
}
|
105 |
}, {
|
106 |
key: 'run',
|
assets/js/imagify.min.js
CHANGED
@@ -1 +1 @@
|
|
1 |
-
!function(){"use strict";function a(a,b){if(!(a instanceof b))throw new TypeError("Cannot call a class as a function")}var b=function(){function a(a,b){for(var c=0;c<b.length;c++){var d=b[c];d.enumerable=d.enumerable||!1,d.configurable=!0,"value"in d&&(d.writable=!0),Object.defineProperty(a,d.key,d)}}return function(b,c,d){return c&&a(b.prototype,c),d&&a(b,d),b}}();window.ImagifyGulp=function(){function c(b){a(this,c),this.buffer_size=imagifyBulk.buffer_size,this.lib_url=b.lib,this.default_thumb="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACMAAAAjCAIAAACRuyQOAAACy0lEQVRIx+1XS1PTUBTuT/MB1NGF3bhyhys3Pv+Ai8pCF6Bb3bsWq8xAh8441I2TSlKwPIKQJsI40IbSV0pJ6qe3OeZ1b9PaYViQyaJzc+757j3nO985TVx5v3o+b+IS6XyQUgtrj/NqWtJmZf3lavnpl53bC2vjRLqRUV4pxqbZcnrBx3F6G2ZzTjFg879IMwWtanV7g56K1Z2RtBGRpj7IWb0a8HhqOz9O2rjHfrOD34GvWcPEruGQkhmlcFgnF7bjABVJmvA4uj4vY2VJr545/yClw/okBywaadF/m63j1gT/sNO5DbXW8t4sLtJzSQtnAme/ys/BrU9FpdIgY2R3MBLidtQ+ZRt2T9qZvQrtf/N9X5BwbEQKmSVIFGZjEGlWNojB93KbCBolDNl49nVPAIYwUs5QGAOQwCtmuuyGG5ExGhZbtM7s+5+3BGC5nyazhB8RElSAePRwRaX1u9nScadfVYjtncV1HtKDlW0KQMqvID4kCAydHST2fgKhu24B7dTaSY4oYBf2MjN44yK9+FZmRnrdCnuhr3jyB7Vr89G8L9f7oU77VSPhp4POjNarzUgv77Z/ERh+R9oUXbqDXFyktFtJ5ag74cU9cBsCwy3DNoht5Fcf0pO8ysuTt27IFzKH/Hm/Qopi5ekP99zzgkU8goF7VN21ThfM9BKHylHEPbzoQ8wUlSGoG1QVnR3Vhppj66hCtgg/Ayr3tdLXCFQ7al4ABr2gAEBHoCbQFDu+RkCvqPVBx5LCZvq2dEDsgELuDqV7rM/SfvmocfNjkYcEdV8Kdcu4Wh6QLzzoPQKtQ9DQvQL9ZYhOiCYteXougo/9UEIv9YHxKK+iZ9qenouE8QIunCMMMzxHYIIomU2ksBOaI5ZHmCO8OavEnI0K2hjmvTnevPe3bjBlTvKvMsoMi4kVAgO/qBXMGvidGu8Me/lf4yIg/QYbLcmjDg4bKwAAAABJRU5ErkJggg==",this.images=b.images,this.images_ids=Object.keys(b.images),this.total_images=this.images_ids.length,this.processed_images=0,this.inprocess_images=0,this._before=function(){},this._each=function(){},this._done=function(){},this._error=function(){},this.total_original_size=0,this.total_optimized_size=0,this.total_gain=0,this.total_percent=0,this.global_original_size=0,this.global_optimized_size=0,this.global_gain=0,this.global_percent=0,this.context=b.context||"wp"}return b(c,[{key:"before",value:function(a){return this._before=a,this}},{key:"each",value:function(a){return this._each=a,this}},{key:"done",value:function(a){return this._done=a,this}},{key:"error",value:function(a){return this._error=a,this}},{key:"humanSize",value:function(a){if(0===a)return"
|
1 |
+
!function(){"use strict";function a(a,b){if(!(a instanceof b))throw new TypeError("Cannot call a class as a function")}var b=function(){function a(a,b){for(var c=0;c<b.length;c++){var d=b[c];d.enumerable=d.enumerable||!1,d.configurable=!0,"value"in d&&(d.writable=!0),Object.defineProperty(a,d.key,d)}}return function(b,c,d){return c&&a(b.prototype,c),d&&a(b,d),b}}();window.ImagifyGulp=function(){function c(b){a(this,c),this.buffer_size=imagifyBulk.buffer_size,this.lib_url=b.lib,this.default_thumb="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACMAAAAjCAIAAACRuyQOAAACy0lEQVRIx+1XS1PTUBTuT/MB1NGF3bhyhys3Pv+Ai8pCF6Bb3bsWq8xAh8441I2TSlKwPIKQJsI40IbSV0pJ6qe3OeZ1b9PaYViQyaJzc+757j3nO985TVx5v3o+b+IS6XyQUgtrj/NqWtJmZf3lavnpl53bC2vjRLqRUV4pxqbZcnrBx3F6G2ZzTjFg879IMwWtanV7g56K1Z2RtBGRpj7IWb0a8HhqOz9O2rjHfrOD34GvWcPEruGQkhmlcFgnF7bjABVJmvA4uj4vY2VJr545/yClw/okBywaadF/m63j1gT/sNO5DbXW8t4sLtJzSQtnAme/ys/BrU9FpdIgY2R3MBLidtQ+ZRt2T9qZvQrtf/N9X5BwbEQKmSVIFGZjEGlWNojB93KbCBolDNl49nVPAIYwUs5QGAOQwCtmuuyGG5ExGhZbtM7s+5+3BGC5nyazhB8RElSAePRwRaX1u9nScadfVYjtncV1HtKDlW0KQMqvID4kCAydHST2fgKhu24B7dTaSY4oYBf2MjN44yK9+FZmRnrdCnuhr3jyB7Vr89G8L9f7oU77VSPhp4POjNarzUgv77Z/ERh+R9oUXbqDXFyktFtJ5ag74cU9cBsCwy3DNoht5Fcf0pO8ysuTt27IFzKH/Hm/Qopi5ekP99zzgkU8goF7VN21ThfM9BKHylHEPbzoQ8wUlSGoG1QVnR3Vhppj66hCtgg/Ayr3tdLXCFQ7al4ABr2gAEBHoCbQFDu+RkCvqPVBx5LCZvq2dEDsgELuDqV7rM/SfvmocfNjkYcEdV8Kdcu4Wh6QLzzoPQKtQ9DQvQL9ZYhOiCYteXougo/9UEIv9YHxKK+iZ9qenouE8QIunCMMMzxHYIIomU2ksBOaI5ZHmCO8OavEnI0K2hjmvTnevPe3bjBlTvKvMsoMi4kVAgO/qBXMGvidGu8Me/lf4yIg/QYbLcmjDg4bKwAAAABJRU5ErkJggg==",this.images=b.images,this.images_ids=Object.keys(b.images),this.total_images=this.images_ids.length,this.processed_images=0,this.inprocess_images=0,this._before=function(){},this._each=function(){},this._done=function(){},this._error=function(){},this.total_original_size=0,this.total_optimized_size=0,this.total_gain=0,this.total_percent=0,this.global_original_size=0,this.global_optimized_size=0,this.global_gain=0,this.global_percent=0,this.context=b.context||"wp"}return b(c,[{key:"before",value:function(a){return this._before=a,this}},{key:"each",value:function(a){return this._each=a,this}},{key:"done",value:function(a){return this._done=a,this}},{key:"error",value:function(a){return this._error=a,this}},{key:"humanSize",value:function(a){if(0===a)return"0 kB";var b=["B","kB","MB"],c=parseInt(Math.floor(Math.log(a)/Math.log(1024)));return(a/Math.pow(1024,c)).toFixed(2)+" "+b[c]}},{key:"run",value:function(){for(var a=this.images_ids.length>this.buffer_size?this.buffer_size:this.images_ids.length,b=0;b<a;b++){var c=this.images_ids.shift();this.process(c)}return this}},{key:"process",value:function(a){this.inprocess_images++;var b={id:a,image_id:parseInt(a.toString().substr(1),10),image_src:this.images[a],filename:this.images[a].split("/").pop(),thumbnail:this.default_thumb,error:""};this.createThumb(b)}},{key:"createThumb",value:function(a){var b=this,c=new Image;c.onerror=function(){var c=a;c.id=a.image_id,b._before(c),b.send(a)},c.onload=function(){var d=c.width,e=c.height,f=1,g=0,h=0,i=null,j=null;d<e?(f=33/d,h=33,g=e*f):(f=33/e,g=33,h=d*f),i=document.createElement("canvas"),i.width=h,i.height=g,c.width=h,c.height=g,j=i.getContext("2d"),j.drawImage(this,0,0,h,g);try{a.thumbnail=i.toDataURL("image/jpeg")}catch(c){a.thumbnail=b.default_thumb}var k=a;k.id=a.image_id,b._before(k),b.send(a),i=null},c.src=a.image_src}},{key:"send",value:function(a){var b=this,c=new XMLHttpRequest,d=!1,e={},f={filename:a.filename,image:a.image_id,error:""};c.onreadystatechange=function(){if(4===this.readyState){b.processed_images++;try{e=JSON.parse(this.responseText),d=!1}catch(a){f.success=!1,f.error="Unknown error occured",d=!0}if(f.progress=Math.floor(b.processed_images/b.total_images*100),!d){var a=e.data;f.success=e.success,!0===e.success?(b.total_original_size+=a.original_size,b.total_optimized_size+=a.new_size,b.total_gain+=a.original_size-a.new_size,b.total_percent=(b.total_optimized_size/b.total_original_size*100).toFixed(2),b.global_original_size+=a.original_overall_size,b.global_optimized_size+=a.new_overall_size,b.global_gain+=a.overall_saving,b.global_percent=(100-b.global_optimized_size/b.global_optimized_size*100).toFixed(2),f.original_size=a.original_size,f.original_size_human=b.humanSize(a.original_size),f.new_size=a.new_size,f.new_size_human=b.humanSize(a.new_size),f.percent=a.percent,f.thumbnails=a.thumbnails,f.overall_saving=a.overall_saving,f.overall_saving_human=b.humanSize(a.overall_saving),f.original_overall_size=a.original_overall_size,f.original_overall_size_human=b.humanSize(a.original_overall_size)):f.error=a.error}if(b._each(f),b.inprocess_images<b.total_images&&b.process(b.images_ids.shift()),b.processed_images===b.total_images){var c=0;0!==b.global_original_size&&(c=(100-b.global_optimized_size/b.global_original_size*100).toFixed(2)),b._done({global_original_size_human:b.humanSize(b.global_original_size),global_gain_human:b.humanSize(b.global_gain),global_percent:c})}}},c.open("POST",this.lib_url,!0),c.setRequestHeader("Content-Type","application/x-www-form-urlencoded"),c.send("image="+a.image_id+"&context="+this.context)}}]),c}()}();
|
assets/js/options.js
CHANGED
@@ -98,9 +98,26 @@ window.imagify = window.imagify || {
|
|
98 |
* Imagify Backup alert.
|
99 |
*/
|
100 |
$( '.imagify-settings-section' ).find( '#backup' ).on( 'change', function() {
|
101 |
-
var $_this
|
|
|
|
|
|
|
|
|
|
|
102 |
|
103 |
if ( $_this.is( ':checked' ) ) {
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
104 |
return;
|
105 |
}
|
106 |
|
@@ -113,11 +130,81 @@ window.imagify = window.imagify || {
|
|
113 |
cancelButtonText: imagifyAdmin.labels.swalCancel,
|
114 |
reverseButtons: true
|
115 |
} ).then(
|
116 |
-
function() {},
|
117 |
function() {
|
|
|
|
|
|
|
|
|
|
|
118 |
$_this.prop( 'checked', true );
|
119 |
}
|
120 |
);
|
121 |
} );
|
122 |
|
123 |
} )(jQuery, document, window);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
98 |
* Imagify Backup alert.
|
99 |
*/
|
100 |
$( '.imagify-settings-section' ).find( '#backup' ).on( 'change', function() {
|
101 |
+
var $_this = $( this ),
|
102 |
+
$backupMessage = $_this.siblings( '#backup-dir-is-writable' ),
|
103 |
+
params = {
|
104 |
+
'action': 'imagify_check_backup_dir_is_writable',
|
105 |
+
'_wpnonce': $backupMessage.data( 'nonce' )
|
106 |
+
};
|
107 |
|
108 |
if ( $_this.is( ':checked' ) ) {
|
109 |
+
$.getJSON( ajaxurl, params )
|
110 |
+
.done( function( r ) {
|
111 |
+
if ( $.isPlainObject( r ) && r.success ) {
|
112 |
+
if ( r.data.is_writable ) {
|
113 |
+
// Hide the error message.
|
114 |
+
$backupMessage.addClass( 'hidden' );
|
115 |
+
} else {
|
116 |
+
// Show the error message.
|
117 |
+
$backupMessage.removeClass( 'hidden' );
|
118 |
+
}
|
119 |
+
}
|
120 |
+
} );
|
121 |
return;
|
122 |
}
|
123 |
|
130 |
cancelButtonText: imagifyAdmin.labels.swalCancel,
|
131 |
reverseButtons: true
|
132 |
} ).then(
|
|
|
133 |
function() {
|
134 |
+
// Leave it unchecked, hide the error message.
|
135 |
+
$backupMessage.addClass( 'hidden' );
|
136 |
+
},
|
137 |
+
function() {
|
138 |
+
// Re-check.
|
139 |
$_this.prop( 'checked', true );
|
140 |
}
|
141 |
);
|
142 |
} );
|
143 |
|
144 |
} )(jQuery, document, window);
|
145 |
+
|
146 |
+
|
147 |
+
// "Select all" checkboxes =========================================================================
|
148 |
+
(function( w, d, $, undefined ) {
|
149 |
+
|
150 |
+
var jqPropHookChecked = $.propHooks.checked;
|
151 |
+
|
152 |
+
// Force `.prop()` to trigger a `change` event.
|
153 |
+
$.propHooks.checked = {
|
154 |
+
set: function( elem, value, name ) {
|
155 |
+
var ret;
|
156 |
+
|
157 |
+
if ( undefined === jqPropHookChecked ) {
|
158 |
+
ret = ( elem[ name ] = value );
|
159 |
+
} else {
|
160 |
+
ret = jqPropHookChecked( elem, value, name );
|
161 |
+
}
|
162 |
+
|
163 |
+
$( elem ).trigger( 'change.imagify' );
|
164 |
+
|
165 |
+
return ret;
|
166 |
+
}
|
167 |
+
};
|
168 |
+
|
169 |
+
// Check all checkboxes.
|
170 |
+
$( '.imagify-check-group .imagify-row-check' ).on( 'click', function() {
|
171 |
+
var $group = $( this ).closest( '.imagify-check-group' ),
|
172 |
+
allChecked = 0 === $group.find( '.imagify-row-check' ).filter( ':visible:enabled' ).not( ':checked' ).length;
|
173 |
+
|
174 |
+
// Toggle "check all" checkboxes.
|
175 |
+
$group.find( '.imagify-toggle-check' ).prop( 'checked', allChecked );
|
176 |
+
} )
|
177 |
+
.first().trigger( 'change.imagify' );
|
178 |
+
|
179 |
+
$( '.imagify-check-group .imagify-toggle-check' ).on( 'click.wp-toggle-checkboxes', function( e ) {
|
180 |
+
var $this = $( this ),
|
181 |
+
$wrap = $this.closest( '.imagify-check-group' ),
|
182 |
+
controlChecked = $this.prop( 'checked' ),
|
183 |
+
toggle = e.shiftKey || $this.data( 'wp-toggle' );
|
184 |
+
|
185 |
+
$wrap.find( '.imagify-toggle-check' )
|
186 |
+
.prop( 'checked', function() {
|
187 |
+
var $this = $( this );
|
188 |
+
|
189 |
+
if ( $this.is( ':hidden,:disabled' ) ) {
|
190 |
+
return false;
|
191 |
+
}
|
192 |
+
|
193 |
+
if ( toggle ) {
|
194 |
+
return ! $this.prop( 'checked' );
|
195 |
+
}
|
196 |
+
|
197 |
+
return controlChecked ? true : false;
|
198 |
+
} );
|
199 |
+
|
200 |
+
$wrap.find( '.imagify-row-check' )
|
201 |
+
.prop( 'checked', function() {
|
202 |
+
if ( toggle ) {
|
203 |
+
return false;
|
204 |
+
}
|
205 |
+
|
206 |
+
return controlChecked ? true : false;
|
207 |
+
} );
|
208 |
+
} );
|
209 |
+
|
210 |
+
} )(window, document, jQuery);
|
assets/js/options.min.js
CHANGED
@@ -1 +1 @@
|
|
1 |
-
window.imagify=window.imagify||{concat:ajaxurl.indexOf("?")>0?"&":"?",log:function(a){void 0!==console&&console.log(a)},info:function(a){void 0!==console&&console.info(a)}},function(a,b,c,d){var e=!1,f=!1;a("#imagify-settings #api_key").on("blur",function(){var b=a(this),c=b.val();return""!==a.trim(c)&&(a("#check_api_key").val()===c?(a("#imagify-check-api-container").html('<span class="dashicons dashicons-yes"></span> '+imagifyAdmin.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>'+imagifyAdmin.labels.waitApiKeyCheckText+"</span>")),e=!0,void(f=a.get(ajaxurl+imagify.concat+"action=imagify_check_api_key_validity&api_key="+b.val()+"&imagifycheckapikeynonce="+a("#imagifycheckapikeynonce").val()).done(function(b){b.success?(a("#imagify-check-api-container").remove(),swal({title:imagifyAdmin.labels.ApiKeyCheckSuccessTitle,html:imagifyAdmin.labels.ApiKeyCheckSuccessText,type:"success",customClass:"imagify-sweet-alert"}).then(function(){location.reload()})):a("#imagify-check-api-container").html('<span class="dashicons dashicons-no"></span> '+b.data),e=!1}))))}),a(".imagify-options-line").css("cursor","pointer").on("click",function(b){if("INPUT"!==b.target.nodeName)return a('input[aria-describedby="'+a(this).attr("id")+'"]').trigger("click"),!1}),a(".imagify-settings th span").on("click",function(){var b=a(this).parent().next("td").find("input:checkbox");1===b.length&&b.trigger("click")}),a(".imagify-options-line").find("input").on("change focus",function(){var b=a(this).closest(".imagify-options-line").prev("label").prev("input");b[0].checked||b.prop("checked",!0)}),a(".imagify-settings-section").find("#backup").on("change",function(){var b=a(this);b.is(":checked")
|
1 |
+
window.imagify=window.imagify||{concat:ajaxurl.indexOf("?")>0?"&":"?",log:function(a){void 0!==console&&console.log(a)},info:function(a){void 0!==console&&console.info(a)}},function(a,b,c,d){var e=!1,f=!1;a("#imagify-settings #api_key").on("blur",function(){var b=a(this),c=b.val();return""!==a.trim(c)&&(a("#check_api_key").val()===c?(a("#imagify-check-api-container").html('<span class="dashicons dashicons-yes"></span> '+imagifyAdmin.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>'+imagifyAdmin.labels.waitApiKeyCheckText+"</span>")),e=!0,void(f=a.get(ajaxurl+imagify.concat+"action=imagify_check_api_key_validity&api_key="+b.val()+"&imagifycheckapikeynonce="+a("#imagifycheckapikeynonce").val()).done(function(b){b.success?(a("#imagify-check-api-container").remove(),swal({title:imagifyAdmin.labels.ApiKeyCheckSuccessTitle,html:imagifyAdmin.labels.ApiKeyCheckSuccessText,type:"success",customClass:"imagify-sweet-alert"}).then(function(){location.reload()})):a("#imagify-check-api-container").html('<span class="dashicons dashicons-no"></span> '+b.data),e=!1}))))}),a(".imagify-options-line").css("cursor","pointer").on("click",function(b){if("INPUT"!==b.target.nodeName)return a('input[aria-describedby="'+a(this).attr("id")+'"]').trigger("click"),!1}),a(".imagify-settings th span").on("click",function(){var b=a(this).parent().next("td").find("input:checkbox");1===b.length&&b.trigger("click")}),a(".imagify-options-line").find("input").on("change focus",function(){var b=a(this).closest(".imagify-options-line").prev("label").prev("input");b[0].checked||b.prop("checked",!0)}),a(".imagify-settings-section").find("#backup").on("change",function(){var b=a(this),c=b.siblings("#backup-dir-is-writable"),d={action:"imagify_check_backup_dir_is_writable",_wpnonce:c.data("nonce")};if(b.is(":checked"))return void a.getJSON(ajaxurl,d).done(function(b){a.isPlainObject(b)&&b.success&&(b.data.is_writable?c.addClass("hidden"):c.removeClass("hidden"))});swal({title:imagifyOptions.noBackupTitle,html:imagifyOptions.noBackupText,type:"warning",customClass:"imagify-sweet-alert",showCancelButton:!0,cancelButtonText:imagifyAdmin.labels.swalCancel,reverseButtons:!0}).then(function(){c.addClass("hidden")},function(){b.prop("checked",!0)})})}(jQuery,document,window),function(a,b,c,d){var e=c.propHooks.checked;c.propHooks.checked={set:function(a,b,d){var f;return f=void 0===e?a[d]=b:e(a,b,d),c(a).trigger("change.imagify"),f}},c(".imagify-check-group .imagify-row-check").on("click",function(){var a=c(this).closest(".imagify-check-group"),b=0===a.find(".imagify-row-check").filter(":visible:enabled").not(":checked").length;a.find(".imagify-toggle-check").prop("checked",b)}).first().trigger("change.imagify"),c(".imagify-check-group .imagify-toggle-check").on("click.wp-toggle-checkboxes",function(a){var b=c(this),d=b.closest(".imagify-check-group"),e=b.prop("checked"),f=a.shiftKey||b.data("wp-toggle");d.find(".imagify-toggle-check").prop("checked",function(){var a=c(this);return!a.is(":hidden,:disabled")&&(f?!a.prop("checked"):!!e)}),d.find(".imagify-row-check").prop("checked",function(){return!f&&!!e})})}(window,document,jQuery);
|
assets/js/upload.js
CHANGED
@@ -20,8 +20,12 @@ window.imagify = window.imagify || {
|
|
20 |
*/
|
21 |
var bulk_opt, get_var, check_modal;
|
22 |
|
23 |
-
bulk_opt
|
24 |
-
|
|
|
|
|
|
|
|
|
25 |
|
26 |
$( '.bulkactions select[name="action"]' ).find( 'option:last-child' ).before( bulk_opt );
|
27 |
$( '.bulkactions select[name="action2"]' ).find( 'option:last-child' ).before( bulk_opt );
|
20 |
*/
|
21 |
var bulk_opt, get_var, check_modal;
|
22 |
|
23 |
+
bulk_opt = '<option value="imagify-bulk-upload">' + imagifyUpload.bulkActionsLabels.optimize + '</option>';
|
24 |
+
|
25 |
+
if ( imagifyUpload.backup_option || $( '.attachment-has-backup' ).length ) {
|
26 |
+
// If the backup option is enabled, or if we have items that can be restored.
|
27 |
+
bulk_opt += '<option value="imagify-bulk-restore">' + imagifyUpload.bulkActionsLabels.restore + '</option>';
|
28 |
+
}
|
29 |
|
30 |
$( '.bulkactions select[name="action"]' ).find( 'option:last-child' ).before( bulk_opt );
|
31 |
$( '.bulkactions select[name="action2"]' ).find( 'option:last-child' ).before( bulk_opt );
|
assets/js/upload.min.js
CHANGED
@@ -1 +1 @@
|
|
1 |
-
window.imagify=window.imagify||{concat:ajaxurl.indexOf("?")>0?"&":"?",log:function(a){void 0!==console&&console.log(a)},info:function(a){void 0!==console&&console.info(a)}},function(a,b,c,d){function e(b){b.each(function(){var b=parseInt(a(this).closest(".imagify-chart").next(".imagify-chart-value").text()),c=[{value:b,color:"#00B3D3"},{value:100-b,color:"#D8D8D8"}];new Chart(a(this)[0].getContext("2d")).Doughnut(c,{segmentStrokeColor:"#FFF",segmentStrokeWidth:1,animateRotate:!0,tooltipEvents:[]})})}var f,g,h;f='<option value="imagify-bulk-upload">'+imagifyUpload.bulkActionsLabels.optimize+"</option>",f+='<option value="imagify-bulk-restore">'+imagifyUpload.bulkActionsLabels.restore+"</option>",a('.bulkactions select[name="action"]').find("option:last-child").before(f),a('.bulkactions select[name="action2"]').find("option:last-child").before(f),a("#doaction").add("#doaction2").on("click",function(b){var c,d,e=a(this).prev("select").val().split("-");"imagify"===e[0]&&(b.preventDefault(),c=e[2],d=a('input[name^="media"]:checked').map(function(){return this.value}).get(),d.forEach(function(b,d){setTimeout(function(){a("#imagify-"+c+"-"+b).trigger("click")},300*d)}))}),a(b).on("click",".button-imagify-restore, .button-imagify-manual-upload, .button-imagify-manual-override-upload",function(b){var c=a(this),d=c.parents(".column-imagify_optimized_file, .compat-field-imagify .field"),f=c.attr("href");b.preventDefault(),d.length||(d=c.closest(".column")),d.html('<div class="button"><span class="imagify-spinner"></span>'+c.data("waiting-label")+"</div>"),a.get(f.replace("admin-post.php","admin-ajax.php")).done(function(a){d.html(a.data),d.find(".imagify-datas-more-action a").addClass("is-open").find(".the-text").text(d.find(".imagify-datas-more-action a").data("close")),d.find(".imagify-datas-details").addClass("is-open"),e(d.find(".imagify-chart-container").find("canvas"))})}),a(".imagify-datas-details").hide(),a(b).on("click",".imagify-datas-more-action a",function(b){var c=a(this);b.preventDefault(),c.hasClass("is-open")?(a(c.attr("href")).slideUp(300).removeClass("is-open"),c.removeClass("is-open").find(".the-text").text(c.data("open"))):(a(c.attr("href")).slideDown(300).addClass("is-open"),c.addClass("is-open").find(".the-text").text(c.data("close")))}),g=function(a){var b={};return c.location.href.replace(/[?&]+([^=&]+)=?([^&]*)?/gi,function(a,c,d){b[c]=void 0!==d?d:""}),a?b[a]?b[a]:null:b},h=function(){var b=setInterval(function(){var c=a(".media-modal .imagify-datas-details");c.length&&(c.hide(),e(a("#imagify-consumption-chart")),clearInterval(b),b=null)},20)},a(".upload-php").find(".media-frame.mode-grid").on("click",".attachment",function(){h()}),a(".upload-php").length&&g("item")&&h(),a("#insert-media-button").on("click.imagify",function(){var b=setInterval(function(){var c=a(".media-frame-content .attachments");c.length&&(c.on("click.imagify",".attachment",function(){h()}),clearInterval(b),b=null)},100)}),e(a(".imagify-chart-container").find("canvas"))}(jQuery,document,window);
|
1 |
+
window.imagify=window.imagify||{concat:ajaxurl.indexOf("?")>0?"&":"?",log:function(a){void 0!==console&&console.log(a)},info:function(a){void 0!==console&&console.info(a)}},function(a,b,c,d){function e(b){b.each(function(){var b=parseInt(a(this).closest(".imagify-chart").next(".imagify-chart-value").text()),c=[{value:b,color:"#00B3D3"},{value:100-b,color:"#D8D8D8"}];new Chart(a(this)[0].getContext("2d")).Doughnut(c,{segmentStrokeColor:"#FFF",segmentStrokeWidth:1,animateRotate:!0,tooltipEvents:[]})})}var f,g,h;f='<option value="imagify-bulk-upload">'+imagifyUpload.bulkActionsLabels.optimize+"</option>",(imagifyUpload.backup_option||a(".attachment-has-backup").length)&&(f+='<option value="imagify-bulk-restore">'+imagifyUpload.bulkActionsLabels.restore+"</option>"),a('.bulkactions select[name="action"]').find("option:last-child").before(f),a('.bulkactions select[name="action2"]').find("option:last-child").before(f),a("#doaction").add("#doaction2").on("click",function(b){var c,d,e=a(this).prev("select").val().split("-");"imagify"===e[0]&&(b.preventDefault(),c=e[2],d=a('input[name^="media"]:checked').map(function(){return this.value}).get(),d.forEach(function(b,d){setTimeout(function(){a("#imagify-"+c+"-"+b).trigger("click")},300*d)}))}),a(b).on("click",".button-imagify-restore, .button-imagify-manual-upload, .button-imagify-manual-override-upload",function(b){var c=a(this),d=c.parents(".column-imagify_optimized_file, .compat-field-imagify .field"),f=c.attr("href");b.preventDefault(),d.length||(d=c.closest(".column")),d.html('<div class="button"><span class="imagify-spinner"></span>'+c.data("waiting-label")+"</div>"),a.get(f.replace("admin-post.php","admin-ajax.php")).done(function(a){d.html(a.data),d.find(".imagify-datas-more-action a").addClass("is-open").find(".the-text").text(d.find(".imagify-datas-more-action a").data("close")),d.find(".imagify-datas-details").addClass("is-open"),e(d.find(".imagify-chart-container").find("canvas"))})}),a(".imagify-datas-details").hide(),a(b).on("click",".imagify-datas-more-action a",function(b){var c=a(this);b.preventDefault(),c.hasClass("is-open")?(a(c.attr("href")).slideUp(300).removeClass("is-open"),c.removeClass("is-open").find(".the-text").text(c.data("open"))):(a(c.attr("href")).slideDown(300).addClass("is-open"),c.addClass("is-open").find(".the-text").text(c.data("close")))}),g=function(a){var b={};return c.location.href.replace(/[?&]+([^=&]+)=?([^&]*)?/gi,function(a,c,d){b[c]=void 0!==d?d:""}),a?b[a]?b[a]:null:b},h=function(){var b=setInterval(function(){var c=a(".media-modal .imagify-datas-details");c.length&&(c.hide(),e(a("#imagify-consumption-chart")),clearInterval(b),b=null)},20)},a(".upload-php").find(".media-frame.mode-grid").on("click",".attachment",function(){h()}),a(".upload-php").length&&g("item")&&h(),a("#insert-media-button").on("click.imagify",function(){var b=setInterval(function(){var c=a(".media-frame-content .attachments");c.length&&(c.on("click.imagify",".attachment",function(){h()}),clearInterval(b),b=null)},100)}),e(a(".imagify-chart-container").find("canvas"))}(jQuery,document,window);
|
imagify.php
CHANGED
@@ -3,9 +3,9 @@
|
|
3 |
* Plugin Name: Imagify
|
4 |
* Plugin URI: https://wordpress.org/plugins/imagify/
|
5 |
* Description: Dramaticaly reduce image file sizes without losing quality, make your website load faster, boost your SEO and save money on your bandwidth using Imagify, the new most advanced image optimization tool.
|
6 |
-
* Version: 1.6.
|
7 |
* Author: WP Media
|
8 |
-
* Author URI:
|
9 |
* Licence: GPLv2
|
10 |
*
|
11 |
* Text Domain: imagify
|
@@ -17,7 +17,7 @@
|
|
17 |
defined( 'ABSPATH' ) || die( 'Cheatin\' uh?' );
|
18 |
|
19 |
// Imagify defines.
|
20 |
-
define( 'IMAGIFY_VERSION' , '1.6.
|
21 |
define( 'IMAGIFY_SLUG' , 'imagify' );
|
22 |
define( 'IMAGIFY_SETTINGS_SLUG' , IMAGIFY_SLUG . '_settings' );
|
23 |
define( 'IMAGIFY_WEB_MAIN' , 'https://imagify.io' );
|
@@ -66,6 +66,7 @@ function _imagify_init() {
|
|
66 |
require( IMAGIFY_FUNCTIONS_PATH . 'formatting.php' );
|
67 |
require( IMAGIFY_FUNCTIONS_PATH . 'files.php' );
|
68 |
require( IMAGIFY_FUNCTIONS_PATH . 'admin.php' );
|
|
|
69 |
require( IMAGIFY_FUNCTIONS_PATH . 'api.php' );
|
70 |
require( IMAGIFY_FUNCTIONS_PATH . 'attachments.php' );
|
71 |
require( IMAGIFY_FUNCTIONS_PATH . 'process.php' );
|
3 |
* Plugin Name: Imagify
|
4 |
* Plugin URI: https://wordpress.org/plugins/imagify/
|
5 |
* Description: Dramaticaly reduce image file sizes without losing quality, make your website load faster, boost your SEO and save money on your bandwidth using Imagify, the new most advanced image optimization tool.
|
6 |
+
* Version: 1.6.8
|
7 |
* Author: WP Media
|
8 |
+
* Author URI: https://wp-media.me/
|
9 |
* Licence: GPLv2
|
10 |
*
|
11 |
* Text Domain: imagify
|
17 |
defined( 'ABSPATH' ) || die( 'Cheatin\' uh?' );
|
18 |
|
19 |
// Imagify defines.
|
20 |
+
define( 'IMAGIFY_VERSION' , '1.6.8' );
|
21 |
define( 'IMAGIFY_SLUG' , 'imagify' );
|
22 |
define( 'IMAGIFY_SETTINGS_SLUG' , IMAGIFY_SLUG . '_settings' );
|
23 |
define( 'IMAGIFY_WEB_MAIN' , 'https://imagify.io' );
|
66 |
require( IMAGIFY_FUNCTIONS_PATH . 'formatting.php' );
|
67 |
require( IMAGIFY_FUNCTIONS_PATH . 'files.php' );
|
68 |
require( IMAGIFY_FUNCTIONS_PATH . 'admin.php' );
|
69 |
+
require( IMAGIFY_FUNCTIONS_PATH . 'notices.php' );
|
70 |
require( IMAGIFY_FUNCTIONS_PATH . 'api.php' );
|
71 |
require( IMAGIFY_FUNCTIONS_PATH . 'attachments.php' );
|
72 |
require( IMAGIFY_FUNCTIONS_PATH . 'process.php' );
|
inc/3rd-party/amazon-s3-and-cloudfront/inc/classes/class-imagify-as3cf-attachment.php
CHANGED
@@ -235,6 +235,9 @@ class Imagify_AS3CF_Attachment extends Imagify_Attachment {
|
|
235 |
}
|
236 |
}
|
237 |
|
|
|
|
|
|
|
238 |
if ( ! $data ) {
|
239 |
// The optimization failed.
|
240 |
$metadata = $metadata_changed ? $metadata : false;
|
@@ -309,7 +312,6 @@ class Imagify_AS3CF_Attachment extends Imagify_Attachment {
|
|
309 |
|
310 |
update_post_meta( $this->id, '_imagify_data', $data );
|
311 |
update_post_meta( $this->id, '_imagify_status', 'success' );
|
312 |
-
update_post_meta( $this->id, '_imagify_optimization_level', $optimization_level );
|
313 |
|
314 |
if ( $this->delete_files && $filesize_total ) {
|
315 |
// Add the total file size for all image sizes. This is a meta used by AS3CF.
|
@@ -519,9 +521,9 @@ class Imagify_AS3CF_Attachment extends Imagify_Attachment {
|
|
519 |
return false;
|
520 |
}
|
521 |
|
522 |
-
$
|
523 |
|
524 |
-
if (
|
525 |
return false;
|
526 |
}
|
527 |
|
@@ -542,27 +544,23 @@ class Imagify_AS3CF_Attachment extends Imagify_Attachment {
|
|
542 |
* Maybe backup a file.
|
543 |
*
|
544 |
* @since 1.6.6
|
|
|
545 |
* @author Grégory Viguier
|
546 |
*
|
547 |
* @param string $attachment_path The file path.
|
548 |
* @return bool|null True on success. False on failure. Null if backup is not needed.
|
549 |
*/
|
550 |
protected function maybe_backup( $attachment_path ) {
|
551 |
-
|
552 |
-
|
553 |
-
}
|
554 |
|
555 |
-
$
|
556 |
-
$backup_path = get_imagify_attachment_backup_path( $attachment_path );
|
557 |
-
$backup_path_info = pathinfo( $backup_path );
|
558 |
-
|
559 |
-
wp_mkdir_p( $backup_path_info['dirname'] );
|
560 |
|
561 |
-
|
562 |
-
|
563 |
-
|
564 |
|
565 |
-
return
|
566 |
}
|
567 |
|
568 |
/**
|
@@ -820,6 +818,6 @@ class Imagify_AS3CF_Attachment extends Imagify_Attachment {
|
|
820 |
* @return bool
|
821 |
*/
|
822 |
public function is_mime_type_supported() {
|
823 |
-
return
|
824 |
}
|
825 |
}
|
235 |
}
|
236 |
}
|
237 |
|
238 |
+
// Save the optimization level.
|
239 |
+
update_post_meta( $this->id, '_imagify_optimization_level', $optimization_level );
|
240 |
+
|
241 |
if ( ! $data ) {
|
242 |
// The optimization failed.
|
243 |
$metadata = $metadata_changed ? $metadata : false;
|
312 |
|
313 |
update_post_meta( $this->id, '_imagify_data', $data );
|
314 |
update_post_meta( $this->id, '_imagify_status', 'success' );
|
|
|
315 |
|
316 |
if ( $this->delete_files && $filesize_total ) {
|
317 |
// Add the total file size for all image sizes. This is a meta used by AS3CF.
|
521 |
return false;
|
522 |
}
|
523 |
|
524 |
+
$backuped = imagify_backup_file( $attachment_path );
|
525 |
|
526 |
+
if ( is_wp_error( $backuped ) ) {
|
527 |
return false;
|
528 |
}
|
529 |
|
544 |
* Maybe backup a file.
|
545 |
*
|
546 |
* @since 1.6.6
|
547 |
+
* @since 1.6.8 Deprecated.
|
548 |
* @author Grégory Viguier
|
549 |
*
|
550 |
* @param string $attachment_path The file path.
|
551 |
* @return bool|null True on success. False on failure. Null if backup is not needed.
|
552 |
*/
|
553 |
protected function maybe_backup( $attachment_path ) {
|
554 |
+
$class_name = get_class( $this );
|
555 |
+
_deprecated_function( $class_name . '::' . __FUNCTION__ . '()', '1.6.8', 'imagify_backup_file()' );
|
|
|
556 |
|
557 |
+
$result = imagify_backup_file( $attachment_path );
|
|
|
|
|
|
|
|
|
558 |
|
559 |
+
if ( false === $result ) {
|
560 |
+
return null;
|
561 |
+
}
|
562 |
|
563 |
+
return ! is_wp_error( $result );
|
564 |
}
|
565 |
|
566 |
/**
|
818 |
* @return bool
|
819 |
*/
|
820 |
public function is_mime_type_supported() {
|
821 |
+
return imagify_is_attachment_mime_type_supported( $this->id );
|
822 |
}
|
823 |
}
|
inc/3rd-party/amazon-s3-and-cloudfront/inc/classes/class-imagify-as3cf.php
CHANGED
@@ -127,7 +127,7 @@ class Imagify_AS3CF {
|
|
127 |
* @return string The new context.
|
128 |
*/
|
129 |
public function optimize_attachment_context( $context, $attachment_id ) {
|
130 |
-
if ( self::CONTEXT === $context ||
|
131 |
return self::CONTEXT;
|
132 |
}
|
133 |
return $context;
|
@@ -287,7 +287,7 @@ class Imagify_AS3CF {
|
|
287 |
*/
|
288 |
public function store_upload_ids( $metadata, $attachment_id ) {
|
289 |
|
290 |
-
if (
|
291 |
$this->uploads[ $attachment_id ] = 1;
|
292 |
}
|
293 |
|
@@ -311,7 +311,7 @@ class Imagify_AS3CF {
|
|
311 |
$is_new_upload = ! empty( $this->uploads[ $attachment_id ] );
|
312 |
unset( $this->uploads[ $attachment_id ] );
|
313 |
|
314 |
-
if ( ! $metadata || !
|
315 |
return $metadata;
|
316 |
}
|
317 |
|
@@ -369,7 +369,7 @@ class Imagify_AS3CF {
|
|
369 |
die();
|
370 |
}
|
371 |
|
372 |
-
if ( !
|
373 |
die();
|
374 |
}
|
375 |
|
@@ -403,26 +403,17 @@ class Imagify_AS3CF {
|
|
403 |
* Tell if the attachment has a supported mime type.
|
404 |
*
|
405 |
* @since 1.6.6
|
|
|
|
|
406 |
* @author Grégory Viguier
|
407 |
*
|
408 |
* @param int $post_id The attachment ID.
|
409 |
* @return bool
|
410 |
*/
|
411 |
public function is_mime_type_supported( $post_id ) {
|
412 |
-
|
413 |
|
414 |
-
|
415 |
-
|
416 |
-
if ( isset( $is[ $post_id ] ) ) {
|
417 |
-
return $is[ $post_id ];
|
418 |
-
}
|
419 |
-
|
420 |
-
$mime_types = get_imagify_mime_type();
|
421 |
-
$mime_types = array_flip( $mime_types );
|
422 |
-
$mime_type = get_post_mime_type( $post_id );
|
423 |
-
$is[ $post_id ] = isset( $mime_types[ $mime_type ] );
|
424 |
-
|
425 |
-
return $is[ $post_id ];
|
426 |
}
|
427 |
}
|
428 |
|
127 |
* @return string The new context.
|
128 |
*/
|
129 |
public function optimize_attachment_context( $context, $attachment_id ) {
|
130 |
+
if ( self::CONTEXT === $context || imagify_is_attachment_mime_type_supported( $attachment_id ) ) {
|
131 |
return self::CONTEXT;
|
132 |
}
|
133 |
return $context;
|
287 |
*/
|
288 |
public function store_upload_ids( $metadata, $attachment_id ) {
|
289 |
|
290 |
+
if ( imagify_is_attachment_mime_type_supported( $attachment_id ) ) {
|
291 |
$this->uploads[ $attachment_id ] = 1;
|
292 |
}
|
293 |
|
311 |
$is_new_upload = ! empty( $this->uploads[ $attachment_id ] );
|
312 |
unset( $this->uploads[ $attachment_id ] );
|
313 |
|
314 |
+
if ( ! $metadata || ! imagify_is_attachment_mime_type_supported( $attachment_id ) ) {
|
315 |
return $metadata;
|
316 |
}
|
317 |
|
369 |
die();
|
370 |
}
|
371 |
|
372 |
+
if ( ! imagify_is_attachment_mime_type_supported( $attachment_id ) ) {
|
373 |
die();
|
374 |
}
|
375 |
|
403 |
* Tell if the attachment has a supported mime type.
|
404 |
*
|
405 |
* @since 1.6.6
|
406 |
+
* @since 1.6.8 Deprecated.
|
407 |
+
* @see imagify_is_attachment_mime_type_supported()
|
408 |
* @author Grégory Viguier
|
409 |
*
|
410 |
* @param int $post_id The attachment ID.
|
411 |
* @return bool
|
412 |
*/
|
413 |
public function is_mime_type_supported( $post_id ) {
|
414 |
+
_deprecated_function( 'Imagify_AS3CF::is_mime_type_supported()', '1.6.8', 'imagify_is_attachment_mime_type_supported()' );
|
415 |
|
416 |
+
return imagify_is_attachment_mime_type_supported( $post_id );
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
417 |
}
|
418 |
}
|
419 |
|
inc/3rd-party/nextgen-gallery/inc/admin/ajax.php
CHANGED
@@ -78,7 +78,7 @@ function _do_wp_ajax_imagify_ngg_get_unoptimized_attachment_ids() {
|
|
78 |
$attachment_error = trim( $attachment_error );
|
79 |
$attachment_status = $image['status'];
|
80 |
$attachment_optimization_level = $image['optimization_level'];
|
81 |
-
$attachment_backup_path =
|
82 |
|
83 |
// Don't try to re-optimize if the optimization level is still the same.
|
84 |
if ( $optimization_level === $attachment_optimization_level && is_string( $attachment_error ) ) {
|
78 |
$attachment_error = trim( $attachment_error );
|
79 |
$attachment_status = $image['status'];
|
80 |
$attachment_optimization_level = $image['optimization_level'];
|
81 |
+
$attachment_backup_path = get_imagify_ngg_attachment_backup_path( $file_path );
|
82 |
|
83 |
// Don't try to re-optimize if the optimization level is still the same.
|
84 |
if ( $optimization_level === $attachment_optimization_level && is_string( $attachment_error ) ) {
|
inc/3rd-party/nextgen-gallery/inc/classes/class-imagify-ngg-attachment.php
CHANGED
@@ -75,7 +75,8 @@ class Imagify_NGG_Attachment extends Imagify_Attachment {
|
|
75 |
* @return string|bool The path. False on failure.
|
76 |
*/
|
77 |
public function get_backup_path() {
|
78 |
-
$
|
|
|
79 |
|
80 |
if ( file_exists( $backup_path ) ) {
|
81 |
return $backup_path;
|
@@ -84,6 +85,18 @@ class Imagify_NGG_Attachment extends Imagify_Attachment {
|
|
84 |
return false;
|
85 |
}
|
86 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
87 |
/**
|
88 |
* Get the attachment optimization data.
|
89 |
*
|
@@ -272,6 +285,11 @@ class Imagify_NGG_Attachment extends Imagify_Attachment {
|
|
272 |
* @return array $data The optimization data.
|
273 |
*/
|
274 |
public function optimize( $optimization_level = null, $metadata = array() ) {
|
|
|
|
|
|
|
|
|
|
|
275 |
$optimization_level = is_null( $optimization_level ) ? (int) get_imagify_option( 'optimization_level', 1 ) : (int) $optimization_level;
|
276 |
|
277 |
// To avoid issue with "original_size" at 0 in "_imagify_data".
|
@@ -279,16 +297,16 @@ class Imagify_NGG_Attachment extends Imagify_Attachment {
|
|
279 |
$this->delete_imagify_data();
|
280 |
}
|
281 |
|
|
|
|
|
|
|
|
|
|
|
282 |
// Get file path & URL for original image.
|
283 |
$attachment_path = $this->get_original_path();
|
284 |
$attachment_url = $this->get_original_url();
|
285 |
$attachment_original_size = $this->get_original_size( false );
|
286 |
|
287 |
-
// Check if the full size is already optimized.
|
288 |
-
if ( $this->is_optimized() && ( $this->get_optimization_level() === $optimization_level ) ) {
|
289 |
-
return;
|
290 |
-
}
|
291 |
-
|
292 |
/**
|
293 |
* Fires before optimizing an attachment.
|
294 |
*
|
@@ -310,18 +328,10 @@ class Imagify_NGG_Attachment extends Imagify_Attachment {
|
|
310 |
$resized_attachment_path = $this->resize( $attachment_path, $attachment_size, $resize_width );
|
311 |
|
312 |
if ( ! is_wp_error( $resized_attachment_path ) ) {
|
313 |
-
|
|
|
314 |
|
315 |
-
|
316 |
-
$backup_path = get_imagify_attachment_backup_path( $attachment_path );
|
317 |
-
$backup_path_info = pathinfo( $backup_path );
|
318 |
-
|
319 |
-
wp_mkdir_p( $backup_path_info['dirname'] );
|
320 |
-
|
321 |
-
// TO DO - check and send a error message if the backup can't be created.
|
322 |
-
$filesystem->copy( $attachment_path, $backup_path, true );
|
323 |
-
imagify_chmod_file( $backup_path );
|
324 |
-
}
|
325 |
|
326 |
$filesystem->move( $resized_attachment_path, $attachment_path, true );
|
327 |
imagify_chmod_file( $attachment_path );
|
@@ -345,17 +355,17 @@ class Imagify_NGG_Attachment extends Imagify_Attachment {
|
|
345 |
|
346 |
$data = $this->fill_data( null, $response, $attachment_url );
|
347 |
|
348 |
-
if ( ! $data ) {
|
349 |
-
delete_transient( 'imagify-ngg-async-in-progress-' . $this->id );
|
350 |
-
return;
|
351 |
-
}
|
352 |
-
|
353 |
// Save the optimization level.
|
354 |
imagify_ngg_db()->update( $this->id, array(
|
355 |
'pid' => $this->id,
|
356 |
'optimization_level' => $optimization_level,
|
357 |
) );
|
358 |
|
|
|
|
|
|
|
|
|
|
|
359 |
// If we resized the original with success, we have to update the attachment metadata.
|
360 |
// If not, WordPress keeps the old attachment size.
|
361 |
if ( $do_resize && $resized ) {
|
@@ -482,14 +492,16 @@ class Imagify_NGG_Attachment extends Imagify_Attachment {
|
|
482 |
* @return void
|
483 |
*/
|
484 |
public function restore() {
|
|
|
|
|
|
|
|
|
|
|
485 |
// Stop the process if there is no backup file to restore.
|
486 |
if ( ! $this->has_backup() ) {
|
487 |
return;
|
488 |
}
|
489 |
|
490 |
-
$backup_path = $this->get_backup_path();
|
491 |
-
$attachment_path = $this->get_original_path();
|
492 |
-
|
493 |
/**
|
494 |
* Fires before restoring an attachment.
|
495 |
*
|
75 |
* @return string|bool The path. False on failure.
|
76 |
*/
|
77 |
public function get_backup_path() {
|
78 |
+
$file_path = $this->get_original_path();
|
79 |
+
$backup_path = get_imagify_ngg_attachment_backup_path( $file_path );
|
80 |
|
81 |
if ( file_exists( $backup_path ) ) {
|
82 |
return $backup_path;
|
85 |
return false;
|
86 |
}
|
87 |
|
88 |
+
/**
|
89 |
+
* Get the attachment backup URL.
|
90 |
+
*
|
91 |
+
* @since 1.6.8
|
92 |
+
* @author Grégory Viguier
|
93 |
+
*
|
94 |
+
* @return string|false
|
95 |
+
*/
|
96 |
+
public function get_backup_url() {
|
97 |
+
return site_url( '/' ) . imagify_make_file_path_replative( $this->get_backup_path() );
|
98 |
+
}
|
99 |
+
|
100 |
/**
|
101 |
* Get the attachment optimization data.
|
102 |
*
|
285 |
* @return array $data The optimization data.
|
286 |
*/
|
287 |
public function optimize( $optimization_level = null, $metadata = array() ) {
|
288 |
+
// Check if the attachment extension is allowed.
|
289 |
+
if ( ! imagify_is_attachment_mime_type_supported( $this->id ) ) {
|
290 |
+
return;
|
291 |
+
}
|
292 |
+
|
293 |
$optimization_level = is_null( $optimization_level ) ? (int) get_imagify_option( 'optimization_level', 1 ) : (int) $optimization_level;
|
294 |
|
295 |
// To avoid issue with "original_size" at 0 in "_imagify_data".
|
297 |
$this->delete_imagify_data();
|
298 |
}
|
299 |
|
300 |
+
// Check if the full size is already optimized.
|
301 |
+
if ( $this->is_optimized() && $this->get_optimization_level() === $optimization_level ) {
|
302 |
+
return;
|
303 |
+
}
|
304 |
+
|
305 |
// Get file path & URL for original image.
|
306 |
$attachment_path = $this->get_original_path();
|
307 |
$attachment_url = $this->get_original_url();
|
308 |
$attachment_original_size = $this->get_original_size( false );
|
309 |
|
|
|
|
|
|
|
|
|
|
|
310 |
/**
|
311 |
* Fires before optimizing an attachment.
|
312 |
*
|
328 |
$resized_attachment_path = $this->resize( $attachment_path, $attachment_size, $resize_width );
|
329 |
|
330 |
if ( ! is_wp_error( $resized_attachment_path ) ) {
|
331 |
+
// TODO (@Greg): Send an error message if the backup fails.
|
332 |
+
imagify_backup_file( $attachment_path, $this->get_backup_path() );
|
333 |
|
334 |
+
$filesystem = imagify_get_filesystem();
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
335 |
|
336 |
$filesystem->move( $resized_attachment_path, $attachment_path, true );
|
337 |
imagify_chmod_file( $attachment_path );
|
355 |
|
356 |
$data = $this->fill_data( null, $response, $attachment_url );
|
357 |
|
|
|
|
|
|
|
|
|
|
|
358 |
// Save the optimization level.
|
359 |
imagify_ngg_db()->update( $this->id, array(
|
360 |
'pid' => $this->id,
|
361 |
'optimization_level' => $optimization_level,
|
362 |
) );
|
363 |
|
364 |
+
if ( ! $data ) {
|
365 |
+
delete_transient( 'imagify-ngg-async-in-progress-' . $this->id );
|
366 |
+
return;
|
367 |
+
}
|
368 |
+
|
369 |
// If we resized the original with success, we have to update the attachment metadata.
|
370 |
// If not, WordPress keeps the old attachment size.
|
371 |
if ( $do_resize && $resized ) {
|
492 |
* @return void
|
493 |
*/
|
494 |
public function restore() {
|
495 |
+
// Check if the attachment extension is allowed.
|
496 |
+
if ( ! imagify_is_attachment_mime_type_supported( $this->id ) ) {
|
497 |
+
return;
|
498 |
+
}
|
499 |
+
|
500 |
// Stop the process if there is no backup file to restore.
|
501 |
if ( ! $this->has_backup() ) {
|
502 |
return;
|
503 |
}
|
504 |
|
|
|
|
|
|
|
505 |
/**
|
506 |
* Fires before restoring an attachment.
|
507 |
*
|
inc/3rd-party/nextgen-gallery/inc/functions/attachments.php
ADDED
@@ -0,0 +1,21 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
defined( 'ABSPATH' ) || die( 'Cheatin\' uh?' );
|
3 |
+
|
4 |
+
/**
|
5 |
+
* Get the backup path of a specific attachement.
|
6 |
+
*
|
7 |
+
* @since 1.6.8
|
8 |
+
* @author Grégory Viguier
|
9 |
+
*
|
10 |
+
* @param string $file_path The file path.
|
11 |
+
* @return string|bool The backup path. False on failure.
|
12 |
+
*/
|
13 |
+
function get_imagify_ngg_attachment_backup_path( $file_path ) {
|
14 |
+
$file_path = wp_normalize_path( (string) $file_path );
|
15 |
+
|
16 |
+
if ( ! $file_path ) {
|
17 |
+
return false;
|
18 |
+
}
|
19 |
+
|
20 |
+
return $file_path . '_backup';
|
21 |
+
}
|
inc/3rd-party/nextgen-gallery/nextgen-gallery.php
CHANGED
@@ -17,6 +17,7 @@ require( IMAGIFY_NGG_CLASSES_PATH . 'class-imagify-ngg.php' );
|
|
17 |
require( IMAGIFY_NGG_CLASSES_PATH . 'class-imagify-ngg-db.php' );
|
18 |
require( IMAGIFY_NGG_CLASSES_PATH . 'class-imagify-ngg-attachment.php' );
|
19 |
require( IMAGIFY_NGG_FUNCTIONS_PATH . 'admin-stats.php' );
|
|
|
20 |
require( IMAGIFY_NGG_COMMON_PATH . 'attachments.php' );
|
21 |
|
22 |
imagify_ngg()->init();
|
17 |
require( IMAGIFY_NGG_CLASSES_PATH . 'class-imagify-ngg-db.php' );
|
18 |
require( IMAGIFY_NGG_CLASSES_PATH . 'class-imagify-ngg-attachment.php' );
|
19 |
require( IMAGIFY_NGG_FUNCTIONS_PATH . 'admin-stats.php' );
|
20 |
+
require( IMAGIFY_NGG_FUNCTIONS_PATH . 'attachments.php' );
|
21 |
require( IMAGIFY_NGG_COMMON_PATH . 'attachments.php' );
|
22 |
|
23 |
imagify_ngg()->init();
|
inc/admin/ajax.php
CHANGED
@@ -442,6 +442,26 @@ function _do_wp_ajax_imagify_get_unoptimized_attachment_ids() {
|
|
442 |
wp_send_json_success( $data );
|
443 |
}
|
444 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
445 |
/** --------------------------------------------------------------------------------------------- */
|
446 |
/** IMAGIFY ACCOUNT ============================================================================= */
|
447 |
/** --------------------------------------------------------------------------------------------- */
|
442 |
wp_send_json_success( $data );
|
443 |
}
|
444 |
|
445 |
+
add_action( 'wp_ajax_imagify_check_backup_dir_is_writable', '_do_wp_ajax_imagify_check_backup_dir_is_writable' );
|
446 |
+
/**
|
447 |
+
* Check if the backup directory is writable.
|
448 |
+
* This is used to display an error message in the plugin's settings page.
|
449 |
+
*
|
450 |
+
* @since 1.6.8
|
451 |
+
* @author Grégory Viguier
|
452 |
+
*/
|
453 |
+
function _do_wp_ajax_imagify_check_backup_dir_is_writable() {
|
454 |
+
check_ajax_referer( 'imagify_check_backup_dir_is_writable' );
|
455 |
+
|
456 |
+
if ( ! current_user_can( imagify_get_capacity() ) ) {
|
457 |
+
wp_send_json_error();
|
458 |
+
}
|
459 |
+
|
460 |
+
wp_send_json_success( array(
|
461 |
+
'is_writable' => (int) imagify_backup_dir_is_writable(),
|
462 |
+
) );
|
463 |
+
}
|
464 |
+
|
465 |
/** --------------------------------------------------------------------------------------------- */
|
466 |
/** IMAGIFY ACCOUNT ============================================================================= */
|
467 |
/** --------------------------------------------------------------------------------------------- */
|
inc/admin/enqueue.php
CHANGED
@@ -151,7 +151,14 @@ function _imagify_admin_print_styles() {
|
|
151 |
*/
|
152 |
if ( isset( $current_screen ) && ( 'upload' === $current_screen->base || 'post' === $current_screen->base ) ) {
|
153 |
wp_enqueue_script( 'imagify-js-upload' );
|
154 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
155 |
}
|
156 |
|
157 |
/**
|
151 |
*/
|
152 |
if ( isset( $current_screen ) && ( 'upload' === $current_screen->base || 'post' === $current_screen->base ) ) {
|
153 |
wp_enqueue_script( 'imagify-js-upload' );
|
154 |
+
|
155 |
+
$upload_data = get_imagify_localize_script_translations( 'upload' );
|
156 |
+
|
157 |
+
if ( 'upload' === $current_screen->base && get_imagify_option( 'backup' ) ) {
|
158 |
+
$upload_data['backup_option'] = 1;
|
159 |
+
}
|
160 |
+
|
161 |
+
wp_localize_script( 'imagify-js-upload', 'imagifyUpload', $upload_data );
|
162 |
}
|
163 |
|
164 |
/**
|
inc/admin/media.php
CHANGED
@@ -46,7 +46,7 @@ add_filter( 'media_row_actions', '_imagify_add_actions_to_media_list_row', PHP_I
|
|
46 |
*/
|
47 |
function _imagify_add_actions_to_media_list_row( $actions, $post ) {
|
48 |
// If this attachment is not an image, do nothing.
|
49 |
-
if ( !
|
50 |
return $actions;
|
51 |
}
|
52 |
|
46 |
*/
|
47 |
function _imagify_add_actions_to_media_list_row( $actions, $post ) {
|
48 |
// If this attachment is not an image, do nothing.
|
49 |
+
if ( ! imagify_is_attachment_mime_type_supported( $post->ID ) ) {
|
50 |
return $actions;
|
51 |
}
|
52 |
|
inc/admin/meta-boxes.php
CHANGED
@@ -14,6 +14,10 @@ function _imagify_attachment_submitbox_misc_actions() {
|
|
14 |
return;
|
15 |
}
|
16 |
|
|
|
|
|
|
|
|
|
17 |
$class_name = get_imagify_attachment_class_name( 'wp', $post->ID, 'attachment_submitbox_misc_actions' );
|
18 |
$attachment = new $class_name( $post->ID );
|
19 |
|
14 |
return;
|
15 |
}
|
16 |
|
17 |
+
if ( ! imagify_is_attachment_mime_type_supported( $post->ID ) ) {
|
18 |
+
return;
|
19 |
+
}
|
20 |
+
|
21 |
$class_name = get_imagify_attachment_class_name( 'wp', $post->ID, 'attachment_submitbox_misc_actions' );
|
22 |
$attachment = new $class_name( $post->ID );
|
23 |
|
inc/admin/options.php
CHANGED
@@ -78,7 +78,36 @@ function _imagify_pre_update_option( $value, $old_value ) {
|
|
78 |
return $value;
|
79 |
}
|
80 |
|
81 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
82 |
/**
|
83 |
* Used to launch some actions after saving the network options.
|
84 |
*
|
@@ -93,37 +122,31 @@ function _imagify_after_save_network_options( $option, $value, $old_value ) {
|
|
93 |
_imagify_after_save_options( $old_value, $value );
|
94 |
}
|
95 |
|
96 |
-
|
|
|
|
|
97 |
/**
|
98 |
* Used to launch some actions after saving the options.
|
99 |
*
|
100 |
* @author Jonathan
|
101 |
-
* @since
|
102 |
-
* @since
|
|
|
103 |
*
|
104 |
* @param mixed $old_value The old option value.
|
105 |
* @param mixed $value The new option value.
|
106 |
*/
|
107 |
function _imagify_after_save_options( $old_value, $value ) {
|
108 |
|
109 |
-
if ( $old_value
|
110 |
-
|
111 |
-
imagify_renew_notice( 'wrong-api-key' );
|
112 |
-
delete_site_transient( 'imagify_check_licence_1' );
|
113 |
-
} else {
|
114 |
-
imagify_dismiss_notice( 'wrong-api-key' );
|
115 |
-
}
|
116 |
}
|
117 |
|
118 |
-
|
119 |
-
|
120 |
-
|
121 |
-
|
122 |
-
|
123 |
-
*/
|
124 |
-
if ( isset( $_POST['submit-goto-bulk'] ) ) { // WPCS: CSRF ok.
|
125 |
-
wp_safe_redirect( get_admin_url( get_current_blog_id(), 'upload.php?page=imagify-bulk-optimization' ) );
|
126 |
-
exit;
|
127 |
}
|
128 |
}
|
129 |
|
78 |
return $value;
|
79 |
}
|
80 |
|
81 |
+
if ( imagify_is_active_for_network() ) {
|
82 |
+
add_filter( 'pre_update_site_option_' . IMAGIFY_SETTINGS_SLUG, '_imagify_maybe_set_redirection_before_save_options', 10, 2 );
|
83 |
+
} else {
|
84 |
+
add_filter( 'pre_update_option_' . IMAGIFY_SETTINGS_SLUG, '_imagify_maybe_set_redirection_before_save_options', 10, 2 );
|
85 |
+
}
|
86 |
+
/**
|
87 |
+
* If the user clicked the "Save & Go to Bulk Optimizer" button, set a redirection to the bulk optimizer.
|
88 |
+
* We use this hook because it can be triggered even if the option value hasn't changed.
|
89 |
+
*
|
90 |
+
* @since 1.6.8
|
91 |
+
* @author Grégory Viguier
|
92 |
+
*
|
93 |
+
* @param mixed $value The new, unserialized option value.
|
94 |
+
* @param mixed $old_value The old option value.
|
95 |
+
* @return mixed The option value.
|
96 |
+
*/
|
97 |
+
function _imagify_maybe_set_redirection_before_save_options( $value, $old_value ) {
|
98 |
+
|
99 |
+
if ( ! is_admin() || ! isset( $_POST['submit-goto-bulk'] ) ) { // WPCS: CSRF ok.
|
100 |
+
return $value;
|
101 |
+
}
|
102 |
+
|
103 |
+
$_REQUEST['_wp_http_referer'] = esc_url_raw( get_admin_url( get_current_blog_id(), 'upload.php?page=imagify-bulk-optimization' ) );
|
104 |
+
|
105 |
+
return $value;
|
106 |
+
}
|
107 |
+
|
108 |
+
if ( imagify_is_active_for_network() ) {
|
109 |
+
add_action( 'update_site_option_' . IMAGIFY_SETTINGS_SLUG, '_imagify_after_save_network_options', 10, 3 );
|
110 |
+
}
|
111 |
/**
|
112 |
* Used to launch some actions after saving the network options.
|
113 |
*
|
122 |
_imagify_after_save_options( $old_value, $value );
|
123 |
}
|
124 |
|
125 |
+
if ( ! imagify_is_active_for_network() ) {
|
126 |
+
add_action( 'update_option_' . IMAGIFY_SETTINGS_SLUG, '_imagify_after_save_options', 10, 2 );
|
127 |
+
}
|
128 |
/**
|
129 |
* Used to launch some actions after saving the options.
|
130 |
*
|
131 |
* @author Jonathan
|
132 |
+
* @since 1.0
|
133 |
+
* @since 1.5 Used to redirect user to Bulk Optimizer (if requested).
|
134 |
+
* @since 1.6.8 Not used to redirect user to Bulk Optimizer anymore: see _imagify_maybe_set_redirection_before_save_options().
|
135 |
*
|
136 |
* @param mixed $old_value The old option value.
|
137 |
* @param mixed $value The new option value.
|
138 |
*/
|
139 |
function _imagify_after_save_options( $old_value, $value ) {
|
140 |
|
141 |
+
if ( ! $old_value || ! $value || isset( $old_value['api_key'], $value['api_key'] ) && $old_value['api_key'] === $value['api_key'] ) {
|
142 |
+
return;
|
|
|
|
|
|
|
|
|
|
|
143 |
}
|
144 |
|
145 |
+
if ( is_wp_error( get_imagify_user() ) ) {
|
146 |
+
imagify_renew_notice( 'wrong-api-key' );
|
147 |
+
delete_site_transient( 'imagify_check_licence_1' );
|
148 |
+
} else {
|
149 |
+
imagify_dismiss_notice( 'wrong-api-key' );
|
|
|
|
|
|
|
|
|
150 |
}
|
151 |
}
|
152 |
|
inc/admin/ui/bulk.php
CHANGED
@@ -344,10 +344,16 @@ function _imagify_display_bulk_page() {
|
|
344 |
</thead>
|
345 |
<tfoot>
|
346 |
<tr>
|
347 |
-
<td class="imagify-cell-nb-files"
|
348 |
-
|
349 |
-
|
350 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
351 |
</tr>
|
352 |
</tfoot>
|
353 |
<tbody>
|
344 |
</thead>
|
345 |
<tfoot>
|
346 |
<tr>
|
347 |
+
<td class="imagify-cell-nb-files"> <?php
|
348 |
+
/* translators: %s is a number. Don't use %d. */
|
349 |
+
printf( _n( '%s file', '%s files', 0, 'imagify' ), '<span class="imagify-nb-files">0</span>' );
|
350 |
+
?></td>
|
351 |
+
<td class="imagify-cell-errors"> <?php
|
352 |
+
/* translators: %s is a number. Don't use %d. */
|
353 |
+
printf( _n( '%s error', '%s errors', 0, 'imagify' ), '<span class="imagify-nb-errors">0</span>' );
|
354 |
+
?></td>
|
355 |
+
<td class="imagify-cell-totaloriginal" colspan="4"><?php _e( 'Total:', 'imagify' ); ?><strong> <span class="imagify-total-original">0 kB</span></strong></td>
|
356 |
+
<td class="imagify-cell-totalgain"><?php _e( 'Gain:', 'imagify' ); ?><strong> <span class="imagify-total-gain">0 kB</span></strong></td>
|
357 |
</tr>
|
358 |
</tfoot>
|
359 |
<tbody>
|
inc/admin/ui/notices.php
CHANGED
@@ -9,13 +9,13 @@ add_action( 'all_admin_notices', '_imagify_warning_empty_api_key_notice' );
|
|
9 |
* @author Jonathan Buttigieg
|
10 |
*/
|
11 |
function _imagify_warning_empty_api_key_notice() {
|
12 |
-
$current_screen
|
13 |
|
14 |
if ( ! empty( $current_screen ) && ( 'settings_page_imagify' === $current_screen->base || 'settings_page_imagify-network' === $current_screen->base ) ) {
|
15 |
return;
|
16 |
}
|
17 |
|
18 |
-
if ( imagify_notice_is_dismissed( 'welcome-steps' ) || get_imagify_option( 'api_key'
|
19 |
return;
|
20 |
}
|
21 |
?>
|
@@ -121,7 +121,7 @@ function _imagify_warning_wrong_api_key_notice() {
|
|
121 |
|
122 |
add_action( 'all_admin_notices', '_imagify_warning_plugins_to_deactivate_notice' );
|
123 |
/**
|
124 |
-
* This warning is displayed when some plugins may conflict with Imagify
|
125 |
*
|
126 |
* @since 1.0
|
127 |
* @author Jonathan Buttigieg
|
@@ -314,6 +314,73 @@ function _imagify_warning_over_quota_notice() {
|
|
314 |
<?php
|
315 |
}
|
316 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
317 |
add_action( 'admin_notices', '_imagify_rocket_notice' );
|
318 |
/**
|
319 |
* Add a message about WP Rocket on the "Bulk Optimization" screen.
|
@@ -334,28 +401,11 @@ function _imagify_rocket_notice() {
|
|
334 |
|
335 |
$dismiss_url = get_imagify_admin_url( 'dismiss-notice', 'wp-rocket' );
|
336 |
$coupon_code = 'IMAGIFY20';
|
337 |
-
$wprocket_url =
|
338 |
-
|
339 |
-
switch ( get_locale() ) {
|
340 |
-
case 'fr_FR' :
|
341 |
-
$wprocket_url = 'http://wp-rocket.me/fr/';
|
342 |
-
break;
|
343 |
-
case 'es_ES' :
|
344 |
-
$wprocket_url = 'http://wp-rocket.me/es/';
|
345 |
-
break;
|
346 |
-
case 'it_IT' :
|
347 |
-
$wprocket_url = 'http://wp-rocket.me/it/';
|
348 |
-
break;
|
349 |
-
case 'de_DE' :
|
350 |
-
$wprocket_url = 'http://wp-rocket.me/de/';
|
351 |
-
break;
|
352 |
-
}
|
353 |
-
|
354 |
-
$wprocket_url .= '?utm_source=imagify-coupon&utm_medium=plugin&utm_campaign=imagify';
|
355 |
?>
|
356 |
|
357 |
<div class="updated imagify-rkt-notice">
|
358 |
-
<a href="<?php echo $dismiss_url; ?>" class="imagify-cross"><span class="dashicons dashicons-no"></span></a>
|
359 |
|
360 |
<p class="imagify-rkt-logo">
|
361 |
<img src="<?php echo IMAGIFY_ASSETS_IMG_URL ?>logo-wprocket.png" srcset="<?php echo IMAGIFY_ASSETS_IMG_URL ?>logo-wprocket2x.png 2x" alt="WP Rocket" width="118" height="32">
|
@@ -375,7 +425,7 @@ function _imagify_rocket_notice() {
|
|
375 |
<span class="imagify-rkt-coupon-code"><?php echo $coupon_code; ?></span>
|
376 |
</p>
|
377 |
<p class="imagify-rkt-cta">
|
378 |
-
<a href="<?php echo $wprocket_url; ?>" class="button button-primary tgm-plugin-update-modal"><?php esc_html_e( 'Get WP Rocket now', 'imagify' ); ?></a>
|
379 |
</p>
|
380 |
</div>
|
381 |
|
9 |
* @author Jonathan Buttigieg
|
10 |
*/
|
11 |
function _imagify_warning_empty_api_key_notice() {
|
12 |
+
$current_screen = get_current_screen();
|
13 |
|
14 |
if ( ! empty( $current_screen ) && ( 'settings_page_imagify' === $current_screen->base || 'settings_page_imagify-network' === $current_screen->base ) ) {
|
15 |
return;
|
16 |
}
|
17 |
|
18 |
+
if ( imagify_notice_is_dismissed( 'welcome-steps' ) || get_imagify_option( 'api_key' ) || ! current_user_can( imagify_get_capacity() ) ) {
|
19 |
return;
|
20 |
}
|
21 |
?>
|
121 |
|
122 |
add_action( 'all_admin_notices', '_imagify_warning_plugins_to_deactivate_notice' );
|
123 |
/**
|
124 |
+
* This warning is displayed when some plugins may conflict with Imagify.
|
125 |
*
|
126 |
* @since 1.0
|
127 |
* @author Jonathan Buttigieg
|
314 |
<?php
|
315 |
}
|
316 |
|
317 |
+
add_action( 'all_admin_notices', '_imagify_warning_backup_folder_not_writable_notice' );
|
318 |
+
/**
|
319 |
+
* This warning is displayed if the backup folder is not writable.
|
320 |
+
*
|
321 |
+
* @since 1.6.8
|
322 |
+
* @author Grégory Viguier
|
323 |
+
*/
|
324 |
+
function _imagify_warning_backup_folder_not_writable_notice() {
|
325 |
+
global $post_id;
|
326 |
+
$current_screen = get_current_screen();
|
327 |
+
|
328 |
+
if ( empty( $current_screen ) ) {
|
329 |
+
return;
|
330 |
+
}
|
331 |
+
|
332 |
+
// If the automatic optimization is enabled, we'll display the notice only on some pages.
|
333 |
+
$auto = get_imagify_option( 'auto_optimize' );
|
334 |
+
$bases = array(
|
335 |
+
'settings_page_' . IMAGIFY_SLUG => 1,
|
336 |
+
'settings_page_' . IMAGIFY_SLUG . '-network' => 1,
|
337 |
+
'media_page_' . IMAGIFY_SLUG . '-bulk-optimization' => 1,
|
338 |
+
'media_page_' . IMAGIFY_SLUG . '-ngg-bulk-optimization' => 1,
|
339 |
+
'upload' => 1,
|
340 |
+
'media' => 1,
|
341 |
+
'attachment' => 1,
|
342 |
+
);
|
343 |
+
|
344 |
+
if ( ! $auto && empty( $bases[ $current_screen->id ] ) ) {
|
345 |
+
return;
|
346 |
+
}
|
347 |
+
|
348 |
+
if ( ! $auto && 'attachment' === $current_screen->id && $post_id && ! imagify_is_attachment_mime_type_supported( $post_id ) ) {
|
349 |
+
return;
|
350 |
+
}
|
351 |
+
|
352 |
+
if ( ! get_imagify_option( 'backup' ) || ! current_user_can( imagify_get_capacity( true ) ) ) {
|
353 |
+
return;
|
354 |
+
}
|
355 |
+
|
356 |
+
if ( imagify_backup_dir_is_writable() ) {
|
357 |
+
return;
|
358 |
+
}
|
359 |
+
|
360 |
+
$filesystem = imagify_get_filesystem();
|
361 |
+
|
362 |
+
if ( $filesystem->exists( get_imagify_backup_dir_path() ) ) {
|
363 |
+
/* translators: %s is a file path. */
|
364 |
+
$message = __( 'The backup folder %s is not writable by the server, original images cannot be saved!', 'imagify' );
|
365 |
+
} else {
|
366 |
+
/* translators: %s is a file path. */
|
367 |
+
$message = __( 'The backup folder %s cannot be created. Is its parent directory writable by the server? Original images cannot be saved!', 'imagify' );
|
368 |
+
}
|
369 |
+
|
370 |
+
$backup_path = imagify_make_file_path_replative( get_imagify_backup_dir_path( true ) );
|
371 |
+
?>
|
372 |
+
<div class="clear"></div>
|
373 |
+
<div class="imagify-notice error below-h2">
|
374 |
+
<div class="imagify-notice-logo">
|
375 |
+
<img class="imagify-logo" src="<?php echo IMAGIFY_ASSETS_IMG_URL; ?>imagify-logo.png" width="138" height="16" alt="Imagify" />
|
376 |
+
</div>
|
377 |
+
<div class="imagify-notice-content">
|
378 |
+
<p><?php printf( $message, "<code>$backup_path</code>" ); ?></p>
|
379 |
+
</div>
|
380 |
+
</div>
|
381 |
+
<?php
|
382 |
+
}
|
383 |
+
|
384 |
add_action( 'admin_notices', '_imagify_rocket_notice' );
|
385 |
/**
|
386 |
* Add a message about WP Rocket on the "Bulk Optimization" screen.
|
401 |
|
402 |
$dismiss_url = get_imagify_admin_url( 'dismiss-notice', 'wp-rocket' );
|
403 |
$coupon_code = 'IMAGIFY20';
|
404 |
+
$wprocket_url = imagify_get_wp_rocket_url();
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
405 |
?>
|
406 |
|
407 |
<div class="updated imagify-rkt-notice">
|
408 |
+
<a href="<?php echo esc_url( $dismiss_url ); ?>" class="imagify-cross" target="_blank"><span class="dashicons dashicons-no"></span></a>
|
409 |
|
410 |
<p class="imagify-rkt-logo">
|
411 |
<img src="<?php echo IMAGIFY_ASSETS_IMG_URL ?>logo-wprocket.png" srcset="<?php echo IMAGIFY_ASSETS_IMG_URL ?>logo-wprocket2x.png 2x" alt="WP Rocket" width="118" height="32">
|
425 |
<span class="imagify-rkt-coupon-code"><?php echo $coupon_code; ?></span>
|
426 |
</p>
|
427 |
<p class="imagify-rkt-cta">
|
428 |
+
<a 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>
|
429 |
</p>
|
430 |
</div>
|
431 |
|
inc/admin/ui/options.php
CHANGED
@@ -48,7 +48,7 @@ function _imagify_display_options_page() {
|
|
48 |
</p>
|
49 |
|
50 |
<p>
|
51 |
-
<a class="btn btn-rocket"
|
52 |
</p>
|
53 |
</div>
|
54 |
</li>
|
@@ -194,13 +194,29 @@ function _imagify_display_options_page() {
|
|
194 |
<tr>
|
195 |
<th scope="row"><span><?php _e( 'Backup original images', 'imagify' ); ?></span></th>
|
196 |
<td>
|
197 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
198 |
<label for="backup" onclick=""><span class="screen-reader-text"><?php _e( 'Backup original images', 'imagify' ); ?></span></label>
|
199 |
|
200 |
<span id="describe-backup" class="imagify-info">
|
201 |
<span class="dashicons dashicons-info"></span>
|
202 |
<?php _e( 'Keep your original images in a separate folder before optimization process.', 'imagify' ); ?>
|
203 |
</span>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
204 |
</td>
|
205 |
</tr>
|
206 |
<tr>
|
@@ -270,20 +286,46 @@ function _imagify_display_options_page() {
|
|
270 |
|
271 |
<br>
|
272 |
|
273 |
-
|
274 |
-
|
275 |
-
|
276 |
-
foreach ( $sizes as $size_key => $size_data ) {
|
277 |
-
$label = esc_html( stripslashes( $size_data['name'] ) );
|
278 |
-
$label = sprintf( '%s - %d × %d', $label, $size_data['width'], $size_data['height'] );
|
279 |
-
?>
|
280 |
-
<input type="hidden" name="<?php echo IMAGIFY_SETTINGS_SLUG; ?>[sizes][<?php echo $size_key; ?>-hidden]" value="1" />
|
281 |
-
<input type="checkbox" id="imagify_sizes_<?php echo $size_key; ?>" class="mini" name="<?php echo IMAGIFY_SETTINGS_SLUG; ?>[sizes][<?php echo $size_key; ?>]" value="1" <?php echo ( ! array_key_exists( $size_key, get_imagify_option( 'disallowed-sizes', array() ) ) ) ? 'checked="checked"' : '' ?> />
|
282 |
-
<label for="imagify_sizes_<?php echo $size_key; ?>" onclick=""><?php echo $label; ?></label>
|
283 |
-
<br class="imagify-br">
|
284 |
<?php
|
285 |
-
|
286 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
287 |
</td>
|
288 |
</tr>
|
289 |
|
48 |
</p>
|
49 |
|
50 |
<p>
|
51 |
+
<a class="btn btn-rocket" href="<?php echo esc_url( imagify_get_wp_rocket_url() ); ?>" target="_blank"><?php _e( 'Get WP Rocket now', 'imagify' ); ?></a>
|
52 |
</p>
|
53 |
</div>
|
54 |
</li>
|
194 |
<tr>
|
195 |
<th scope="row"><span><?php _e( 'Backup original images', 'imagify' ); ?></span></th>
|
196 |
<td>
|
197 |
+
<?php
|
198 |
+
$backup_enabled = (int) get_imagify_option( 'backup', 0 );
|
199 |
+
$backup_error_class = ' hidden';
|
200 |
+
|
201 |
+
if ( $backup_enabled && ! imagify_backup_dir_is_writable() ) {
|
202 |
+
$backup_error_class = '';
|
203 |
+
}
|
204 |
+
?>
|
205 |
+
<input type="checkbox" value="1" name="<?php echo IMAGIFY_SETTINGS_SLUG; ?>[backup]" id="backup" <?php checked( $backup_enabled, 1 ); ?> aria-describedby="describe-backup" />
|
206 |
<label for="backup" onclick=""><span class="screen-reader-text"><?php _e( 'Backup original images', 'imagify' ); ?></span></label>
|
207 |
|
208 |
<span id="describe-backup" class="imagify-info">
|
209 |
<span class="dashicons dashicons-info"></span>
|
210 |
<?php _e( 'Keep your original images in a separate folder before optimization process.', 'imagify' ); ?>
|
211 |
</span>
|
212 |
+
|
213 |
+
<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' ) ); ?>">
|
214 |
+
<?php
|
215 |
+
$backup_path = imagify_make_file_path_replative( get_imagify_backup_dir_path( true ) );
|
216 |
+
/* translators: %s is a file path. */
|
217 |
+
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>" );
|
218 |
+
?>
|
219 |
+
</strong>
|
220 |
</td>
|
221 |
</tr>
|
222 |
<tr>
|
286 |
|
287 |
<br>
|
288 |
|
289 |
+
<fieldset class="imagify-check-group">
|
290 |
+
<legend class="screen-reader-text"><?php _e( 'Choose the sizes to optimize', 'imagify' ); ?></legend>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
291 |
<?php
|
292 |
+
$sizes = get_imagify_thumbnail_sizes();
|
293 |
+
$select_all = count( $sizes ) > 3;
|
294 |
+
$disallowed = (array) get_imagify_option( 'disallowed-sizes', array() );
|
295 |
+
|
296 |
+
if ( $select_all ) {
|
297 |
+
$has_disallowed = array_intersect_key( $disallowed, $sizes );
|
298 |
+
$has_disallowed = ! empty( $has_disallowed );
|
299 |
+
?>
|
300 |
+
<em class="hide-if-no-js">
|
301 |
+
<input id="imagify-toggle-check-thumbnail-sizes-1" type="checkbox" class="mini imagify-toggle-check" <?php checked( ! $has_disallowed ); ?>>
|
302 |
+
<label for="imagify-toggle-check-thumbnail-sizes-1" onclick=""><?php _e( '(Un)Select All', 'imagify' ); ?></label>
|
303 |
+
</em>
|
304 |
+
<br class="imagify-br">
|
305 |
+
<?php
|
306 |
+
}
|
307 |
+
|
308 |
+
foreach ( $sizes as $size_key => $size_data ) {
|
309 |
+
$label = esc_html( stripslashes( $size_data['name'] ) );
|
310 |
+
$label = sprintf( '%s - %d × %d', $label, $size_data['width'], $size_data['height'] );
|
311 |
+
$checked = ! isset( $disallowed[ $size_key ] );
|
312 |
+
?>
|
313 |
+
<input type="hidden" name="<?php echo IMAGIFY_SETTINGS_SLUG; ?>[sizes][<?php echo $size_key; ?>-hidden]" value="1" />
|
314 |
+
<input type="checkbox" id="imagify_sizes_<?php echo $size_key; ?>" class="mini imagify-row-check" name="<?php echo IMAGIFY_SETTINGS_SLUG; ?>[sizes][<?php echo $size_key; ?>]" value="1" <?php checked( $checked ); ?>/>
|
315 |
+
<label for="imagify_sizes_<?php echo $size_key; ?>" onclick=""><?php echo $label; ?></label>
|
316 |
+
<br class="imagify-br">
|
317 |
+
<?php
|
318 |
+
}
|
319 |
+
|
320 |
+
if ( $select_all ) { ?>
|
321 |
+
<em class="hide-if-no-js">
|
322 |
+
<input id="imagify-toggle-check-thumbnail-sizes-2" type="checkbox" class="mini imagify-toggle-check" <?php checked( ! $has_disallowed ); ?>>
|
323 |
+
<label for="imagify-toggle-check-thumbnail-sizes-2" onclick=""><?php _e( '(Un)Select All', 'imagify' ); ?></label>
|
324 |
+
</em>
|
325 |
+
<?php
|
326 |
+
}
|
327 |
+
?>
|
328 |
+
</fieldset>
|
329 |
</td>
|
330 |
</tr>
|
331 |
|
inc/classes/abstracts/class-imagify-abstract-attachment.php
CHANGED
@@ -70,10 +70,7 @@ class Imagify_Abstract_Attachment {
|
|
70 |
* @return string|false
|
71 |
*/
|
72 |
public function get_backup_url() {
|
73 |
-
|
74 |
-
$backup_url = str_replace( ABSPATH, site_url( '/' ), $backup_path );
|
75 |
-
|
76 |
-
return $backup_url;
|
77 |
}
|
78 |
|
79 |
/**
|
70 |
* @return string|false
|
71 |
*/
|
72 |
public function get_backup_url() {
|
73 |
+
return get_imagify_attachment_url( $this->get_backup_path() );
|
|
|
|
|
|
|
74 |
}
|
75 |
|
76 |
/**
|
inc/classes/class-imagify-attachment.php
CHANGED
@@ -105,7 +105,8 @@ class Imagify_Attachment extends Imagify_Abstract_Attachment {
|
|
105 |
* @return bool
|
106 |
*/
|
107 |
public function update_metadata_size() {
|
108 |
-
|
|
|
109 |
return false;
|
110 |
}
|
111 |
|
@@ -203,31 +204,30 @@ class Imagify_Attachment extends Imagify_Abstract_Attachment {
|
|
203 |
* @return array $optimized_data The optimization data.
|
204 |
*/
|
205 |
public function optimize( $optimization_level = null, $metadata = array() ) {
|
206 |
-
|
|
|
|
|
|
|
207 |
|
208 |
-
$
|
209 |
-
$
|
|
|
210 |
|
211 |
// To avoid issue with "original_size" at 0 in "_imagify_data".
|
212 |
if ( 0 === (int) $this->get_stats_data( 'original_size' ) ) {
|
213 |
$this->delete_imagify_data();
|
214 |
}
|
215 |
|
216 |
-
// Get file path & URL for original image.
|
217 |
-
$attachment_path = $this->get_original_path();
|
218 |
-
$attachment_url = $this->get_original_url();
|
219 |
-
$attachment_original_size = $this->get_original_size( false );
|
220 |
-
|
221 |
-
// Check if the attachment extension is allowed.
|
222 |
-
if ( ! $this->id || ! wp_attachment_is_image( $this->id ) ) {
|
223 |
-
return;
|
224 |
-
}
|
225 |
-
|
226 |
// Check if the full size is already optimized.
|
227 |
if ( $this->is_optimized() && ( $this->get_optimization_level() === $optimization_level ) ) {
|
228 |
return;
|
229 |
}
|
230 |
|
|
|
|
|
|
|
|
|
|
|
231 |
/**
|
232 |
* Fires before optimizing an attachment.
|
233 |
*
|
@@ -241,7 +241,7 @@ class Imagify_Attachment extends Imagify_Abstract_Attachment {
|
|
241 |
|
242 |
// Get the resize values for the original size.
|
243 |
$resized = false;
|
244 |
-
$do_resize = get_imagify_option( 'resize_larger'
|
245 |
$resize_width = get_imagify_option( 'resize_larger_w' );
|
246 |
$attachment_size = @getimagesize( $attachment_path );
|
247 |
|
@@ -249,18 +249,10 @@ class Imagify_Attachment extends Imagify_Abstract_Attachment {
|
|
249 |
$resized_attachment_path = $this->resize( $attachment_path, $attachment_size, $resize_width );
|
250 |
|
251 |
if ( ! is_wp_error( $resized_attachment_path ) ) {
|
252 |
-
|
253 |
-
|
254 |
-
if ( get_imagify_option( 'backup', false ) ) {
|
255 |
-
$backup_path = get_imagify_attachment_backup_path( $attachment_path );
|
256 |
-
$backup_path_info = pathinfo( $backup_path );
|
257 |
-
|
258 |
-
wp_mkdir_p( $backup_path_info['dirname'] );
|
259 |
|
260 |
-
|
261 |
-
$filesystem->copy( $attachment_path, $backup_path, true );
|
262 |
-
imagify_chmod_file( $backup_path );
|
263 |
-
}
|
264 |
|
265 |
$filesystem->move( $resized_attachment_path, $attachment_path, true );
|
266 |
imagify_chmod_file( $attachment_path );
|
@@ -284,14 +276,14 @@ class Imagify_Attachment extends Imagify_Abstract_Attachment {
|
|
284 |
|
285 |
$data = $this->fill_data( null, $response, $attachment_url );
|
286 |
|
|
|
|
|
|
|
287 |
if ( ! $data ) {
|
288 |
delete_transient( 'imagify-async-in-progress-' . $this->id );
|
289 |
return;
|
290 |
}
|
291 |
|
292 |
-
// Save the optimization level.
|
293 |
-
update_post_meta( $this->id, '_imagify_optimization_level', $optimization_level );
|
294 |
-
|
295 |
// If we resized the original with success, we have to update the attachment metadata.
|
296 |
// If not, WordPress keeps the old attachment size.
|
297 |
if ( $do_resize && $resized ) {
|
@@ -371,6 +363,11 @@ class Imagify_Attachment extends Imagify_Abstract_Attachment {
|
|
371 |
* @return void
|
372 |
*/
|
373 |
public function restore() {
|
|
|
|
|
|
|
|
|
|
|
374 |
// Stop the process if there is no backup file to restore.
|
375 |
if ( ! $this->has_backup() ) {
|
376 |
return;
|
105 |
* @return bool
|
106 |
*/
|
107 |
public function update_metadata_size() {
|
108 |
+
// Check if the attachment extension is allowed.
|
109 |
+
if ( ! imagify_is_attachment_mime_type_supported( $this->id ) ) {
|
110 |
return false;
|
111 |
}
|
112 |
|
204 |
* @return array $optimized_data The optimization data.
|
205 |
*/
|
206 |
public function optimize( $optimization_level = null, $metadata = array() ) {
|
207 |
+
// Check if the attachment extension is allowed.
|
208 |
+
if ( ! imagify_is_attachment_mime_type_supported( $this->id ) ) {
|
209 |
+
return;
|
210 |
+
}
|
211 |
|
212 |
+
$optimization_level = is_null( $optimization_level ) ? (int) get_imagify_option( 'optimization_level', 1 ) : (int) $optimization_level;
|
213 |
+
$metadata = $metadata ? $metadata : wp_get_attachment_metadata( $this->id );
|
214 |
+
$sizes = isset( $metadata['sizes'] ) ? (array) $metadata['sizes'] : array();
|
215 |
|
216 |
// To avoid issue with "original_size" at 0 in "_imagify_data".
|
217 |
if ( 0 === (int) $this->get_stats_data( 'original_size' ) ) {
|
218 |
$this->delete_imagify_data();
|
219 |
}
|
220 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
221 |
// Check if the full size is already optimized.
|
222 |
if ( $this->is_optimized() && ( $this->get_optimization_level() === $optimization_level ) ) {
|
223 |
return;
|
224 |
}
|
225 |
|
226 |
+
// Get file path & URL for original image.
|
227 |
+
$attachment_path = $this->get_original_path();
|
228 |
+
$attachment_url = $this->get_original_url();
|
229 |
+
$attachment_original_size = $this->get_original_size( false );
|
230 |
+
|
231 |
/**
|
232 |
* Fires before optimizing an attachment.
|
233 |
*
|
241 |
|
242 |
// Get the resize values for the original size.
|
243 |
$resized = false;
|
244 |
+
$do_resize = get_imagify_option( 'resize_larger' );
|
245 |
$resize_width = get_imagify_option( 'resize_larger_w' );
|
246 |
$attachment_size = @getimagesize( $attachment_path );
|
247 |
|
249 |
$resized_attachment_path = $this->resize( $attachment_path, $attachment_size, $resize_width );
|
250 |
|
251 |
if ( ! is_wp_error( $resized_attachment_path ) ) {
|
252 |
+
// TODO (@Greg): Send an error message if the backup fails.
|
253 |
+
imagify_backup_file( $attachment_path );
|
|
|
|
|
|
|
|
|
|
|
254 |
|
255 |
+
$filesystem = imagify_get_filesystem();
|
|
|
|
|
|
|
256 |
|
257 |
$filesystem->move( $resized_attachment_path, $attachment_path, true );
|
258 |
imagify_chmod_file( $attachment_path );
|
276 |
|
277 |
$data = $this->fill_data( null, $response, $attachment_url );
|
278 |
|
279 |
+
// Save the optimization level.
|
280 |
+
update_post_meta( $this->id, '_imagify_optimization_level', $optimization_level );
|
281 |
+
|
282 |
if ( ! $data ) {
|
283 |
delete_transient( 'imagify-async-in-progress-' . $this->id );
|
284 |
return;
|
285 |
}
|
286 |
|
|
|
|
|
|
|
287 |
// If we resized the original with success, we have to update the attachment metadata.
|
288 |
// If not, WordPress keeps the old attachment size.
|
289 |
if ( $do_resize && $resized ) {
|
363 |
* @return void
|
364 |
*/
|
365 |
public function restore() {
|
366 |
+
// Check if the attachment extension is allowed.
|
367 |
+
if ( ! imagify_is_attachment_mime_type_supported( $this->id ) ) {
|
368 |
+
return;
|
369 |
+
}
|
370 |
+
|
371 |
// Stop the process if there is no backup file to restore.
|
372 |
if ( ! $this->has_backup() ) {
|
373 |
return;
|
inc/common/admin-bar.php
CHANGED
@@ -57,7 +57,7 @@ function _imagify_admin_bar( $wp_admin_bar ) {
|
|
57 |
$wp_admin_bar->add_menu( array(
|
58 |
'parent' => 'imagify',
|
59 |
'id' => 'imagify-profile',
|
60 |
-
'title' => wp_nonce_field( 'imagify-get-admin-bar-profile', 'imagifygetadminbarprofilenonce', false, false ) . '<div id="wp-admin-bar-imagify-profile-loading">' . __( 'Loading...' ) . '</div><div id="wp-admin-bar-imagify-profile-content"></div>',
|
61 |
) );
|
62 |
}
|
63 |
}
|
57 |
$wp_admin_bar->add_menu( array(
|
58 |
'parent' => 'imagify',
|
59 |
'id' => 'imagify-profile',
|
60 |
+
'title' => wp_nonce_field( 'imagify-get-admin-bar-profile', 'imagifygetadminbarprofilenonce', false, false ) . '<div id="wp-admin-bar-imagify-profile-loading">' . __( 'Loading...', 'imagify' ) . '</div><div id="wp-admin-bar-imagify-profile-content"></div>',
|
61 |
) );
|
62 |
}
|
63 |
}
|
inc/functions/admin-ui.php
CHANGED
@@ -21,9 +21,13 @@ function get_imagify_attachment_optimization_text( $attachment, $context = 'wp'
|
|
21 |
$reoptimize_output = $reoptimize_link ? $reoptimize_link : '';
|
22 |
$reoptimize_output_before = '<div class="imagify-datas-actions-links">';
|
23 |
$reoptimize_output_after = '</div><!-- .imagify-datas-actions-links -->';
|
24 |
-
$error
|
25 |
|
26 |
if ( $error ) {
|
|
|
|
|
|
|
|
|
27 |
$reoptimize_output = $reoptimize_output_before . $reoptimize_output . $reoptimize_output_after;
|
28 |
|
29 |
return 'post.php' === $pagenow ? $output_before . $error . $reoptimize_output . $output_after : $error . $reoptimize_output;
|
@@ -86,7 +90,7 @@ function get_imagify_attachment_optimization_text( $attachment, $context = 'wp'
|
|
86 |
'attachment_id' => $attachment_id,
|
87 |
'context' => $context,
|
88 |
);
|
89 |
-
$class = ( 'post.php' !== $pagenow ) ? 'button-imagify-restore' : '';
|
90 |
$output .= '<a id="imagify-restore-' . $attachment_id . '" href="' . get_imagify_admin_url( 'restore-upload', $args ) . '" class="' . $class . '" data-waiting-label="' . esc_attr__( 'Restoring...', 'imagify' ) . '">';
|
91 |
$output .= '<span class="dashicons dashicons-image-rotate"></span>' . __( 'Restore Original', 'imagify' );
|
92 |
$output .= '</a>';
|
@@ -215,17 +219,16 @@ function get_imagify_attachment_reoptimize_link( $attachment, $context = 'wp' )
|
|
215 |
function get_imagify_media_column_content( $attachment, $context = 'wp' ) {
|
216 |
$attachment_id = $attachment->id;
|
217 |
$attachment_ext = $attachment->get_extension();
|
218 |
-
$output = '';
|
219 |
|
220 |
// Check if the attachment extension is allowed.
|
221 |
-
if ( 'wp' === $context && !
|
222 |
/* translators: %s is a file extension. */
|
223 |
return sprintf( __( '%s can\'t be optimized', 'imagify' ), strtoupper( $attachment_ext ) );
|
224 |
}
|
225 |
|
226 |
// Check if the API key is valid.
|
227 |
if ( ! imagify_valid_key() && ! $attachment->is_optimized() ) {
|
228 |
-
$output
|
229 |
$output .= '<br/>';
|
230 |
$output .= '<a href="' . esc_url( get_imagify_admin_url( 'options-general' ) ) . '">' . __( 'Check your Settings', 'imagify' ) . '</a>';
|
231 |
return $output;
|
@@ -244,12 +247,16 @@ function get_imagify_media_column_content( $attachment, $context = 'wp' ) {
|
|
244 |
'attachment_id' => $attachment_id,
|
245 |
'context' => $context,
|
246 |
);
|
247 |
-
$output
|
|
|
|
|
|
|
|
|
|
|
248 |
return $output;
|
249 |
}
|
250 |
|
251 |
-
|
252 |
-
return $output;
|
253 |
}
|
254 |
|
255 |
/**
|
@@ -320,7 +327,7 @@ function get_imagify_price_table_format( $value ) {
|
|
320 |
*/
|
321 |
function imagify_payment_modal() {
|
322 |
?>
|
323 |
-
<div id="imagify-pricing-modal" class="imagify-modal imagify-payment-modal" aria-hidden="false" role="dialog">
|
324 |
<div class="imagify-modal-content">
|
325 |
<div class="imagify-modal-main">
|
326 |
<div class="imagify-modal-views imagify-pre-checkout-view" id="imagify-pre-checkout-view" aria-hidden="false">
|
21 |
$reoptimize_output = $reoptimize_link ? $reoptimize_link : '';
|
22 |
$reoptimize_output_before = '<div class="imagify-datas-actions-links">';
|
23 |
$reoptimize_output_after = '</div><!-- .imagify-datas-actions-links -->';
|
24 |
+
$error = get_imagify_attachment_error_text( $attachment, $context );
|
25 |
|
26 |
if ( $error ) {
|
27 |
+
if ( 'post.php' !== $pagenow && $reoptimize_link && $attachment->has_backup() ) {
|
28 |
+
$reoptimize_output .= '<span class="attachment-has-backup hidden"></span>';
|
29 |
+
}
|
30 |
+
|
31 |
$reoptimize_output = $reoptimize_output_before . $reoptimize_output . $reoptimize_output_after;
|
32 |
|
33 |
return 'post.php' === $pagenow ? $output_before . $error . $reoptimize_output . $output_after : $error . $reoptimize_output;
|
90 |
'attachment_id' => $attachment_id,
|
91 |
'context' => $context,
|
92 |
);
|
93 |
+
$class = ( 'post.php' !== $pagenow ) ? 'button-imagify-restore attachment-has-backup' : '';
|
94 |
$output .= '<a id="imagify-restore-' . $attachment_id . '" href="' . get_imagify_admin_url( 'restore-upload', $args ) . '" class="' . $class . '" data-waiting-label="' . esc_attr__( 'Restoring...', 'imagify' ) . '">';
|
95 |
$output .= '<span class="dashicons dashicons-image-rotate"></span>' . __( 'Restore Original', 'imagify' );
|
96 |
$output .= '</a>';
|
219 |
function get_imagify_media_column_content( $attachment, $context = 'wp' ) {
|
220 |
$attachment_id = $attachment->id;
|
221 |
$attachment_ext = $attachment->get_extension();
|
|
|
222 |
|
223 |
// Check if the attachment extension is allowed.
|
224 |
+
if ( 'wp' === $context && ! imagify_is_attachment_mime_type_supported( $attachment_id ) ) {
|
225 |
/* translators: %s is a file extension. */
|
226 |
return sprintf( __( '%s can\'t be optimized', 'imagify' ), strtoupper( $attachment_ext ) );
|
227 |
}
|
228 |
|
229 |
// Check if the API key is valid.
|
230 |
if ( ! imagify_valid_key() && ! $attachment->is_optimized() ) {
|
231 |
+
$output = __( 'Invalid API key', 'imagify' );
|
232 |
$output .= '<br/>';
|
233 |
$output .= '<a href="' . esc_url( get_imagify_admin_url( 'options-general' ) ) . '">' . __( 'Check your Settings', 'imagify' ) . '</a>';
|
234 |
return $output;
|
247 |
'attachment_id' => $attachment_id,
|
248 |
'context' => $context,
|
249 |
);
|
250 |
+
$output = '<a id="imagify-upload-' . $attachment_id . '" href="' . esc_url( get_imagify_admin_url( 'manual-upload', $args ) ) . '" class="button-primary button-imagify-manual-upload" data-waiting-label="' . esc_attr__( 'Optimizing...', 'imagify' ) . '">' . __( 'Optimize', 'imagify' ) . '</a>';
|
251 |
+
|
252 |
+
if ( $attachment->has_backup() ) {
|
253 |
+
$output .= '<span class="attachment-has-backup hidden"></span>';
|
254 |
+
}
|
255 |
+
|
256 |
return $output;
|
257 |
}
|
258 |
|
259 |
+
return get_imagify_attachment_optimization_text( $attachment, $context );
|
|
|
260 |
}
|
261 |
|
262 |
/**
|
327 |
*/
|
328 |
function imagify_payment_modal() {
|
329 |
?>
|
330 |
+
<div id="imagify-pricing-modal" class="imagify-modal imagify-payment-modal hide-if-no-js" aria-hidden="false" role="dialog">
|
331 |
<div class="imagify-modal-content">
|
332 |
<div class="imagify-modal-main">
|
333 |
<div class="imagify-modal-views imagify-pre-checkout-view" id="imagify-pre-checkout-view" aria-hidden="false">
|
inc/functions/admin.php
CHANGED
@@ -34,18 +34,19 @@ function imagify_is_active_for_network() {
|
|
34 |
*
|
35 |
* @since 1.0
|
36 |
*
|
37 |
-
* @param string
|
38 |
-
* @param array
|
39 |
-
* @return string
|
40 |
*/
|
41 |
function get_imagify_admin_url( $action = 'options-general', $arg = array() ) {
|
42 |
-
$
|
43 |
-
|
44 |
-
|
|
|
|
|
45 |
|
46 |
switch ( $action ) {
|
47 |
case 'manual-override-upload':
|
48 |
-
$level = ( isset( $arg['optimization_level'] ) ) ? $arg['optimization_level'] : 0;
|
49 |
return wp_nonce_url( admin_url( 'admin-post.php?action=imagify_manual_override_upload&attachment_id=' . $id . '&optimization_level=' . $level . '&context=' . $context ), 'imagify-manual-override-upload' );
|
50 |
|
51 |
case 'manual-upload':
|
@@ -109,72 +110,6 @@ function get_imagify_max_intermediate_image_size() {
|
|
109 |
);
|
110 |
}
|
111 |
|
112 |
-
/**
|
113 |
-
* Renew a dismissed Imagify notice.
|
114 |
-
*
|
115 |
-
* @since 1.0
|
116 |
-
*
|
117 |
-
* @param string $notice A notice ID.
|
118 |
-
* @param int $user_id A user ID.
|
119 |
-
* @return void
|
120 |
-
*/
|
121 |
-
function imagify_renew_notice( $notice, $user_id = 0 ) {
|
122 |
-
$user_id = $user_id ? (int) $user_id : get_current_user_id();
|
123 |
-
$notices = get_user_meta( $user_id, '_imagify_ignore_notices', true );
|
124 |
-
$notices = $notices && is_array( $notices ) ? array_flip( $notices ) : array();
|
125 |
-
|
126 |
-
if ( ! isset( $notices[ $notice ] ) ) {
|
127 |
-
return;
|
128 |
-
}
|
129 |
-
|
130 |
-
unset( $notices[ $notice ] );
|
131 |
-
$notices = array_flip( $notices );
|
132 |
-
$notices = array_values( $notices );
|
133 |
-
update_user_meta( $user_id, '_imagify_ignore_notices', $notices );
|
134 |
-
}
|
135 |
-
|
136 |
-
/**
|
137 |
-
* Dismiss an Imagify notice.
|
138 |
-
*
|
139 |
-
* @since 1.0
|
140 |
-
*
|
141 |
-
* @param string $notice A notice ID.
|
142 |
-
* @param int $user_id A user ID.
|
143 |
-
* @return void
|
144 |
-
*/
|
145 |
-
function imagify_dismiss_notice( $notice, $user_id = 0 ) {
|
146 |
-
$user_id = $user_id ? (int) $user_id : get_current_user_id();
|
147 |
-
$notices = get_user_meta( $user_id, '_imagify_ignore_notices', true );
|
148 |
-
$notices = is_array( $notices ) ? $notices : array();
|
149 |
-
$notices[] = $notice;
|
150 |
-
$notices = array_filter( $notices );
|
151 |
-
$notices = array_unique( $notices );
|
152 |
-
|
153 |
-
update_user_meta( $user_id, '_imagify_ignore_notices', $notices );
|
154 |
-
}
|
155 |
-
|
156 |
-
/**
|
157 |
-
* Tell if an Imagify notice is dismissed.
|
158 |
-
*
|
159 |
-
* @since 1.6.5
|
160 |
-
* @author Grégory Viguier
|
161 |
-
*
|
162 |
-
* @param string $notice A notice ID.
|
163 |
-
* @param int $user_id A user ID.
|
164 |
-
* @return bool
|
165 |
-
*/
|
166 |
-
function imagify_notice_is_dismissed( $notice, $user_id = 0 ) {
|
167 |
-
$user_id = $user_id ? (int) $user_id : get_current_user_id();
|
168 |
-
$notices = get_user_meta( $user_id, '_imagify_ignore_notices', true );
|
169 |
-
|
170 |
-
if ( ! $notices || ! is_array( $notices ) ) {
|
171 |
-
return false;
|
172 |
-
}
|
173 |
-
|
174 |
-
$notices = array_flip( $notices );
|
175 |
-
return isset( $notices[ $notice ] );
|
176 |
-
}
|
177 |
-
|
178 |
/**
|
179 |
* Combine two arrays with some specific keys.
|
180 |
* We use this function to combine the result of 2 SQL queries.
|
@@ -286,3 +221,31 @@ function imagify_get_wpdb_metas( $metas, $ids ) {
|
|
286 |
|
287 |
return $metas;
|
288 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
34 |
*
|
35 |
* @since 1.0
|
36 |
*
|
37 |
+
* @param string $action An action.
|
38 |
+
* @param array|string $arg An array of arguments. It can contain an attachment ID and/or a context.
|
39 |
+
* @return string The URL of the specific admin page or action.
|
40 |
*/
|
41 |
function get_imagify_admin_url( $action = 'options-general', $arg = array() ) {
|
42 |
+
if ( is_array( $arg ) ) {
|
43 |
+
$id = isset( $arg['attachment_id'] ) ? $arg['attachment_id'] : 0;
|
44 |
+
$context = isset( $arg['context'] ) ? $arg['context'] : 'wp';
|
45 |
+
$level = isset( $arg['optimization_level'] ) ? $arg['optimization_level'] : 0;
|
46 |
+
}
|
47 |
|
48 |
switch ( $action ) {
|
49 |
case 'manual-override-upload':
|
|
|
50 |
return wp_nonce_url( admin_url( 'admin-post.php?action=imagify_manual_override_upload&attachment_id=' . $id . '&optimization_level=' . $level . '&context=' . $context ), 'imagify-manual-override-upload' );
|
51 |
|
52 |
case 'manual-upload':
|
110 |
);
|
111 |
}
|
112 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
113 |
/**
|
114 |
* Combine two arrays with some specific keys.
|
115 |
* We use this function to combine the result of 2 SQL queries.
|
221 |
|
222 |
return $metas;
|
223 |
}
|
224 |
+
|
225 |
+
/**
|
226 |
+
* Simple helper to get the WP Rocket's site URL.
|
227 |
+
* The URL is localized and contains some utm_*** parameters.
|
228 |
+
*
|
229 |
+
* @since 1.6.8
|
230 |
+
* @author Grégory Viguier
|
231 |
+
*
|
232 |
+
* @return string The URL.
|
233 |
+
*/
|
234 |
+
function imagify_get_wp_rocket_url() {
|
235 |
+
$wprocket_url = 'https://wp-rocket.me/';
|
236 |
+
$locale = get_locale();
|
237 |
+
$suffixes = array(
|
238 |
+
'fr_FR' => 'fr',
|
239 |
+
'es_ES' => 'es',
|
240 |
+
'it_IT' => 'it',
|
241 |
+
'de_DE' => 'de',
|
242 |
+
);
|
243 |
+
|
244 |
+
if ( isset( $suffixes[ $locale ] ) ) {
|
245 |
+
$wprocket_url .= $suffixes[ $locale ] . '/';
|
246 |
+
}
|
247 |
+
|
248 |
+
$wprocket_url .= '?utm_source=imagify-coupon&utm_medium=plugin&utm_campaign=imagify';
|
249 |
+
|
250 |
+
return $wprocket_url;
|
251 |
+
}
|
inc/functions/attachments.php
CHANGED
@@ -16,38 +16,107 @@ function get_imagify_mime_type() {
|
|
16 |
);
|
17 |
}
|
18 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
19 |
/**
|
20 |
* Get the backup path of a specific attachement.
|
21 |
*
|
22 |
* @since 1.0
|
23 |
*
|
24 |
-
* @param
|
25 |
-
* @return string|bool
|
26 |
*/
|
27 |
function get_imagify_attachment_backup_path( $file_path ) {
|
28 |
-
static $backup_dir;
|
29 |
-
|
30 |
$file_path = wp_normalize_path( (string) $file_path );
|
31 |
$upload_basedir = get_imagify_upload_basedir();
|
|
|
32 |
|
33 |
if ( ! $file_path || ! $upload_basedir ) {
|
34 |
return false;
|
35 |
}
|
36 |
|
37 |
-
if ( ! isset( $backup_dir ) ) {
|
38 |
-
$backup_dir = $upload_basedir . 'backup/';
|
39 |
-
|
40 |
-
/**
|
41 |
-
* Filter the backup directory path.
|
42 |
-
*
|
43 |
-
* @since 1.0
|
44 |
-
*
|
45 |
-
* @param string $backup_dir The backup directory path.
|
46 |
-
*/
|
47 |
-
$backup_dir = apply_filters( 'imagify_backup_directory', $backup_dir );
|
48 |
-
$backup_dir = trailingslashit( wp_normalize_path( $backup_dir ) );
|
49 |
-
}
|
50 |
-
|
51 |
return str_replace( $upload_basedir, $backup_dir, $file_path );
|
52 |
}
|
53 |
|
@@ -81,7 +150,7 @@ function get_imagify_attached_file( $file_path ) {
|
|
81 |
*
|
82 |
* @since 1.4.5
|
83 |
*
|
84 |
-
* @param string $file_path A relative
|
85 |
* @return string|bool File URL, otherwise false.
|
86 |
*/
|
87 |
function get_imagify_attachment_url( $file_path ) {
|
@@ -155,27 +224,30 @@ function get_imagify_thumbnail_sizes() {
|
|
155 |
* A simple helper to get the upload basedir.
|
156 |
*
|
157 |
* @since 1.6.7
|
|
|
158 |
* @author Grégory Viguier
|
159 |
*
|
160 |
-
* @return
|
|
|
161 |
*/
|
162 |
-
function get_imagify_upload_basedir() {
|
163 |
static $upload_basedir;
|
|
|
164 |
|
165 |
if ( isset( $upload_basedir ) ) {
|
166 |
-
return $upload_basedir;
|
167 |
}
|
168 |
|
169 |
-
$uploads
|
|
|
170 |
|
171 |
if ( false !== $uploads['error'] ) {
|
172 |
-
$
|
173 |
-
|
|
|
174 |
}
|
175 |
|
176 |
-
$
|
177 |
-
|
178 |
-
return $upload_basedir;
|
179 |
}
|
180 |
|
181 |
/**
|
16 |
);
|
17 |
}
|
18 |
|
19 |
+
/**
|
20 |
+
* Tell if an attachment has a supported mime type.
|
21 |
+
* Was previously Imagify_AS3CF::is_mime_type_supported() since 1.6.6.
|
22 |
+
*
|
23 |
+
* @since 1.6.8
|
24 |
+
* @author Grégory Viguier
|
25 |
+
*
|
26 |
+
* @param int $attachment_id The attachment ID.
|
27 |
+
* @return bool
|
28 |
+
*/
|
29 |
+
function imagify_is_attachment_mime_type_supported( $attachment_id ) {
|
30 |
+
static $is = array( false );
|
31 |
+
|
32 |
+
$attachment_id = absint( $attachment_id );
|
33 |
+
|
34 |
+
if ( isset( $is[ $attachment_id ] ) ) {
|
35 |
+
return $is[ $attachment_id ];
|
36 |
+
}
|
37 |
+
|
38 |
+
$mime_types = get_imagify_mime_type();
|
39 |
+
$mime_types = array_flip( $mime_types );
|
40 |
+
$mime_type = (string) get_post_mime_type( $attachment_id );
|
41 |
+
|
42 |
+
$is[ $attachment_id ] = isset( $mime_types[ $mime_type ] );
|
43 |
+
|
44 |
+
return $is[ $attachment_id ];
|
45 |
+
}
|
46 |
+
|
47 |
+
/**
|
48 |
+
* Get the path to the backups directory.
|
49 |
+
*
|
50 |
+
* @since 1.6.8
|
51 |
+
* @author Grégory Viguier
|
52 |
+
*
|
53 |
+
* @param bool $bypass_error True to return the path even if there is an error. This is used when we want to display this path in a message for example.
|
54 |
+
* @return string|bool Path to the backups directory. False on failure.
|
55 |
+
*/
|
56 |
+
function get_imagify_backup_dir_path( $bypass_error = false ) {
|
57 |
+
static $backup_dir;
|
58 |
+
|
59 |
+
if ( isset( $backup_dir ) ) {
|
60 |
+
return $backup_dir;
|
61 |
+
}
|
62 |
+
|
63 |
+
$upload_basedir = get_imagify_upload_basedir( $bypass_error );
|
64 |
+
|
65 |
+
if ( ! $upload_basedir ) {
|
66 |
+
return false;
|
67 |
+
}
|
68 |
+
|
69 |
+
$backup_dir = $upload_basedir . 'backup/';
|
70 |
+
|
71 |
+
/**
|
72 |
+
* Filter the backup directory path.
|
73 |
+
*
|
74 |
+
* @since 1.0
|
75 |
+
*
|
76 |
+
* @param string $backup_dir The backup directory path.
|
77 |
+
*/
|
78 |
+
$backup_dir = apply_filters( 'imagify_backup_directory', $backup_dir );
|
79 |
+
$backup_dir = trailingslashit( wp_normalize_path( $backup_dir ) );
|
80 |
+
|
81 |
+
return $backup_dir;
|
82 |
+
}
|
83 |
+
|
84 |
+
/**
|
85 |
+
* Tell if the folder containing the backups is writable.
|
86 |
+
*
|
87 |
+
* @since 1.6.8
|
88 |
+
* @author Grégory Viguier
|
89 |
+
*
|
90 |
+
* @return bool
|
91 |
+
*/
|
92 |
+
function imagify_backup_dir_is_writable() {
|
93 |
+
if ( ! get_imagify_backup_dir_path() ) {
|
94 |
+
return false;
|
95 |
+
}
|
96 |
+
|
97 |
+
$filesystem = imagify_get_filesystem();
|
98 |
+
$has_backup_dir = wp_mkdir_p( get_imagify_backup_dir_path() );
|
99 |
+
|
100 |
+
return $has_backup_dir && $filesystem->is_writable( get_imagify_backup_dir_path() );
|
101 |
+
}
|
102 |
+
|
103 |
/**
|
104 |
* Get the backup path of a specific attachement.
|
105 |
*
|
106 |
* @since 1.0
|
107 |
*
|
108 |
+
* @param string $file_path The file path.
|
109 |
+
* @return string|bool The backup path. False on failure.
|
110 |
*/
|
111 |
function get_imagify_attachment_backup_path( $file_path ) {
|
|
|
|
|
112 |
$file_path = wp_normalize_path( (string) $file_path );
|
113 |
$upload_basedir = get_imagify_upload_basedir();
|
114 |
+
$backup_dir = get_imagify_backup_dir_path();
|
115 |
|
116 |
if ( ! $file_path || ! $upload_basedir ) {
|
117 |
return false;
|
118 |
}
|
119 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
120 |
return str_replace( $upload_basedir, $backup_dir, $file_path );
|
121 |
}
|
122 |
|
150 |
*
|
151 |
* @since 1.4.5
|
152 |
*
|
153 |
+
* @param string $file_path A relative or absolute file path.
|
154 |
* @return string|bool File URL, otherwise false.
|
155 |
*/
|
156 |
function get_imagify_attachment_url( $file_path ) {
|
224 |
* A simple helper to get the upload basedir.
|
225 |
*
|
226 |
* @since 1.6.7
|
227 |
+
* @since 1.6.8 Added the $bypass_error parameter.
|
228 |
* @author Grégory Viguier
|
229 |
*
|
230 |
+
* @param bool $bypass_error True to return the path even if there is an error. This is used when we want to display this path in a message for example.
|
231 |
+
* @return string|bool The path. False on failure.
|
232 |
*/
|
233 |
+
function get_imagify_upload_basedir( $bypass_error = false ) {
|
234 |
static $upload_basedir;
|
235 |
+
static $upload_basedir_or_error;
|
236 |
|
237 |
if ( isset( $upload_basedir ) ) {
|
238 |
+
return $bypass_error ? $upload_basedir : $upload_basedir_or_error;
|
239 |
}
|
240 |
|
241 |
+
$uploads = wp_upload_dir();
|
242 |
+
$upload_basedir = trailingslashit( wp_normalize_path( $uploads['basedir'] ) );
|
243 |
|
244 |
if ( false !== $uploads['error'] ) {
|
245 |
+
$upload_basedir_or_error = false;
|
246 |
+
} else {
|
247 |
+
$upload_basedir_or_error = $upload_basedir;
|
248 |
}
|
249 |
|
250 |
+
return $bypass_error ? $upload_basedir : $upload_basedir_or_error;
|
|
|
|
|
251 |
}
|
252 |
|
253 |
/**
|
inc/functions/files.php
CHANGED
@@ -45,3 +45,89 @@ function imagify_get_filesystem() {
|
|
45 |
function imagify_chmod_file( $file ) {
|
46 |
return imagify_get_filesystem()->chmod( $file, FS_CHMOD_FILE );
|
47 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
45 |
function imagify_chmod_file( $file ) {
|
46 |
return imagify_get_filesystem()->chmod( $file, FS_CHMOD_FILE );
|
47 |
}
|
48 |
+
|
49 |
+
|
50 |
+
/**
|
51 |
+
* Get a clean value of ABSPATH that can be used in string replacements.
|
52 |
+
*
|
53 |
+
* @since 1.6.8
|
54 |
+
* @author Grégory Viguier
|
55 |
+
*
|
56 |
+
* @return string The path to WordPress' root folder.
|
57 |
+
*/
|
58 |
+
function imagify_get_abspath() {
|
59 |
+
static $abspath;
|
60 |
+
|
61 |
+
if ( isset( $abspath ) ) {
|
62 |
+
return $abspath;
|
63 |
+
}
|
64 |
+
|
65 |
+
$abspath = wp_normalize_path( ABSPATH );
|
66 |
+
|
67 |
+
// Make sure ABSPATH is not messed up: it could be defined as a relative path for example (yeah, I know, but we've seen it).
|
68 |
+
$test_file = wp_normalize_path( IMAGIFY_FILE );
|
69 |
+
$pos = strpos( $test_file, $abspath );
|
70 |
+
|
71 |
+
if ( 0 < $pos ) {
|
72 |
+
// ABSPATH has a wrong value.
|
73 |
+
$abspath = substr( $test_file, 0, $pos ) . $abspath;
|
74 |
+
|
75 |
+
} elseif ( false === $pos && class_exists( 'ReflectionClass' ) ) {
|
76 |
+
// Imagify is symlinked (dude, you look for trouble).
|
77 |
+
$reflector = new ReflectionClass( 'Requests' );
|
78 |
+
$test_file = $reflector->getFileName();
|
79 |
+
$pos = strpos( $test_file, $abspath );
|
80 |
+
|
81 |
+
if ( 0 < $pos ) {
|
82 |
+
// ABSPATH has a wrong value.
|
83 |
+
$abspath = substr( $test_file, 0, $pos ) . $abspath;
|
84 |
+
}
|
85 |
+
}
|
86 |
+
|
87 |
+
$abspath = '/' . trim( $abspath, '/' ) . '/';
|
88 |
+
|
89 |
+
return $abspath;
|
90 |
+
}
|
91 |
+
|
92 |
+
|
93 |
+
/**
|
94 |
+
* Make an absolute path relative to WordPress' root folder.
|
95 |
+
* Also works for files from registered symlinked plugins.
|
96 |
+
*
|
97 |
+
* @since 1.6.8
|
98 |
+
* @author Grégory Viguier
|
99 |
+
*
|
100 |
+
* @param string $file_path An absolute path.
|
101 |
+
* @return string A relative path. Can return the absolute path in case of a failure.
|
102 |
+
*/
|
103 |
+
function imagify_make_file_path_replative( $file_path ) {
|
104 |
+
static $abspath;
|
105 |
+
global $wp_plugin_paths;
|
106 |
+
|
107 |
+
if ( ! isset( $abspath ) ) {
|
108 |
+
$abspath = wp_normalize_path( ABSPATH );
|
109 |
+
}
|
110 |
+
|
111 |
+
$file_path = wp_normalize_path( $file_path );
|
112 |
+
$pos = strpos( $file_path, $abspath );
|
113 |
+
|
114 |
+
if ( false === $pos && $wp_plugin_paths && is_array( $wp_plugin_paths ) ) {
|
115 |
+
// The file is probably part of a symlinked plugin.
|
116 |
+
arsort( $wp_plugin_paths );
|
117 |
+
|
118 |
+
foreach ( $wp_plugin_paths as $dir => $realdir ) {
|
119 |
+
if ( strpos( $file_path, $realdir ) === 0 ) {
|
120 |
+
$file_path = wp_normalize_path( $dir . substr( $file_path, strlen( $realdir ) ) );
|
121 |
+
}
|
122 |
+
}
|
123 |
+
|
124 |
+
$pos = strpos( $file_path, $abspath );
|
125 |
+
}
|
126 |
+
|
127 |
+
if ( false === $pos ) {
|
128 |
+
// We're in trouble.
|
129 |
+
return $file_path;
|
130 |
+
}
|
131 |
+
|
132 |
+
return substr_replace( $file_path, '', 0, $pos + strlen( $abspath ) );
|
133 |
+
}
|
inc/functions/i18n.php
CHANGED
@@ -99,6 +99,14 @@ function get_imagify_localize_script_translations( $context ) {
|
|
99 |
'totalUnoptimizedAttachments' => imagify_count_unoptimized_attachments(),
|
100 |
'totalErrorsAttachments' => imagify_count_error_attachments(),
|
101 |
'processing' => __( 'Imagify is still processing. Are you sure you want to leave this page?', 'imagify' ),
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
102 |
),
|
103 |
);
|
104 |
|
99 |
'totalUnoptimizedAttachments' => imagify_count_unoptimized_attachments(),
|
100 |
'totalErrorsAttachments' => imagify_count_error_attachments(),
|
101 |
'processing' => __( 'Imagify is still processing. Are you sure you want to leave this page?', 'imagify' ),
|
102 |
+
'optimizing' => __( 'Optimizing', 'imagify' ),
|
103 |
+
'complete' => _x( 'Complete', 'adjective', 'imagify' ),
|
104 |
+
'error' => __( 'Error', 'imagify' ),
|
105 |
+
'notice' => _x( 'Notice', 'noun', 'imagify' ),
|
106 |
+
/* translators: %s is a number. Don't use %d. */
|
107 |
+
'nbrFiles' => __( '%s file(s)', 'imagify' ),
|
108 |
+
/* translators: %s is a number. Don't use %d. */
|
109 |
+
'nbrErrors' => __( '%s error(s)', 'imagify' ),
|
110 |
),
|
111 |
);
|
112 |
|
inc/functions/notices.php
ADDED
@@ -0,0 +1,72 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
defined( 'ABSPATH' ) || die( 'Cheatin\' uh?' );
|
3 |
+
|
4 |
+
/**
|
5 |
+
* Renew a dismissed Imagify notice.
|
6 |
+
*
|
7 |
+
* @since 1.0
|
8 |
+
*
|
9 |
+
* @param string $notice A notice ID.
|
10 |
+
* @param int $user_id A user ID.
|
11 |
+
* @return void
|
12 |
+
*/
|
13 |
+
function imagify_renew_notice( $notice, $user_id = 0 ) {
|
14 |
+
$user_id = $user_id ? (int) $user_id : get_current_user_id();
|
15 |
+
$notices = get_user_meta( $user_id, '_imagify_ignore_notices', true );
|
16 |
+
$notices = $notices && is_array( $notices ) ? array_flip( $notices ) : array();
|
17 |
+
|
18 |
+
if ( ! isset( $notices[ $notice ] ) ) {
|
19 |
+
return;
|
20 |
+
}
|
21 |
+
|
22 |
+
unset( $notices[ $notice ] );
|
23 |
+
$notices = array_flip( $notices );
|
24 |
+
$notices = array_filter( $notices );
|
25 |
+
$notices = array_values( $notices );
|
26 |
+
|
27 |
+
update_user_meta( $user_id, '_imagify_ignore_notices', $notices );
|
28 |
+
}
|
29 |
+
|
30 |
+
/**
|
31 |
+
* Dismiss an Imagify notice.
|
32 |
+
*
|
33 |
+
* @since 1.0
|
34 |
+
*
|
35 |
+
* @param string $notice A notice ID.
|
36 |
+
* @param int $user_id A user ID.
|
37 |
+
* @return void
|
38 |
+
*/
|
39 |
+
function imagify_dismiss_notice( $notice, $user_id = 0 ) {
|
40 |
+
$user_id = $user_id ? (int) $user_id : get_current_user_id();
|
41 |
+
$notices = get_user_meta( $user_id, '_imagify_ignore_notices', true );
|
42 |
+
$notices = $notices && is_array( $notices ) ? array_flip( $notices ) : array();
|
43 |
+
|
44 |
+
if ( isset( $notices[ $notice ] ) ) {
|
45 |
+
return;
|
46 |
+
}
|
47 |
+
|
48 |
+
$notices[ $notice ] = 1;
|
49 |
+
$notices = array_flip( $notices );
|
50 |
+
$notices = array_filter( $notices );
|
51 |
+
$notices = array_values( $notices );
|
52 |
+
|
53 |
+
update_user_meta( $user_id, '_imagify_ignore_notices', $notices );
|
54 |
+
}
|
55 |
+
|
56 |
+
/**
|
57 |
+
* Tell if an Imagify notice is dismissed.
|
58 |
+
*
|
59 |
+
* @since 1.6.5
|
60 |
+
* @author Grégory Viguier
|
61 |
+
*
|
62 |
+
* @param string $notice A notice ID.
|
63 |
+
* @param int $user_id A user ID.
|
64 |
+
* @return bool
|
65 |
+
*/
|
66 |
+
function imagify_notice_is_dismissed( $notice, $user_id = 0 ) {
|
67 |
+
$user_id = $user_id ? (int) $user_id : get_current_user_id();
|
68 |
+
$notices = get_user_meta( $user_id, '_imagify_ignore_notices', true );
|
69 |
+
$notices = $notices && is_array( $notices ) ? array_flip( $notices ) : array();
|
70 |
+
|
71 |
+
return isset( $notices[ $notice ] );
|
72 |
+
}
|
inc/functions/process.php
CHANGED
@@ -107,14 +107,8 @@ function do_imagify( $file_path, $args = array() ) {
|
|
107 |
|
108 |
// Create a backup file.
|
109 |
if ( 'wp' === $args['context'] && $args['backup'] && ! $args['resized'] ) {
|
110 |
-
|
111 |
-
|
112 |
-
|
113 |
-
wp_mkdir_p( $backup_path_info['dirname'] );
|
114 |
-
|
115 |
-
// TO DO - check and send a error message if the backup can't be created.
|
116 |
-
$filesystem->copy( $file_path, $backup_path, true );
|
117 |
-
imagify_chmod_file( $backup_path );
|
118 |
}
|
119 |
|
120 |
if ( ! function_exists( 'download_url' ) ) {
|
@@ -177,3 +171,68 @@ function imagify_do_async_job( $body ) {
|
|
177 |
|
178 |
wp_remote_post( admin_url( 'admin-ajax.php' ), $args );
|
179 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
107 |
|
108 |
// Create a backup file.
|
109 |
if ( 'wp' === $args['context'] && $args['backup'] && ! $args['resized'] ) {
|
110 |
+
// TODO (@Greg): Send an error message if the backup fails.
|
111 |
+
imagify_backup_file( $file_path );
|
|
|
|
|
|
|
|
|
|
|
|
|
112 |
}
|
113 |
|
114 |
if ( ! function_exists( 'download_url' ) ) {
|
171 |
|
172 |
wp_remote_post( admin_url( 'admin-ajax.php' ), $args );
|
173 |
}
|
174 |
+
|
175 |
+
/**
|
176 |
+
* Backup a file.
|
177 |
+
*
|
178 |
+
* @since 1.6.8
|
179 |
+
* @author Grégory Viguier
|
180 |
+
*
|
181 |
+
* @param string $file_path The file path.
|
182 |
+
* @param string $backup_path The backup path. This is useful for NGG for example, who doesn't store the backups in our backup folder.
|
183 |
+
* @return bool|object True on success. False if the backup option is not enabled. A WP_Error object on failure.
|
184 |
+
*/
|
185 |
+
function imagify_backup_file( $file_path, $backup_path = null ) {
|
186 |
+
if ( ! get_imagify_option( 'backup' ) ) {
|
187 |
+
return false;
|
188 |
+
}
|
189 |
+
|
190 |
+
// Make sure the source path is not empty.
|
191 |
+
if ( ! $file_path ) {
|
192 |
+
return new WP_Error( 'empty_path', __( 'The file path is empty.', 'imagify' ) );
|
193 |
+
}
|
194 |
+
|
195 |
+
$filesystem = imagify_get_filesystem();
|
196 |
+
|
197 |
+
// Make sure the source file exists.
|
198 |
+
if ( ! $filesystem->exists( $file_path ) ) {
|
199 |
+
return new WP_Error( 'source_doesnt_exist', __( 'The file to backup does not exist.', 'imagify' ), array(
|
200 |
+
'file_path' => imagify_make_file_path_replative( $file_path ),
|
201 |
+
) );
|
202 |
+
}
|
203 |
+
|
204 |
+
if ( ! isset( $backup_path ) ) {
|
205 |
+
// Make sure the backup directory is writable.
|
206 |
+
if ( ! imagify_backup_dir_is_writable() ) {
|
207 |
+
return new WP_Error( 'backup_dir_not_writable', __( 'The backup directory is not writable.', 'imagify' ) );
|
208 |
+
}
|
209 |
+
|
210 |
+
$backup_path = get_imagify_attachment_backup_path( $file_path );
|
211 |
+
|
212 |
+
// Make sure the uploads directory has no errors.
|
213 |
+
if ( ! $backup_path ) {
|
214 |
+
return new WP_Error( 'wp_upload_error', __( 'Error while retrieving the uploads directory path.', 'imagify' ) );
|
215 |
+
}
|
216 |
+
}
|
217 |
+
|
218 |
+
// Make sure the filesystem has no errors.
|
219 |
+
if ( ! empty( $filesystem->errors->errors ) ) {
|
220 |
+
return new WP_Error( 'filesystem_error', __( 'Filesystem error.', 'imagify' ), $filesystem->errors );
|
221 |
+
}
|
222 |
+
|
223 |
+
// Create sub-directories.
|
224 |
+
wp_mkdir_p( dirname( $backup_path ) );
|
225 |
+
|
226 |
+
// Copy the file.
|
227 |
+
$filesystem->copy( $file_path, $backup_path, false, FS_CHMOD_FILE );
|
228 |
+
|
229 |
+
// Make sure the backup copy exists.
|
230 |
+
if ( ! $filesystem->exists( $backup_path ) ) {
|
231 |
+
return new WP_Error( 'backup_doesnt_exist', __( 'The file could not be saved.', 'imagify' ), array(
|
232 |
+
'file_path' => imagify_make_file_path_replative( $file_path ),
|
233 |
+
'backup_path' => imagify_make_file_path_replative( $backup_path ),
|
234 |
+
) );
|
235 |
+
}
|
236 |
+
|
237 |
+
return true;
|
238 |
+
}
|
readme.txt
CHANGED
@@ -3,7 +3,7 @@ Contributors: wp_media, GregLone
|
|
3 |
Tags: compress image, images, performance, optimization, photos, upload, resize, gif, png, jpg, reduce image size, retina
|
4 |
Requires at least: 3.7.0
|
5 |
Tested up to: 4.8.0
|
6 |
-
Stable tag: 1.6.
|
7 |
|
8 |
Dramatically reduce image file sizes without losing quality, make your website load faster, boost your SEO and save money on your bandwidth.
|
9 |
|
@@ -136,6 +136,14 @@ When the plugin is disabled, your existing images remain optimized. Backups of t
|
|
136 |
3. Media Page
|
137 |
|
138 |
== Changelog ==
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
139 |
= 1.6.7.1 =
|
140 |
* Bug Fix: Fixed the "Unknown error" during a bulk optimization.
|
141 |
|
@@ -146,7 +154,7 @@ When the plugin is disabled, your existing images remain optimized. Backups of t
|
|
146 |
* Improvement: Use cURL directly only to optimize an image. It helps when cURL is not available: less things will break in that case.
|
147 |
* Bug Fix: Fixed a bug with the plugin Screets Live Chat, prior to version 2.2.8.
|
148 |
* Regression fix: Fixed the buffer size on the bulk optimization page.
|
149 |
-
* Dev stuff: Added a hook allowing to filter arguments when doing a request to our API. It can be used to
|
150 |
|
151 |
= 1.6.6 =
|
152 |
* New: Compatibility with the plugin WP Offload S3 Lite. Your images now will be sent to Amazon S3 after being optimized. Also works when you store your images only on S3, not locally.
|
3 |
Tags: compress image, images, performance, optimization, photos, upload, resize, gif, png, jpg, reduce image size, retina
|
4 |
Requires at least: 3.7.0
|
5 |
Tested up to: 4.8.0
|
6 |
+
Stable tag: 1.6.8
|
7 |
|
8 |
Dramatically reduce image file sizes without losing quality, make your website load faster, boost your SEO and save money on your bandwidth.
|
9 |
|
136 |
3. Media Page
|
137 |
|
138 |
== Changelog ==
|
139 |
+
= 1.6.8 =
|
140 |
+
* Improvement: don't display the restore bulk action in the medias list if there is nothing to restore.
|
141 |
+
* Improvement: you can know select and unselect all image sizes at once in the settings page.
|
142 |
+
* Improvement: detect when the backup directory is not writable. A warning is displayed dynamically under the backup setting, a notice is also displayed on some pages.
|
143 |
+
* Improvement: some strings were still not translated in the bulk optimization page.
|
144 |
+
* Bug Fix: the "Save & Go to Bulk Optimizer" button now redirects you even if no settings have been changed.
|
145 |
+
* Lots of various small fixes and code improvements.
|
146 |
+
|
147 |
= 1.6.7.1 =
|
148 |
* Bug Fix: Fixed the "Unknown error" during a bulk optimization.
|
149 |
|
154 |
* Improvement: Use cURL directly only to optimize an image. It helps when cURL is not available: less things will break in that case.
|
155 |
* Bug Fix: Fixed a bug with the plugin Screets Live Chat, prior to version 2.2.8.
|
156 |
* Regression fix: Fixed the buffer size on the bulk optimization page.
|
157 |
+
* Dev stuff: Added a hook allowing to filter arguments when doing a request to our API. It can be used to increase the timeout value for example.
|
158 |
|
159 |
= 1.6.6 =
|
160 |
* New: Compatibility with the plugin WP Offload S3 Lite. Your images now will be sent to Amazon S3 after being optimized. Also works when you store your images only on S3, not locally.
|