Converter for Media – Optimize images | Convert WebP & AVIF - Version 5.2.0

Version Description

(2022-09-10) = * [Fixed] Re-conversion of images modified after previous conversion * [Added] Optimization statistics in Media Upload Popup * [Added] Filter webpc_source_directories to add support for custom directories

Download this release

Release Info

Developer mateuszgbiorczyk
Plugin Icon 128x128 Converter for Media – Optimize images | Convert WebP & AVIF
Version 5.2.0
Comparing to
See all releases

Code changes from version 5.1.0 to 5.2.0

Files changed (53) hide show
  1. assets/build/css/styles.css +1 -1
  2. changelog.txt +5 -0
  3. readme.txt +54 -33
  4. src/Conversion/Cron/CronInitiator.php +4 -3
  5. src/Conversion/Directory/DirectoryFactory.php +18 -4
  6. src/Conversion/Directory/DirectoryIntegration.php +3 -3
  7. src/Conversion/Directory/GalleryDirectory.php +0 -33
  8. src/Conversion/Directory/PluginsDirectory.php +0 -33
  9. src/Conversion/Directory/SourceDirectory.php +61 -0
  10. src/Conversion/Directory/ThemesDirectory.php +0 -33
  11. src/Conversion/Directory/UploadsDirectory.php +0 -40
  12. src/Conversion/Endpoint/CronConversionEndpoint.php +7 -0
  13. src/Conversion/Endpoint/EndpointIntegration.php +1 -1
  14. src/Conversion/Endpoint/EndpointInterface.php +7 -0
  15. src/Conversion/Endpoint/ImagesCounterEndpoint.php +7 -0
  16. src/Conversion/Endpoint/PathsEndpoint.php +9 -0
  17. src/Conversion/Endpoint/RegenerateEndpoint.php +7 -0
  18. src/Conversion/Format/AvifFormat.php +1 -2
  19. src/Conversion/Media/Attachment.php +1 -1
  20. src/Conversion/Media/Upload.php +1 -1
  21. src/Conversion/Method/RemoteMethod.php +1 -1
  22. src/Conversion/PathsFinder.php +22 -14
  23. src/Error/Notice/LibsNotInstalledNotice.php +2 -4
  24. src/Error/Notice/LibsWithoutWebpSupportNotice.php +2 -4
  25. src/Error/Notice/PathUploadsUnavailableNotice.php +1 -1
  26. src/Error/Notice/PathWebpNotWritableNotice.php +1 -1
  27. src/Error/Notice/RewritesNotExecutedNotice.php +1 -1
  28. src/Error/Notice/RewritesNotWorkingNotice.php +1 -1
  29. src/Exception/FilesizeOversizeException.php +2 -1
  30. src/Plugin/Links.php +2 -4
  31. src/Service/DeactivationModalGenerator.php +1 -1
  32. src/Service/MediaStatusViewer.php +71 -14
  33. src/Settings/AdminAssets.php +4 -4
  34. src/Settings/Option/AccessTokenOption.php +3 -4
  35. src/Settings/Option/ConversionMethodOption.php +1 -2
  36. src/Settings/Option/ImageResizeOption.php +2 -3
  37. src/Settings/Option/OutputFormatsOption.php +1 -2
  38. src/Settings/Page/GeneralSettingsPage.php +1 -2
  39. src/WebpConverterConstants.php +0 -7
  40. templates/components/notices/thanks.php +1 -1
  41. templates/components/notices/welcome.php +1 -0
  42. templates/components/server/filters.php +6 -0
  43. templates/components/widgets/about.php +1 -1
  44. templates/components/widgets/regenerate.php +1 -1
  45. templates/components/widgets/server.php +3 -3
  46. templates/views/settings-debug.php +2 -2
  47. templates/views/settings.php +2 -2
  48. vendor/autoload.php +1 -1
  49. vendor/composer/autoload_classmap.php +1 -4
  50. vendor/composer/autoload_real.php +4 -4
  51. vendor/composer/autoload_static.php +5 -8
  52. vendor/composer/installed.php +2 -2
  53. webp-converter-for-media.php +3 -3
assets/build/css/styles.css CHANGED
@@ -1 +1 @@
1
- @charset "UTF-8";@keyframes dotsLoading{0%,to{content:"..."}25%{content:" .."}50%{content:". ."}75%{content:".. "}}@font-face{font-family:webpc-icomoon;font-style:normal;font-weight:400;src:url(../../fonts/icons/icomoon.eot?ver=16285166);src:url(../../fonts/icons/icomoon.woff?ver=16285166) format("woff"),url(../../fonts/icons/icomoon.eot?ver=16285166#iefix) format("embedded-opentype"),url(../../fonts/icons/icomoon.ttf?ver=16285166) format("truetype"),url(../../fonts/icons/icomoon.svg?ver=16285166#icomoon) format("svg")}.webpcPage{color:#101517;margin:0;overflow:hidden;padding:0 20px 0 0}.webpcPage *,.webpcPage :after,.webpcPage :before{box-sizing:border-box;margin:0;padding:0}.webpcPage [hidden]{display:none!important}.webpcPage__headline{background-color:#11f3af;line-height:0;margin-bottom:30px;margin-top:10px;padding:20px 30px;position:relative;width:100%;z-index:1}.webpcPage__headline img{max-width:100%}.webpcPage__headline:before{background-image:url(../../img/logo-bg.png);background-position:0 0;background-repeat:repeat;content:"";height:100%;left:0;opacity:.05;position:absolute;top:0;width:100%;z-index:-1}.webpcPage__alert{background-color:#00a32a;color:#fff;font-size:14px;line-height:1.5714285714;margin-bottom:30px;padding:15px 20px}.webpcPage__columns{margin:0 -30px;overflow:hidden}.webpcPage__column{float:left;padding:0 30px}.webpcPage__column--large{width:66.666%}.webpcPage__column--small{width:33.333%}.webpcPage__widget{background-color:#fff}.webpcPage__widget+.webpcPage__widget{margin-top:60px}.webpcPage__widget--border{border:1px solid #11f3af;border-top:0}.webpcPage__widgetTitle{border-bottom:1px solid #dcdcde;font-size:16px;font-weight:600;line-height:1.5;padding:13px 30px;position:relative;z-index:1}.webpcMenu+.webpcPage__widget .webpcPage__widgetTitle{display:none}.webpcPage__widgetTitle--error{background-color:#d63638;border-color:transparent;color:#fff;font-weight:400}.webpcPage__widgetTitle--logo{background-color:#11f3af;border-color:transparent}.webpcPage__widgetTitle--logo:before{speak:none;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;content:"\e902"!important;font-family:webpc-icomoon!important;font-size:30px;font-style:normal;font-variant:normal;font-weight:400;line-height:1;position:absolute;right:30px;text-transform:none;top:10px}.webpcPage__widgetTitle--logo:after{background-image:url(../../img/logo-bg.png);background-position:0 0;background-repeat:repeat;content:"";height:100%;left:0;opacity:.05;position:absolute;top:0;width:100%;z-index:-1}.webpcPage__widgetRow{padding-bottom:10px}.webpcPage__widgetRow:last-child{padding-bottom:0}.webpcPage__widgetRow .webpcButton{margin:10px 0}.webpcPage__widgetColumns{display:flex;flex-wrap:wrap;margin:0 -10px}.webpcPage__widgetColumn{padding:0 10px;width:50%}.webpcPage__widgetColumn:first-child:last-child{flex:1}.webpcPage__widgetNotice{background-color:#2271b1;margin:10px 0;padding:10px 20px}.webpcPage__widgetNotice p{color:#fff;font-size:1.2rem}.webpcPage__widgetNotice p+p{margin-top:0}.webpcPage__widgetNotice p a{color:inherit;font-weight:600;letter-spacing:1px;text-decoration:none;text-transform:uppercase}.webpcPage__footer{margin-top:30px}.webpcPage__footerLogo{text-align:center}.webpcPage__footerLogo:before{speak:none;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;color:#dcdcde;content:"\e902"!important;font-family:webpc-icomoon!important;font-size:50px;font-style:normal;font-variant:normal;font-weight:400;line-height:1;text-transform:none}.webpcPage__footerContent{font-size:14px;line-height:1.5714285714;padding:14px 20px;text-align:center}.webpcPage__footerIcon{display:inline-block;padding:0 3px}.webpcPage__footerIcon--heart{color:#d63638}.webpcPage__footerIcon--heart:before{speak:none;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;content:"\e901"!important;font-family:webpc-icomoon!important;font-style:normal;font-variant:normal;font-weight:400;text-transform:none}.webpcPage__footerIcon--stars{color:#f0c33c}.webpcPage__footerIcon--stars:before{content:"\e903"!important}#wp-admin-bar-webpc-menu .ab-icon:before,.webpcPage__footerIcon--stars:before{speak:none;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;font-family:webpc-icomoon!important;font-style:normal;font-variant:normal;font-weight:400;text-transform:none}#wp-admin-bar-webpc-menu .ab-icon:before{content:"\e900"!important}.notice[data-notice=webp-converter-for-media]{padding:0}.notice[data-notice=webp-converter-for-media]~.notice[data-notice=webp-converter-for-media]{display:none}.webpcButton{background-color:#fff;border:1px solid transparent;box-shadow:none!important;box-sizing:border-box;cursor:pointer;display:inline-block;font-size:14px;line-height:1.5714285714;min-width:180px;opacity:1!important;outline:none!important;padding:9px 30px;position:relative;text-align:center;text-decoration:none!important;transition:color .3s!important;z-index:10}p>.webpcButton{margin:6px 0}.webpcButton:before{float:left;font-family:dashicons;font-size:20px;line-height:1.1;margin-right:10px}.webpcButton:after{content:"";height:100%;left:0;position:absolute;top:0;transition:width .3s;width:0;z-index:-1}.webpcButton:hover:after{width:100%}.webpcButton[disabled]{opacity:.5!important;pointer-events:none}.webpcButton--blue:hover,.webpcButton--gray:hover,.webpcButton--red:hover{color:#fff!important}.webpcButton--blue{border-color:#2271b1;color:#2271b1!important}.webpcButton--blue.webpcButton--bg,.webpcButton--blue:after{background-color:#2271b1}.webpcButton--blue.webpcButton--bg:after{background-color:#135e96}.webpcButton--red{border-color:#d63638;color:#d63638!important}.webpcButton--red.webpcButton--bg,.webpcButton--red:after{background-color:#d63638}.webpcButton--red.webpcButton--bg:after{background-color:#b32d2e}.webpcButton--gray{border-color:#c3c4c7;color:#c3c4c7!important}.webpcButton--gray.webpcButton--bg,.webpcButton--gray:after{background-color:#c3c4c7}.webpcButton--gray.webpcButton--bg:after{background-color:#a7aaad}.webpcButton--bg{color:#fff!important}.webpcContent{padding:20px 30px}.webpcContent--author{background-image:url(../../img/author.png);background-position:left calc(100% - 30px);background-repeat:no-repeat;background-size:152px 152px;margin-left:20px;padding-left:172px}.webpcContent p{font-size:14px;line-height:1.5714285714;max-width:800px}.webpcContent p.center{text-align:center}.webpcContent--wide p{max-width:100%}.webpcContent a{box-shadow:none;color:#2271b1;outline:none;text-decoration:underline;transition:opacity .3s}.webpcContent a:hover{opacity:.5}.webpcContent h1,.webpcContent h2,.webpcContent h3,.webpcContent h4,.webpcContent h5,.webpcContent h6{font-size:16px;font-weight:600;line-height:1.5}.webpcContent h1,.webpcContent h2,.webpcContent h3,.webpcContent h4,.webpcContent h5,.webpcContent h6,.webpcContent p{margin:10px 0 0;padding:4px 0}.webpcContent h1:first-child,.webpcContent h2:first-child,.webpcContent h3:first-child,.webpcContent h4:first-child,.webpcContent h5:first-child,.webpcContent h6:first-child,.webpcContent p:first-child,.webpcContent p>p{margin-top:0}.webpcInput+p{background-color:#f0f0f1;margin:0 0 10px;max-width:none;padding:14px 20px}.webpcContent h1+p,.webpcContent h2+p,.webpcContent h3+p,.webpcContent h4+p,.webpcContent h5+p,.webpcContent h6+p{font-size:12px;line-height:1.75;margin-top:0}.webpcContent--notice h1+p,.webpcContent--notice h2+p,.webpcContent--notice h3+p,.webpcContent--notice h4+p,.webpcContent--notice h5+p,.webpcContent--notice h6+p{font-size:14px;line-height:1.5714285714}.webpcContent__buttons{margin-top:-10px;overflow:hidden;padding:10px 0}.webpcContent__button{float:left;margin:20px 20px 0 0}.webpcContent__button:last-child{margin-right:0}.webpcField{display:flex;padding:10px 0}.webpcField--center{align-items:center}.webpcField+.webpcField{margin-top:-12px}.webpcField__input{display:none!important}.webpcField__input+label{display:inline-block;position:relative}.webpcField__input[disabled]+label{pointer-events:none}.webpcField__input[disabled]+label:after,.webpcField__input[disabled]+label:before{opacity:.25}.webpcField__input--checkbox+label,.webpcField__input--radio+label{height:22px;width:22px}.webpcField__input--checkbox+label:after,.webpcField__input--checkbox+label:before,.webpcField__input--radio+label:after,.webpcField__input--radio+label:before{align-items:center;content:"";display:flex;height:22px;justify-content:center;left:0;position:absolute;top:0;width:22px}.webpcField__input--checkbox+label:before,.webpcField__input--radio+label:before{border:1px solid #c3c4c7}.webpcField__input--checkbox+label:after,.webpcField__input--radio+label:after{position:absolute;transform:scale(0);transition:transform .3s}.webpcField__input--checkbox:checked+label:after,.webpcField__input--radio:checked+label:after{transform:scale(1)}.webpcField__input--checkbox+label:after{color:#00a32a;content:"\f147";font-family:dashicons;font-size:20px;line-height:1}.webpcField__input--radio+label:before{border-radius:50%}.webpcField__input--radio+label:after{background-color:#00a32a;border-radius:50%;content:"";height:8px;left:7px;top:7px;width:8px}.webpcField__input--toggle+label{height:22px;width:44px}.webpcField__input--toggle+label:after,.webpcField__input--toggle+label:before{content:"";position:absolute}.webpcField__input--toggle+label:before{background-color:#dcdcde;border:1px solid #c3c4c7;border-radius:11px;height:22px;left:0;top:0;transition:background-color .3s;width:44px}.webpcField__input--toggle+label:after{background-color:#fff;border-radius:50%;height:16px;left:3px;position:absolute;top:3px;transition:transform .3s;width:16px}.webpcField__input--toggle:checked+label:before{background-color:#00a32a}.webpcField__input--toggle:checked+label:after{transform:translateX(22px)}.webpcField__label{display:block;font-size:14px;line-height:1.5714285714;max-width:650px;position:relative}.webpcField__input~.webpcField__label{margin-left:20px}.webpcInput{align-items:center;display:flex;padding:10px 0}.webpcInput__field{border:1px solid #c3c4c7!important;border-radius:0!important;box-shadow:none!important;flex:1;font-size:14px!important;line-height:1.5714285714!important;padding:9px 15px!important}.webpcInput__field--small{margin:0 10px;padding:4px 10px!important;width:80px}.webpcInput__field[readonly]{background-color:#f0f0f1}.webpcInput__button{margin:0 0 0 10px!important}.webpcLoader__columns{display:flex;justify-content:center;margin:-30px -30px 0;padding:10px 0;text-align:center}.webpcLoader__column{line-height:0;margin-top:30px;padding:0 30px}.webpcLoader__columnInner{display:inline-block;position:relative}.webpcLoader__columnInner:before{background-color:#f0f0f1;border-radius:50%;content:"";height:calc(100% - 10px);left:50%;position:absolute;top:50%;transform:translate(-50%,-50%);width:calc(100% - 10px)}.webpcLoader__columnCircle{fill:none;stroke:#00a32a;stroke-width:10px;stroke-dasharray:596.90248;stroke-dashoffset:596.90248;height:200px;transform:rotate(-90deg);transition:stroke-dashoffset 2.5s;width:200px}.webpcLoader__column[data-percent="1"] .webpcLoader__columnCircle{stroke-dashoffset:590.9334552}.webpcLoader__column[data-percent="2"] .webpcLoader__columnCircle{stroke-dashoffset:584.9644304}.webpcLoader__column[data-percent="3"] .webpcLoader__columnCircle{stroke-dashoffset:578.9954056}.webpcLoader__column[data-percent="4"] .webpcLoader__columnCircle{stroke-dashoffset:573.0263808}.webpcLoader__column[data-percent="5"] .webpcLoader__columnCircle{stroke-dashoffset:567.057356}.webpcLoader__column[data-percent="6"] .webpcLoader__columnCircle{stroke-dashoffset:561.0883312}.webpcLoader__column[data-percent="7"] .webpcLoader__columnCircle{stroke-dashoffset:555.1193064}.webpcLoader__column[data-percent="8"] .webpcLoader__columnCircle{stroke-dashoffset:549.1502816}.webpcLoader__column[data-percent="9"] .webpcLoader__columnCircle{stroke-dashoffset:543.1812568}.webpcLoader__column[data-percent="10"] .webpcLoader__columnCircle{stroke-dashoffset:537.212232}.webpcLoader__column[data-percent="11"] .webpcLoader__columnCircle{stroke-dashoffset:531.2432072}.webpcLoader__column[data-percent="12"] .webpcLoader__columnCircle{stroke-dashoffset:525.2741824}.webpcLoader__column[data-percent="13"] .webpcLoader__columnCircle{stroke-dashoffset:519.3051576}.webpcLoader__column[data-percent="14"] .webpcLoader__columnCircle{stroke-dashoffset:513.3361328}.webpcLoader__column[data-percent="15"] .webpcLoader__columnCircle{stroke-dashoffset:507.367108}.webpcLoader__column[data-percent="16"] .webpcLoader__columnCircle{stroke-dashoffset:501.3980832}.webpcLoader__column[data-percent="17"] .webpcLoader__columnCircle{stroke-dashoffset:495.4290584}.webpcLoader__column[data-percent="18"] .webpcLoader__columnCircle{stroke-dashoffset:489.4600336}.webpcLoader__column[data-percent="19"] .webpcLoader__columnCircle{stroke-dashoffset:483.4910088}.webpcLoader__column[data-percent="20"] .webpcLoader__columnCircle{stroke-dashoffset:477.521984}.webpcLoader__column[data-percent="21"] .webpcLoader__columnCircle{stroke-dashoffset:471.5529592}.webpcLoader__column[data-percent="22"] .webpcLoader__columnCircle{stroke-dashoffset:465.5839344}.webpcLoader__column[data-percent="23"] .webpcLoader__columnCircle{stroke-dashoffset:459.6149096}.webpcLoader__column[data-percent="24"] .webpcLoader__columnCircle{stroke-dashoffset:453.6458848}.webpcLoader__column[data-percent="25"] .webpcLoader__columnCircle{stroke-dashoffset:447.67686}.webpcLoader__column[data-percent="26"] .webpcLoader__columnCircle{stroke-dashoffset:441.7078352}.webpcLoader__column[data-percent="27"] .webpcLoader__columnCircle{stroke-dashoffset:435.7388104}.webpcLoader__column[data-percent="28"] .webpcLoader__columnCircle{stroke-dashoffset:429.7697856}.webpcLoader__column[data-percent="29"] .webpcLoader__columnCircle{stroke-dashoffset:423.8007608}.webpcLoader__column[data-percent="30"] .webpcLoader__columnCircle{stroke-dashoffset:417.831736}.webpcLoader__column[data-percent="31"] .webpcLoader__columnCircle{stroke-dashoffset:411.8627112}.webpcLoader__column[data-percent="32"] .webpcLoader__columnCircle{stroke-dashoffset:405.8936864}.webpcLoader__column[data-percent="33"] .webpcLoader__columnCircle{stroke-dashoffset:399.9246616}.webpcLoader__column[data-percent="34"] .webpcLoader__columnCircle{stroke-dashoffset:393.9556368}.webpcLoader__column[data-percent="35"] .webpcLoader__columnCircle{stroke-dashoffset:387.986612}.webpcLoader__column[data-percent="36"] .webpcLoader__columnCircle{stroke-dashoffset:382.0175872}.webpcLoader__column[data-percent="37"] .webpcLoader__columnCircle{stroke-dashoffset:376.0485624}.webpcLoader__column[data-percent="38"] .webpcLoader__columnCircle{stroke-dashoffset:370.0795376}.webpcLoader__column[data-percent="39"] .webpcLoader__columnCircle{stroke-dashoffset:364.1105128}.webpcLoader__column[data-percent="40"] .webpcLoader__columnCircle{stroke-dashoffset:358.141488}.webpcLoader__column[data-percent="41"] .webpcLoader__columnCircle{stroke-dashoffset:352.1724632}.webpcLoader__column[data-percent="42"] .webpcLoader__columnCircle{stroke-dashoffset:346.2034384}.webpcLoader__column[data-percent="43"] .webpcLoader__columnCircle{stroke-dashoffset:340.2344136}.webpcLoader__column[data-percent="44"] .webpcLoader__columnCircle{stroke-dashoffset:334.2653888}.webpcLoader__column[data-percent="45"] .webpcLoader__columnCircle{stroke-dashoffset:328.296364}.webpcLoader__column[data-percent="46"] .webpcLoader__columnCircle{stroke-dashoffset:322.3273392}.webpcLoader__column[data-percent="47"] .webpcLoader__columnCircle{stroke-dashoffset:316.3583144}.webpcLoader__column[data-percent="48"] .webpcLoader__columnCircle{stroke-dashoffset:310.3892896}.webpcLoader__column[data-percent="49"] .webpcLoader__columnCircle{stroke-dashoffset:304.4202648}.webpcLoader__column[data-percent="50"] .webpcLoader__columnCircle{stroke-dashoffset:298.45124}.webpcLoader__column[data-percent="51"] .webpcLoader__columnCircle{stroke-dashoffset:292.4822152}.webpcLoader__column[data-percent="52"] .webpcLoader__columnCircle{stroke-dashoffset:286.5131904}.webpcLoader__column[data-percent="53"] .webpcLoader__columnCircle{stroke-dashoffset:280.5441656}.webpcLoader__column[data-percent="54"] .webpcLoader__columnCircle{stroke-dashoffset:274.5751408}.webpcLoader__column[data-percent="55"] .webpcLoader__columnCircle{stroke-dashoffset:268.606116}.webpcLoader__column[data-percent="56"] .webpcLoader__columnCircle{stroke-dashoffset:262.6370912}.webpcLoader__column[data-percent="57"] .webpcLoader__columnCircle{stroke-dashoffset:256.6680664}.webpcLoader__column[data-percent="58"] .webpcLoader__columnCircle{stroke-dashoffset:250.6990416}.webpcLoader__column[data-percent="59"] .webpcLoader__columnCircle{stroke-dashoffset:244.7300168}.webpcLoader__column[data-percent="60"] .webpcLoader__columnCircle{stroke-dashoffset:238.760992}.webpcLoader__column[data-percent="61"] .webpcLoader__columnCircle{stroke-dashoffset:232.7919672}.webpcLoader__column[data-percent="62"] .webpcLoader__columnCircle{stroke-dashoffset:226.8229424}.webpcLoader__column[data-percent="63"] .webpcLoader__columnCircle{stroke-dashoffset:220.8539176}.webpcLoader__column[data-percent="64"] .webpcLoader__columnCircle{stroke-dashoffset:214.8848928}.webpcLoader__column[data-percent="65"] .webpcLoader__columnCircle{stroke-dashoffset:208.915868}.webpcLoader__column[data-percent="66"] .webpcLoader__columnCircle{stroke-dashoffset:202.9468432}.webpcLoader__column[data-percent="67"] .webpcLoader__columnCircle{stroke-dashoffset:196.9778184}.webpcLoader__column[data-percent="68"] .webpcLoader__columnCircle{stroke-dashoffset:191.0087936}.webpcLoader__column[data-percent="69"] .webpcLoader__columnCircle{stroke-dashoffset:185.0397688}.webpcLoader__column[data-percent="70"] .webpcLoader__columnCircle{stroke-dashoffset:179.070744}.webpcLoader__column[data-percent="71"] .webpcLoader__columnCircle{stroke-dashoffset:173.1017192}.webpcLoader__column[data-percent="72"] .webpcLoader__columnCircle{stroke-dashoffset:167.1326944}.webpcLoader__column[data-percent="73"] .webpcLoader__columnCircle{stroke-dashoffset:161.1636696}.webpcLoader__column[data-percent="74"] .webpcLoader__columnCircle{stroke-dashoffset:155.1946448}.webpcLoader__column[data-percent="75"] .webpcLoader__columnCircle{stroke-dashoffset:149.22562}.webpcLoader__column[data-percent="76"] .webpcLoader__columnCircle{stroke-dashoffset:143.2565952}.webpcLoader__column[data-percent="77"] .webpcLoader__columnCircle{stroke-dashoffset:137.2875704}.webpcLoader__column[data-percent="78"] .webpcLoader__columnCircle{stroke-dashoffset:131.3185456}.webpcLoader__column[data-percent="79"] .webpcLoader__columnCircle{stroke-dashoffset:125.3495208}.webpcLoader__column[data-percent="80"] .webpcLoader__columnCircle{stroke-dashoffset:119.380496}.webpcLoader__column[data-percent="81"] .webpcLoader__columnCircle{stroke-dashoffset:113.4114712}.webpcLoader__column[data-percent="82"] .webpcLoader__columnCircle{stroke-dashoffset:107.4424464}.webpcLoader__column[data-percent="83"] .webpcLoader__columnCircle{stroke-dashoffset:101.4734216}.webpcLoader__column[data-percent="84"] .webpcLoader__columnCircle{stroke-dashoffset:95.5043968}.webpcLoader__column[data-percent="85"] .webpcLoader__columnCircle{stroke-dashoffset:89.535372}.webpcLoader__column[data-percent="86"] .webpcLoader__columnCircle{stroke-dashoffset:83.5663472}.webpcLoader__column[data-percent="87"] .webpcLoader__columnCircle{stroke-dashoffset:77.5973224}.webpcLoader__column[data-percent="88"] .webpcLoader__columnCircle{stroke-dashoffset:71.6282976}.webpcLoader__column[data-percent="89"] .webpcLoader__columnCircle{stroke-dashoffset:65.6592728}.webpcLoader__column[data-percent="90"] .webpcLoader__columnCircle{stroke-dashoffset:59.690248}.webpcLoader__column[data-percent="91"] .webpcLoader__columnCircle{stroke-dashoffset:53.7212232}.webpcLoader__column[data-percent="92"] .webpcLoader__columnCircle{stroke-dashoffset:47.7521984}.webpcLoader__column[data-percent="93"] .webpcLoader__columnCircle{stroke-dashoffset:41.7831736}.webpcLoader__column[data-percent="94"] .webpcLoader__columnCircle{stroke-dashoffset:35.8141488}.webpcLoader__column[data-percent="95"] .webpcLoader__columnCircle{stroke-dashoffset:29.845124}.webpcLoader__column[data-percent="96"] .webpcLoader__columnCircle{stroke-dashoffset:23.8760992}.webpcLoader__column[data-percent="97"] .webpcLoader__columnCircle{stroke-dashoffset:17.9070744}.webpcLoader__column[data-percent="98"] .webpcLoader__columnCircle{stroke-dashoffset:11.9380496}.webpcLoader__column[data-percent="99"] .webpcLoader__columnCircle{stroke-dashoffset:5.9690248}.webpcLoader__column[data-percent="100"] .webpcLoader__columnCircle{stroke-dashoffset:0}.webpcLoader__columnOverlay{left:0;position:absolute;text-align:center;top:50%;transform:translateY(-50%);width:100%}.webpcLoader__columnOverlayTitle{font-size:14px;font-weight:600;line-height:1.5714285714;padding:4px 20px}.webpcLoader__columnOverlayTitle strong{display:block;font-size:24px;line-height:1.2083333333}.webpcLoader__columnOverlayDesc{font-size:14px;line-height:1.5714285714;min-height:52px;padding:4px 20px}.webpcLoader__columnOverlayDesc--active{display:none}.webpcLoader__column[data-percent] .webpcLoader__columnOverlayDesc--active{display:block}.webpcLoader__column[data-percent] .webpcLoader__columnOverlayDesc--loading{display:none}.webpcLoader__columnOverlayDesc--loading:after{animation:dotsLoading 1s linear infinite;content:"...";font-family:monospace}.webpcLoader__statusProgress--error .webpcLoader__columnOverlayDesc--loading:after,.webpcLoader__statusProgress[data-percent="100"] .webpcLoader__columnOverlayDesc--loading:after{display:none}.webpcLoader__columnDesc{font-size:14px;line-height:1.5714285714;margin-bottom:-10px;margin-top:10px;padding:4px 0;text-align:center}.webpcLoader__status{margin-top:10px;padding-top:10px}.webpcLoader__statusProgress{font-size:0;height:31px;line-height:0;margin:10px 0;position:relative}.webpcLoader__statusProgress:before{background-color:#00a32a;content:"";height:100%;left:0;position:absolute;top:0;transition:width .3s;width:0}.webpcLoader__statusProgress--error:before{background-color:#d63638}.webpcLoader__statusProgress[data-percent="0"]:before{width:0}.webpcLoader__statusProgress[data-percent="1"]:before{width:1%}.webpcLoader__statusProgress[data-percent="2"]:before{width:2%}.webpcLoader__statusProgress[data-percent="3"]:before{width:3%}.webpcLoader__statusProgress[data-percent="4"]:before{width:4%}.webpcLoader__statusProgress[data-percent="5"]:before{width:5%}.webpcLoader__statusProgress[data-percent="6"]:before{width:6%}.webpcLoader__statusProgress[data-percent="7"]:before{width:7%}.webpcLoader__statusProgress[data-percent="8"]:before{width:8%}.webpcLoader__statusProgress[data-percent="9"]:before{width:9%}.webpcLoader__statusProgress[data-percent="10"]:before{width:10%}.webpcLoader__statusProgress[data-percent="11"]:before{width:11%}.webpcLoader__statusProgress[data-percent="12"]:before{width:12%}.webpcLoader__statusProgress[data-percent="13"]:before{width:13%}.webpcLoader__statusProgress[data-percent="14"]:before{width:14%}.webpcLoader__statusProgress[data-percent="15"]:before{width:15%}.webpcLoader__statusProgress[data-percent="16"]:before{width:16%}.webpcLoader__statusProgress[data-percent="17"]:before{width:17%}.webpcLoader__statusProgress[data-percent="18"]:before{width:18%}.webpcLoader__statusProgress[data-percent="19"]:before{width:19%}.webpcLoader__statusProgress[data-percent="20"]:before{width:20%}.webpcLoader__statusProgress[data-percent="21"]:before{width:21%}.webpcLoader__statusProgress[data-percent="22"]:before{width:22%}.webpcLoader__statusProgress[data-percent="23"]:before{width:23%}.webpcLoader__statusProgress[data-percent="24"]:before{width:24%}.webpcLoader__statusProgress[data-percent="25"]:before{width:25%}.webpcLoader__statusProgress[data-percent="26"]:before{width:26%}.webpcLoader__statusProgress[data-percent="27"]:before{width:27%}.webpcLoader__statusProgress[data-percent="28"]:before{width:28%}.webpcLoader__statusProgress[data-percent="29"]:before{width:29%}.webpcLoader__statusProgress[data-percent="30"]:before{width:30%}.webpcLoader__statusProgress[data-percent="31"]:before{width:31%}.webpcLoader__statusProgress[data-percent="32"]:before{width:32%}.webpcLoader__statusProgress[data-percent="33"]:before{width:33%}.webpcLoader__statusProgress[data-percent="34"]:before{width:34%}.webpcLoader__statusProgress[data-percent="35"]:before{width:35%}.webpcLoader__statusProgress[data-percent="36"]:before{width:36%}.webpcLoader__statusProgress[data-percent="37"]:before{width:37%}.webpcLoader__statusProgress[data-percent="38"]:before{width:38%}.webpcLoader__statusProgress[data-percent="39"]:before{width:39%}.webpcLoader__statusProgress[data-percent="40"]:before{width:40%}.webpcLoader__statusProgress[data-percent="41"]:before{width:41%}.webpcLoader__statusProgress[data-percent="42"]:before{width:42%}.webpcLoader__statusProgress[data-percent="43"]:before{width:43%}.webpcLoader__statusProgress[data-percent="44"]:before{width:44%}.webpcLoader__statusProgress[data-percent="45"]:before{width:45%}.webpcLoader__statusProgress[data-percent="46"]:before{width:46%}.webpcLoader__statusProgress[data-percent="47"]:before{width:47%}.webpcLoader__statusProgress[data-percent="48"]:before{width:48%}.webpcLoader__statusProgress[data-percent="49"]:before{width:49%}.webpcLoader__statusProgress[data-percent="50"]:before{width:50%}.webpcLoader__statusProgress[data-percent="51"]:before{width:51%}.webpcLoader__statusProgress[data-percent="52"]:before{width:52%}.webpcLoader__statusProgress[data-percent="53"]:before{width:53%}.webpcLoader__statusProgress[data-percent="54"]:before{width:54%}.webpcLoader__statusProgress[data-percent="55"]:before{width:55%}.webpcLoader__statusProgress[data-percent="56"]:before{width:56%}.webpcLoader__statusProgress[data-percent="57"]:before{width:57%}.webpcLoader__statusProgress[data-percent="58"]:before{width:58%}.webpcLoader__statusProgress[data-percent="59"]:before{width:59%}.webpcLoader__statusProgress[data-percent="60"]:before{width:60%}.webpcLoader__statusProgress[data-percent="61"]:before{width:61%}.webpcLoader__statusProgress[data-percent="62"]:before{width:62%}.webpcLoader__statusProgress[data-percent="63"]:before{width:63%}.webpcLoader__statusProgress[data-percent="64"]:before{width:64%}.webpcLoader__statusProgress[data-percent="65"]:before{width:65%}.webpcLoader__statusProgress[data-percent="66"]:before{width:66%}.webpcLoader__statusProgress[data-percent="67"]:before{width:67%}.webpcLoader__statusProgress[data-percent="68"]:before{width:68%}.webpcLoader__statusProgress[data-percent="69"]:before{width:69%}.webpcLoader__statusProgress[data-percent="70"]:before{width:70%}.webpcLoader__statusProgress[data-percent="71"]:before{width:71%}.webpcLoader__statusProgress[data-percent="72"]:before{width:72%}.webpcLoader__statusProgress[data-percent="73"]:before{width:73%}.webpcLoader__statusProgress[data-percent="74"]:before{width:74%}.webpcLoader__statusProgress[data-percent="75"]:before{width:75%}.webpcLoader__statusProgress[data-percent="76"]:before{width:76%}.webpcLoader__statusProgress[data-percent="77"]:before{width:77%}.webpcLoader__statusProgress[data-percent="78"]:before{width:78%}.webpcLoader__statusProgress[data-percent="79"]:before{width:79%}.webpcLoader__statusProgress[data-percent="80"]:before{width:80%}.webpcLoader__statusProgress[data-percent="81"]:before{width:81%}.webpcLoader__statusProgress[data-percent="82"]:before{width:82%}.webpcLoader__statusProgress[data-percent="83"]:before{width:83%}.webpcLoader__statusProgress[data-percent="84"]:before{width:84%}.webpcLoader__statusProgress[data-percent="85"]:before{width:85%}.webpcLoader__statusProgress[data-percent="86"]:before{width:86%}.webpcLoader__statusProgress[data-percent="87"]:before{width:87%}.webpcLoader__statusProgress[data-percent="88"]:before{width:88%}.webpcLoader__statusProgress[data-percent="89"]:before{width:89%}.webpcLoader__statusProgress[data-percent="90"]:before{width:90%}.webpcLoader__statusProgress[data-percent="91"]:before{width:91%}.webpcLoader__statusProgress[data-percent="92"]:before{width:92%}.webpcLoader__statusProgress[data-percent="93"]:before{width:93%}.webpcLoader__statusProgress[data-percent="94"]:before{width:94%}.webpcLoader__statusProgress[data-percent="95"]:before{width:95%}.webpcLoader__statusProgress[data-percent="96"]:before{width:96%}.webpcLoader__statusProgress[data-percent="97"]:before{width:97%}.webpcLoader__statusProgress[data-percent="98"]:before{width:98%}.webpcLoader__statusProgress[data-percent="99"]:before{width:99%}.webpcLoader__statusProgress[data-percent="100"]:before{width:100%}.webpcLoader__statusProgressCount{background-color:#00a32a;color:#fff;display:inline-block;font-family:monospace;font-size:12px;line-height:1.75;padding:5px 10px;position:relative}.webpcLoader__statusProgress--error .webpcLoader__statusProgressCount{background-color:#d63638}.webpcLoader__statusProgressCount:after{animation:dotsLoading 1s linear infinite;content:"...";margin-left:5px}.webpcLoader__statusProgress--error .webpcLoader__statusProgressCount:after,.webpcLoader__statusProgress[data-percent="100"] .webpcLoader__statusProgressCount:after{display:none}.webpcLoader__statusProgress[data-percent="0"] .webpcLoader__statusProgressCount:before{content:"0%"}.webpcLoader__statusProgress[data-percent="1"] .webpcLoader__statusProgressCount:before{content:"1%"}.webpcLoader__statusProgress[data-percent="2"] .webpcLoader__statusProgressCount:before{content:"2%"}.webpcLoader__statusProgress[data-percent="3"] .webpcLoader__statusProgressCount:before{content:"3%"}.webpcLoader__statusProgress[data-percent="4"] .webpcLoader__statusProgressCount:before{content:"4%"}.webpcLoader__statusProgress[data-percent="5"] .webpcLoader__statusProgressCount:before{content:"5%"}.webpcLoader__statusProgress[data-percent="6"] .webpcLoader__statusProgressCount:before{content:"6%"}.webpcLoader__statusProgress[data-percent="7"] .webpcLoader__statusProgressCount:before{content:"7%"}.webpcLoader__statusProgress[data-percent="8"] .webpcLoader__statusProgressCount:before{content:"8%"}.webpcLoader__statusProgress[data-percent="9"] .webpcLoader__statusProgressCount:before{content:"9%"}.webpcLoader__statusProgress[data-percent="10"] .webpcLoader__statusProgressCount:before{content:"10%"}.webpcLoader__statusProgress[data-percent="11"] .webpcLoader__statusProgressCount:before{content:"11%"}.webpcLoader__statusProgress[data-percent="12"] .webpcLoader__statusProgressCount:before{content:"12%"}.webpcLoader__statusProgress[data-percent="13"] .webpcLoader__statusProgressCount:before{content:"13%"}.webpcLoader__statusProgress[data-percent="14"] .webpcLoader__statusProgressCount:before{content:"14%"}.webpcLoader__statusProgress[data-percent="15"] .webpcLoader__statusProgressCount:before{content:"15%"}.webpcLoader__statusProgress[data-percent="16"] .webpcLoader__statusProgressCount:before{content:"16%"}.webpcLoader__statusProgress[data-percent="17"] .webpcLoader__statusProgressCount:before{content:"17%"}.webpcLoader__statusProgress[data-percent="18"] .webpcLoader__statusProgressCount:before{content:"18%"}.webpcLoader__statusProgress[data-percent="19"] .webpcLoader__statusProgressCount:before{content:"19%"}.webpcLoader__statusProgress[data-percent="20"] .webpcLoader__statusProgressCount:before{content:"20%"}.webpcLoader__statusProgress[data-percent="21"] .webpcLoader__statusProgressCount:before{content:"21%"}.webpcLoader__statusProgress[data-percent="22"] .webpcLoader__statusProgressCount:before{content:"22%"}.webpcLoader__statusProgress[data-percent="23"] .webpcLoader__statusProgressCount:before{content:"23%"}.webpcLoader__statusProgress[data-percent="24"] .webpcLoader__statusProgressCount:before{content:"24%"}.webpcLoader__statusProgress[data-percent="25"] .webpcLoader__statusProgressCount:before{content:"25%"}.webpcLoader__statusProgress[data-percent="26"] .webpcLoader__statusProgressCount:before{content:"26%"}.webpcLoader__statusProgress[data-percent="27"] .webpcLoader__statusProgressCount:before{content:"27%"}.webpcLoader__statusProgress[data-percent="28"] .webpcLoader__statusProgressCount:before{content:"28%"}.webpcLoader__statusProgress[data-percent="29"] .webpcLoader__statusProgressCount:before{content:"29%"}.webpcLoader__statusProgress[data-percent="30"] .webpcLoader__statusProgressCount:before{content:"30%"}.webpcLoader__statusProgress[data-percent="31"] .webpcLoader__statusProgressCount:before{content:"31%"}.webpcLoader__statusProgress[data-percent="32"] .webpcLoader__statusProgressCount:before{content:"32%"}.webpcLoader__statusProgress[data-percent="33"] .webpcLoader__statusProgressCount:before{content:"33%"}.webpcLoader__statusProgress[data-percent="34"] .webpcLoader__statusProgressCount:before{content:"34%"}.webpcLoader__statusProgress[data-percent="35"] .webpcLoader__statusProgressCount:before{content:"35%"}.webpcLoader__statusProgress[data-percent="36"] .webpcLoader__statusProgressCount:before{content:"36%"}.webpcLoader__statusProgress[data-percent="37"] .webpcLoader__statusProgressCount:before{content:"37%"}.webpcLoader__statusProgress[data-percent="38"] .webpcLoader__statusProgressCount:before{content:"38%"}.webpcLoader__statusProgress[data-percent="39"] .webpcLoader__statusProgressCount:before{content:"39%"}.webpcLoader__statusProgress[data-percent="40"] .webpcLoader__statusProgressCount:before{content:"40%"}.webpcLoader__statusProgress[data-percent="41"] .webpcLoader__statusProgressCount:before{content:"41%"}.webpcLoader__statusProgress[data-percent="42"] .webpcLoader__statusProgressCount:before{content:"42%"}.webpcLoader__statusProgress[data-percent="43"] .webpcLoader__statusProgressCount:before{content:"43%"}.webpcLoader__statusProgress[data-percent="44"] .webpcLoader__statusProgressCount:before{content:"44%"}.webpcLoader__statusProgress[data-percent="45"] .webpcLoader__statusProgressCount:before{content:"45%"}.webpcLoader__statusProgress[data-percent="46"] .webpcLoader__statusProgressCount:before{content:"46%"}.webpcLoader__statusProgress[data-percent="47"] .webpcLoader__statusProgressCount:before{content:"47%"}.webpcLoader__statusProgress[data-percent="48"] .webpcLoader__statusProgressCount:before{content:"48%"}.webpcLoader__statusProgress[data-percent="49"] .webpcLoader__statusProgressCount:before{content:"49%"}.webpcLoader__statusProgress[data-percent="50"] .webpcLoader__statusProgressCount:before{content:"50%"}.webpcLoader__statusProgress[data-percent="51"] .webpcLoader__statusProgressCount:before{content:"51%"}.webpcLoader__statusProgress[data-percent="52"] .webpcLoader__statusProgressCount:before{content:"52%"}.webpcLoader__statusProgress[data-percent="53"] .webpcLoader__statusProgressCount:before{content:"53%"}.webpcLoader__statusProgress[data-percent="54"] .webpcLoader__statusProgressCount:before{content:"54%"}.webpcLoader__statusProgress[data-percent="55"] .webpcLoader__statusProgressCount:before{content:"55%"}.webpcLoader__statusProgress[data-percent="56"] .webpcLoader__statusProgressCount:before{content:"56%"}.webpcLoader__statusProgress[data-percent="57"] .webpcLoader__statusProgressCount:before{content:"57%"}.webpcLoader__statusProgress[data-percent="58"] .webpcLoader__statusProgressCount:before{content:"58%"}.webpcLoader__statusProgress[data-percent="59"] .webpcLoader__statusProgressCount:before{content:"59%"}.webpcLoader__statusProgress[data-percent="60"] .webpcLoader__statusProgressCount:before{content:"60%"}.webpcLoader__statusProgress[data-percent="61"] .webpcLoader__statusProgressCount:before{content:"61%"}.webpcLoader__statusProgress[data-percent="62"] .webpcLoader__statusProgressCount:before{content:"62%"}.webpcLoader__statusProgress[data-percent="63"] .webpcLoader__statusProgressCount:before{content:"63%"}.webpcLoader__statusProgress[data-percent="64"] .webpcLoader__statusProgressCount:before{content:"64%"}.webpcLoader__statusProgress[data-percent="65"] .webpcLoader__statusProgressCount:before{content:"65%"}.webpcLoader__statusProgress[data-percent="66"] .webpcLoader__statusProgressCount:before{content:"66%"}.webpcLoader__statusProgress[data-percent="67"] .webpcLoader__statusProgressCount:before{content:"67%"}.webpcLoader__statusProgress[data-percent="68"] .webpcLoader__statusProgressCount:before{content:"68%"}.webpcLoader__statusProgress[data-percent="69"] .webpcLoader__statusProgressCount:before{content:"69%"}.webpcLoader__statusProgress[data-percent="70"] .webpcLoader__statusProgressCount:before{content:"70%"}.webpcLoader__statusProgress[data-percent="71"] .webpcLoader__statusProgressCount:before{content:"71%"}.webpcLoader__statusProgress[data-percent="72"] .webpcLoader__statusProgressCount:before{content:"72%"}.webpcLoader__statusProgress[data-percent="73"] .webpcLoader__statusProgressCount:before{content:"73%"}.webpcLoader__statusProgress[data-percent="74"] .webpcLoader__statusProgressCount:before{content:"74%"}.webpcLoader__statusProgress[data-percent="75"] .webpcLoader__statusProgressCount:before{content:"75%"}.webpcLoader__statusProgress[data-percent="76"] .webpcLoader__statusProgressCount:before{content:"76%"}.webpcLoader__statusProgress[data-percent="77"] .webpcLoader__statusProgressCount:before{content:"77%"}.webpcLoader__statusProgress[data-percent="78"] .webpcLoader__statusProgressCount:before{content:"78%"}.webpcLoader__statusProgress[data-percent="79"] .webpcLoader__statusProgressCount:before{content:"79%"}.webpcLoader__statusProgress[data-percent="80"] .webpcLoader__statusProgressCount:before{content:"80%"}.webpcLoader__statusProgress[data-percent="81"] .webpcLoader__statusProgressCount:before{content:"81%"}.webpcLoader__statusProgress[data-percent="82"] .webpcLoader__statusProgressCount:before{content:"82%"}.webpcLoader__statusProgress[data-percent="83"] .webpcLoader__statusProgressCount:before{content:"83%"}.webpcLoader__statusProgress[data-percent="84"] .webpcLoader__statusProgressCount:before{content:"84%"}.webpcLoader__statusProgress[data-percent="85"] .webpcLoader__statusProgressCount:before{content:"85%"}.webpcLoader__statusProgress[data-percent="86"] .webpcLoader__statusProgressCount:before{content:"86%"}.webpcLoader__statusProgress[data-percent="87"] .webpcLoader__statusProgressCount:before{content:"87%"}.webpcLoader__statusProgress[data-percent="88"] .webpcLoader__statusProgressCount:before{content:"88%"}.webpcLoader__statusProgress[data-percent="89"] .webpcLoader__statusProgressCount:before{content:"89%"}.webpcLoader__statusProgress[data-percent="90"] .webpcLoader__statusProgressCount:before{content:"90%"}.webpcLoader__statusProgress[data-percent="91"] .webpcLoader__statusProgressCount:before{content:"91%"}.webpcLoader__statusProgress[data-percent="92"] .webpcLoader__statusProgressCount:before{content:"92%"}.webpcLoader__statusProgress[data-percent="93"] .webpcLoader__statusProgressCount:before{content:"93%"}.webpcLoader__statusProgress[data-percent="94"] .webpcLoader__statusProgressCount:before{content:"94%"}.webpcLoader__statusProgress[data-percent="95"] .webpcLoader__statusProgressCount:before{content:"95%"}.webpcLoader__statusProgress[data-percent="96"] .webpcLoader__statusProgressCount:before{content:"96%"}.webpcLoader__statusProgress[data-percent="97"] .webpcLoader__statusProgressCount:before{content:"97%"}.webpcLoader__statusProgress[data-percent="98"] .webpcLoader__statusProgressCount:before{content:"98%"}.webpcLoader__statusProgress[data-percent="99"] .webpcLoader__statusProgressCount:before{content:"99%"}.webpcLoader__statusProgress[data-percent="100"] .webpcLoader__statusProgressCount:before{content:"100%"}.webpcLoader__statusContent{font-size:14px;line-height:1.5714285714;max-width:800px;padding:4px 0}.webpcLoader__statusContent--small{font-size:12px;line-height:1.75}.webpcLoader__statusContent strong{font-weight:600}.webpcLoader__success{padding:10px 0}.webpcLoader__successInner{border-left:2px solid #00a32a;padding:0 20px}.webpcLoader__successContent{color:#00a32a;font-size:14px;font-weight:600;line-height:1.5714285714;padding:4px 0}.webpcLoader__successContent a{color:inherit}.webpcLoader__errors{margin-top:10px;padding:10px 0}.webpcLoader__errorsInner{border-left:2px solid #c3c4c7}.webpcLoader__errorsTitle{background-color:#c3c4c7;color:#fff;display:inline-block;font-size:14px;line-height:1.5714285714;padding:4px 20px}.webpcLoader__errorsContent{padding:10px 0 10px 20px}.webpcLoader__errorsContent>p{font-size:12px;line-height:1.75;margin:0;max-width:100%}.webpcLoader__errorsContent>p.webpcLoader__errorsContentError{color:#d63638;font-size:14px;font-weight:600;line-height:1.5714285714}.webpcLoader__errorsContent pre{font-size:12px;line-height:1.75;white-space:normal}.webpcLoader__button--disabled{opacity:.25!important;pointer-events:none}.webpcMenu{margin-top:30px}.webpcMenu:first-child{margin-top:0}.webpcMenu__wrapper{border-bottom:1px solid #dcdcde}.webpcMenu__items{display:flex;font-size:0}.webpcMenu__itemLink{box-shadow:none!important;display:block;font-size:16px;line-height:1.5;outline:none!important;padding:13px 30px;text-align:center;text-decoration:none!important;transition:color .3s}.webpcMenu__itemLink:focus,.webpcMenu__itemLink:hover{color:rgba(34,113,177,.5)}.webpcMenu__itemLink--active{background-color:#fff;color:#101517;font-weight:600}.webpcMenu__itemLink--active:focus,.webpcMenu__itemLink--active:hover{color:inherit}.webpcPopup{margin-top:20px}.webpcPopup__inner{background-color:#fff;border:1px solid #c3c4c7;display:flex;flex-wrap:wrap}.webpcPopup__image{background-image:url(../../img/author.png);background-position:50%;background-repeat:no-repeat;background-size:cover;width:152px}.webpcPopup__content{border-left:1px solid #c3c4c7;flex:1;padding:10px 20px}.webpcQuality__items{display:flex;flex-wrap:wrap;justify-content:space-between}.webpcQuality__item{display:flex;flex:1;justify-content:center;position:relative}.webpcQuality__item:before{background-color:#c3c4c7;content:"";height:1px;left:0;position:absolute;top:50%;width:100%}.webpcQuality__item:first-child:before{left:50%}.webpcQuality__item:last-child:before{width:50%}.webpcQuality__itemInput{display:none!important}.webpcQuality__itemLabel{display:block;height:42px;position:relative;width:42px}.webpcQuality__itemLabel:after,.webpcQuality__itemLabel:before{border-radius:50%;content:"";height:22px;position:absolute;width:22px}.webpcQuality__itemLabel:before{background-color:#fff;border:1px solid #c3c4c7;left:10px;top:10px}.webpcQuality__itemLabel:after{background-color:#00a32a;height:8px;left:17px;top:17px;transform:scale(0);transition:transform .3s;width:8px}.webpcQuality__itemInput:checked+.webpcQuality__itemLabel:after{transform:scale(1)}.webpcQuality__texts{display:flex;flex-wrap:wrap}.webpcQuality__text{flex:1;font-size:12px;line-height:1.75;padding:4px 0;text-align:center}.webpcQuality__text strong{font-size:14px;line-height:1.5714285714}.webpcServerInfo{color:#222;text-align:center}.webpcServerInfo pre{font-family:monospace;margin:0}.webpcServerInfo h1,.webpcServerInfo h2{display:none}.webpcServerInfo p{max-width:100%}.webpcServerInfo table{border:0;border-collapse:collapse;margin:10px auto;width:100%}.webpcServerInfo td,.webpcServerInfo th{border:1px solid #666;font-family:monospace;font-size:12px;line-height:1.75;padding:4px 5px;text-align:center;vertical-align:baseline}.webpcServerInfo .p{text-align:left}.webpcServerInfo .e{background-color:#ccf;font-weight:700;width:300px}.webpcServerInfo .h{background-color:#99c;font-weight:700}.webpcServerInfo .v{word-wrap:break-word;background-color:#ddd;max-width:300px;overflow-x:auto}.webpcServerInfo .v i{color:#999}.webpcServerInfo img{border:0;float:right}@media screen and (max-width:1600px){.webpcPage__columns{margin:0 -15px}.webpcPage__column{padding:0 15px}.webpcPage__widget+.webpcPage__widget{margin-top:30px}}@media screen and (max-width:1279px){.webpcPage__column--large{width:100%}.webpcPage__column--small{margin-top:30px;width:100%}}@media screen and (max-width:1024px){.webpcPage__widgetColumns{display:block}.webpcPage__widgetColumn{width:100%}}@media screen and (max-width:782px){.webpcPage{padding-right:0}.webpcContent--author{background:none;margin-left:0;padding-left:30px}.webpcInput{display:block}.webpcInput__field{width:100%}.webpcInput__field--small{width:calc(100% - 20px)}.webpcInput__button{margin:10px 0 0!important}.webpcLoader__columns,.webpcMenu__items{display:block}.webpcPopup__inner{border:1px solid #c3c4c7;display:block}.webpcPopup__image{height:152px;margin:20px auto 0}.webpcPopup__content{border-left:0}}
1
+ @charset "UTF-8";@keyframes dotsLoading{0%,to{content:"..."}25%{content:" .."}50%{content:". ."}75%{content:".. "}}@font-face{font-family:webpc-icomoon;font-style:normal;font-weight:400;src:url(../../fonts/icons/icomoon.eot?ver=17376431);src:url(../../fonts/icons/icomoon.woff?ver=17376431) format("woff"),url(../../fonts/icons/icomoon.eot?ver=17376431#iefix) format("embedded-opentype"),url(../../fonts/icons/icomoon.ttf?ver=17376431) format("truetype"),url(../../fonts/icons/icomoon.svg?ver=17376431#icomoon) format("svg")}.webpcPage{color:#101517;margin:0;overflow:hidden;padding:0 20px 0 0}.webpcPage *,.webpcPage :after,.webpcPage :before{box-sizing:border-box;margin:0;padding:0}.webpcPage [hidden]{display:none!important}.webpcPage__headline{background-color:#11f3af;line-height:0;margin-bottom:30px;margin-top:10px;padding:20px 30px;position:relative;width:100%;z-index:1}.webpcPage__headline img{max-width:100%}.webpcPage__headline:before{background-image:url(../../img/logo-bg.png);background-position:0 0;background-repeat:repeat;content:"";height:100%;left:0;opacity:.05;position:absolute;top:0;width:100%;z-index:-1}.webpcPage__alert{background-color:#00a32a;color:#fff;font-size:14px;line-height:1.5714285714;margin-bottom:30px;padding:15px 20px}.webpcPage__columns{margin:0 -30px;overflow:hidden}.webpcPage__column{float:left;padding:0 30px}.webpcPage__column--large{width:66.666%}.webpcPage__column--small{width:33.333%}.webpcPage__widget{background-color:#fff}.webpcPage__widget+.webpcPage__widget{margin-top:60px}.webpcPage__widget--border{border:1px solid #11f3af;border-top:0}.webpcPage__widgetTitle{border-bottom:1px solid #dcdcde;font-size:16px;font-weight:600;line-height:1.5;padding:13px 30px;position:relative;z-index:1}.webpcMenu+.webpcPage__widget .webpcPage__widgetTitle{display:none}.webpcPage__widgetTitle--error{background-color:#d63638;border-color:transparent;color:#fff;font-weight:400}.webpcPage__widgetTitle--logo{background-color:#11f3af;border-color:transparent}.webpcPage__widgetTitle--logo:before{speak:none;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;content:"\e902"!important;font-family:webpc-icomoon!important;font-size:30px;font-style:normal;font-variant:normal;font-weight:400;line-height:1;position:absolute;right:30px;text-transform:none;top:10px}.webpcPage__widgetTitle--logo:after{background-image:url(../../img/logo-bg.png);background-position:0 0;background-repeat:repeat;content:"";height:100%;left:0;opacity:.05;position:absolute;top:0;width:100%;z-index:-1}.webpcPage__widgetRow{padding-bottom:10px}.webpcPage__widgetRow:last-child{padding-bottom:0}.webpcPage__widgetRow .webpcButton{margin:10px 0}.webpcPage__widgetColumns{display:flex;flex-wrap:wrap;margin:0 -10px}.webpcPage__widgetColumn{padding:0 10px;width:50%}.webpcPage__widgetColumn:first-child:last-child{flex:1}.webpcPage__widgetNotice{background-color:#2271b1;margin:10px 0;padding:10px 20px}.webpcPage__widgetNotice p{color:#fff;font-size:1.2rem}.webpcPage__widgetNotice p+p{margin-top:0}.webpcPage__widgetNotice p a{color:inherit;font-weight:600;letter-spacing:1px;text-decoration:none;text-transform:uppercase}.webpcPage__footer{margin-top:30px}.webpcPage__footerLogo{text-align:center}.webpcPage__footerLogo:before{speak:none;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;color:#dcdcde;content:"\e902"!important;font-family:webpc-icomoon!important;font-size:50px;font-style:normal;font-variant:normal;font-weight:400;line-height:1;text-transform:none}.webpcPage__footerContent{font-size:14px;line-height:1.5714285714;padding:14px 20px;text-align:center}.webpcPage__footerIcon{display:inline-block;padding:0 3px}.webpcPage__footerIcon--heart{color:#d63638}.webpcPage__footerIcon--heart:before{speak:none;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;content:"\e901"!important;font-family:webpc-icomoon!important;font-style:normal;font-variant:normal;font-weight:400;text-transform:none}.webpcPage__footerIcon--stars{color:#f0c33c}.webpcPage__footerIcon--stars:before{content:"\e903"!important}#wp-admin-bar-webpc-menu .ab-icon:before,.webpcPage__footerIcon--stars:before{speak:none;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;font-family:webpc-icomoon!important;font-style:normal;font-variant:normal;font-weight:400;text-transform:none}#wp-admin-bar-webpc-menu .ab-icon:before{content:"\e900"!important}.notice[data-notice=webp-converter-for-media]{padding:0}.notice[data-notice=webp-converter-for-media]~.notice[data-notice=webp-converter-for-media]{display:none}.webpcButton{background-color:#fff;border:1px solid transparent;box-shadow:none!important;box-sizing:border-box;cursor:pointer;display:inline-block;font-size:14px;line-height:1.5714285714;min-width:180px;opacity:1!important;outline:none!important;padding:9px 30px;position:relative;text-align:center;text-decoration:none!important;transition:color .3s!important;z-index:10}p>.webpcButton{margin:6px 0}.webpcButton:before{float:left;font-family:dashicons;font-size:20px;line-height:1.1;margin-right:10px}.webpcButton:after{content:"";height:100%;left:0;position:absolute;top:0;transition:width .3s;width:0;z-index:-1}.webpcButton:hover:after{width:100%}.webpcButton[disabled]{opacity:.5!important;pointer-events:none}.webpcButton--blue:hover,.webpcButton--gray:hover,.webpcButton--red:hover{color:#fff!important}.webpcButton--blue{border-color:#2271b1;color:#2271b1!important}.webpcButton--blue.webpcButton--bg,.webpcButton--blue:after{background-color:#2271b1}.webpcButton--blue.webpcButton--bg:after{background-color:#135e96}.webpcButton--red{border-color:#d63638;color:#d63638!important}.webpcButton--red.webpcButton--bg,.webpcButton--red:after{background-color:#d63638}.webpcButton--red.webpcButton--bg:after{background-color:#b32d2e}.webpcButton--gray{border-color:#c3c4c7;color:#c3c4c7!important}.webpcButton--gray.webpcButton--bg,.webpcButton--gray:after{background-color:#c3c4c7}.webpcButton--gray.webpcButton--bg:after{background-color:#a7aaad}.webpcButton--bg{color:#fff!important}.webpcContent{padding:20px 30px}.webpcContent--author{background-image:url(../../img/author.png);background-position:left calc(100% - 30px);background-repeat:no-repeat;background-size:152px 152px;margin-left:20px;padding-left:172px}.webpcContent p{font-size:14px;line-height:1.5714285714;max-width:800px}.webpcContent p.center{text-align:center}.webpcContent--wide p{max-width:100%}.webpcContent a{box-shadow:none;color:#2271b1;outline:none;text-decoration:underline;transition:opacity .3s}.webpcContent a:hover{opacity:.5}.webpcContent h1,.webpcContent h2,.webpcContent h3,.webpcContent h4,.webpcContent h5,.webpcContent h6{font-size:16px;font-weight:600;line-height:1.5}.webpcContent h1,.webpcContent h2,.webpcContent h3,.webpcContent h4,.webpcContent h5,.webpcContent h6,.webpcContent p{margin:10px 0 0;padding:4px 0}.webpcContent h1:first-child,.webpcContent h2:first-child,.webpcContent h3:first-child,.webpcContent h4:first-child,.webpcContent h5:first-child,.webpcContent h6:first-child,.webpcContent p:first-child,.webpcContent p>p{margin-top:0}.webpcInput+p{background-color:#f0f0f1;margin:0 0 10px;max-width:none;padding:14px 20px}.webpcContent h1+p,.webpcContent h2+p,.webpcContent h3+p,.webpcContent h4+p,.webpcContent h5+p,.webpcContent h6+p{font-size:12px;line-height:1.75;margin-top:0}.webpcContent--notice{position:relative;z-index:1}.webpcContent--notice h1+p,.webpcContent--notice h2+p,.webpcContent--notice h3+p,.webpcContent--notice h4+p,.webpcContent--notice h5+p,.webpcContent--notice h6+p{font-size:14px;line-height:1.5714285714}.webpcContent--notice img{bottom:30px;display:block;position:absolute;right:30px;z-index:-1}.webpcContent__buttons{margin-top:-10px;overflow:hidden;padding:10px 0}.webpcContent__button{float:left;margin:20px 20px 0 0}.webpcContent__button:last-child{margin-right:0}.webpcField{display:flex;padding:10px 0}.webpcField--center{align-items:center}.webpcField+.webpcField{margin-top:-12px}.webpcField__input{display:none!important}.webpcField__input+label{display:inline-block;position:relative}.webpcField__input[disabled]+label{pointer-events:none}.webpcField__input[disabled]+label:after,.webpcField__input[disabled]+label:before{opacity:.25}.webpcField__input--checkbox+label,.webpcField__input--radio+label{height:22px;width:22px}.webpcField__input--checkbox+label:after,.webpcField__input--checkbox+label:before,.webpcField__input--radio+label:after,.webpcField__input--radio+label:before{align-items:center;content:"";display:flex;height:22px;justify-content:center;left:0;position:absolute;top:0;width:22px}.webpcField__input--checkbox+label:before,.webpcField__input--radio+label:before{border:1px solid #c3c4c7}.webpcField__input--checkbox+label:after,.webpcField__input--radio+label:after{position:absolute;transform:scale(0);transition:transform .3s}.webpcField__input--checkbox:checked+label:after,.webpcField__input--radio:checked+label:after{transform:scale(1)}.webpcField__input--checkbox+label:after{color:#00a32a;content:"\f147";font-family:dashicons;font-size:20px;line-height:1}.webpcField__input--radio+label:before{border-radius:50%}.webpcField__input--radio+label:after{background-color:#00a32a;border-radius:50%;content:"";height:8px;left:7px;top:7px;width:8px}.webpcField__input--toggle+label{height:22px;width:44px}.webpcField__input--toggle+label:after,.webpcField__input--toggle+label:before{content:"";position:absolute}.webpcField__input--toggle+label:before{background-color:#dcdcde;border:1px solid #c3c4c7;border-radius:11px;height:22px;left:0;top:0;transition:background-color .3s;width:44px}.webpcField__input--toggle+label:after{background-color:#fff;border-radius:50%;height:16px;left:3px;position:absolute;top:3px;transition:transform .3s;width:16px}.webpcField__input--toggle:checked+label:before{background-color:#00a32a}.webpcField__input--toggle:checked+label:after{transform:translateX(22px)}.webpcField__label{display:block;font-size:14px;line-height:1.5714285714;max-width:650px;position:relative}.webpcField__input~.webpcField__label{margin-left:20px}.webpcInput{align-items:center;display:flex;padding:10px 0}.webpcInput__field{border:1px solid #c3c4c7!important;border-radius:0!important;box-shadow:none!important;flex:1;font-size:14px!important;line-height:1.5714285714!important;padding:9px 15px!important}.webpcInput__field--small{margin:0 10px;padding:4px 10px!important;width:80px}.webpcInput__field[readonly]{background-color:#f0f0f1}.webpcInput__button{margin:0 0 0 10px!important}.webpcLoader__columns{display:flex;justify-content:center;margin:-30px -30px 0;padding:10px 0;text-align:center}.webpcLoader__column{line-height:0;margin-top:30px;padding:0 30px}.webpcLoader__columnInner{display:inline-block;position:relative}.webpcLoader__columnInner:before{background-color:#f0f0f1;border-radius:50%;content:"";height:calc(100% - 10px);left:50%;position:absolute;top:50%;transform:translate(-50%,-50%);width:calc(100% - 10px)}.webpcLoader__columnCircle{fill:none;stroke:#00a32a;stroke-width:10px;stroke-dasharray:596.90248;stroke-dashoffset:596.90248;height:200px;transform:rotate(-90deg);transition:stroke-dashoffset 2.5s;width:200px}.webpcLoader__column[data-percent="1"] .webpcLoader__columnCircle{stroke-dashoffset:590.9334552}.webpcLoader__column[data-percent="2"] .webpcLoader__columnCircle{stroke-dashoffset:584.9644304}.webpcLoader__column[data-percent="3"] .webpcLoader__columnCircle{stroke-dashoffset:578.9954056}.webpcLoader__column[data-percent="4"] .webpcLoader__columnCircle{stroke-dashoffset:573.0263808}.webpcLoader__column[data-percent="5"] .webpcLoader__columnCircle{stroke-dashoffset:567.057356}.webpcLoader__column[data-percent="6"] .webpcLoader__columnCircle{stroke-dashoffset:561.0883312}.webpcLoader__column[data-percent="7"] .webpcLoader__columnCircle{stroke-dashoffset:555.1193064}.webpcLoader__column[data-percent="8"] .webpcLoader__columnCircle{stroke-dashoffset:549.1502816}.webpcLoader__column[data-percent="9"] .webpcLoader__columnCircle{stroke-dashoffset:543.1812568}.webpcLoader__column[data-percent="10"] .webpcLoader__columnCircle{stroke-dashoffset:537.212232}.webpcLoader__column[data-percent="11"] .webpcLoader__columnCircle{stroke-dashoffset:531.2432072}.webpcLoader__column[data-percent="12"] .webpcLoader__columnCircle{stroke-dashoffset:525.2741824}.webpcLoader__column[data-percent="13"] .webpcLoader__columnCircle{stroke-dashoffset:519.3051576}.webpcLoader__column[data-percent="14"] .webpcLoader__columnCircle{stroke-dashoffset:513.3361328}.webpcLoader__column[data-percent="15"] .webpcLoader__columnCircle{stroke-dashoffset:507.367108}.webpcLoader__column[data-percent="16"] .webpcLoader__columnCircle{stroke-dashoffset:501.3980832}.webpcLoader__column[data-percent="17"] .webpcLoader__columnCircle{stroke-dashoffset:495.4290584}.webpcLoader__column[data-percent="18"] .webpcLoader__columnCircle{stroke-dashoffset:489.4600336}.webpcLoader__column[data-percent="19"] .webpcLoader__columnCircle{stroke-dashoffset:483.4910088}.webpcLoader__column[data-percent="20"] .webpcLoader__columnCircle{stroke-dashoffset:477.521984}.webpcLoader__column[data-percent="21"] .webpcLoader__columnCircle{stroke-dashoffset:471.5529592}.webpcLoader__column[data-percent="22"] .webpcLoader__columnCircle{stroke-dashoffset:465.5839344}.webpcLoader__column[data-percent="23"] .webpcLoader__columnCircle{stroke-dashoffset:459.6149096}.webpcLoader__column[data-percent="24"] .webpcLoader__columnCircle{stroke-dashoffset:453.6458848}.webpcLoader__column[data-percent="25"] .webpcLoader__columnCircle{stroke-dashoffset:447.67686}.webpcLoader__column[data-percent="26"] .webpcLoader__columnCircle{stroke-dashoffset:441.7078352}.webpcLoader__column[data-percent="27"] .webpcLoader__columnCircle{stroke-dashoffset:435.7388104}.webpcLoader__column[data-percent="28"] .webpcLoader__columnCircle{stroke-dashoffset:429.7697856}.webpcLoader__column[data-percent="29"] .webpcLoader__columnCircle{stroke-dashoffset:423.8007608}.webpcLoader__column[data-percent="30"] .webpcLoader__columnCircle{stroke-dashoffset:417.831736}.webpcLoader__column[data-percent="31"] .webpcLoader__columnCircle{stroke-dashoffset:411.8627112}.webpcLoader__column[data-percent="32"] .webpcLoader__columnCircle{stroke-dashoffset:405.8936864}.webpcLoader__column[data-percent="33"] .webpcLoader__columnCircle{stroke-dashoffset:399.9246616}.webpcLoader__column[data-percent="34"] .webpcLoader__columnCircle{stroke-dashoffset:393.9556368}.webpcLoader__column[data-percent="35"] .webpcLoader__columnCircle{stroke-dashoffset:387.986612}.webpcLoader__column[data-percent="36"] .webpcLoader__columnCircle{stroke-dashoffset:382.0175872}.webpcLoader__column[data-percent="37"] .webpcLoader__columnCircle{stroke-dashoffset:376.0485624}.webpcLoader__column[data-percent="38"] .webpcLoader__columnCircle{stroke-dashoffset:370.0795376}.webpcLoader__column[data-percent="39"] .webpcLoader__columnCircle{stroke-dashoffset:364.1105128}.webpcLoader__column[data-percent="40"] .webpcLoader__columnCircle{stroke-dashoffset:358.141488}.webpcLoader__column[data-percent="41"] .webpcLoader__columnCircle{stroke-dashoffset:352.1724632}.webpcLoader__column[data-percent="42"] .webpcLoader__columnCircle{stroke-dashoffset:346.2034384}.webpcLoader__column[data-percent="43"] .webpcLoader__columnCircle{stroke-dashoffset:340.2344136}.webpcLoader__column[data-percent="44"] .webpcLoader__columnCircle{stroke-dashoffset:334.2653888}.webpcLoader__column[data-percent="45"] .webpcLoader__columnCircle{stroke-dashoffset:328.296364}.webpcLoader__column[data-percent="46"] .webpcLoader__columnCircle{stroke-dashoffset:322.3273392}.webpcLoader__column[data-percent="47"] .webpcLoader__columnCircle{stroke-dashoffset:316.3583144}.webpcLoader__column[data-percent="48"] .webpcLoader__columnCircle{stroke-dashoffset:310.3892896}.webpcLoader__column[data-percent="49"] .webpcLoader__columnCircle{stroke-dashoffset:304.4202648}.webpcLoader__column[data-percent="50"] .webpcLoader__columnCircle{stroke-dashoffset:298.45124}.webpcLoader__column[data-percent="51"] .webpcLoader__columnCircle{stroke-dashoffset:292.4822152}.webpcLoader__column[data-percent="52"] .webpcLoader__columnCircle{stroke-dashoffset:286.5131904}.webpcLoader__column[data-percent="53"] .webpcLoader__columnCircle{stroke-dashoffset:280.5441656}.webpcLoader__column[data-percent="54"] .webpcLoader__columnCircle{stroke-dashoffset:274.5751408}.webpcLoader__column[data-percent="55"] .webpcLoader__columnCircle{stroke-dashoffset:268.606116}.webpcLoader__column[data-percent="56"] .webpcLoader__columnCircle{stroke-dashoffset:262.6370912}.webpcLoader__column[data-percent="57"] .webpcLoader__columnCircle{stroke-dashoffset:256.6680664}.webpcLoader__column[data-percent="58"] .webpcLoader__columnCircle{stroke-dashoffset:250.6990416}.webpcLoader__column[data-percent="59"] .webpcLoader__columnCircle{stroke-dashoffset:244.7300168}.webpcLoader__column[data-percent="60"] .webpcLoader__columnCircle{stroke-dashoffset:238.760992}.webpcLoader__column[data-percent="61"] .webpcLoader__columnCircle{stroke-dashoffset:232.7919672}.webpcLoader__column[data-percent="62"] .webpcLoader__columnCircle{stroke-dashoffset:226.8229424}.webpcLoader__column[data-percent="63"] .webpcLoader__columnCircle{stroke-dashoffset:220.8539176}.webpcLoader__column[data-percent="64"] .webpcLoader__columnCircle{stroke-dashoffset:214.8848928}.webpcLoader__column[data-percent="65"] .webpcLoader__columnCircle{stroke-dashoffset:208.915868}.webpcLoader__column[data-percent="66"] .webpcLoader__columnCircle{stroke-dashoffset:202.9468432}.webpcLoader__column[data-percent="67"] .webpcLoader__columnCircle{stroke-dashoffset:196.9778184}.webpcLoader__column[data-percent="68"] .webpcLoader__columnCircle{stroke-dashoffset:191.0087936}.webpcLoader__column[data-percent="69"] .webpcLoader__columnCircle{stroke-dashoffset:185.0397688}.webpcLoader__column[data-percent="70"] .webpcLoader__columnCircle{stroke-dashoffset:179.070744}.webpcLoader__column[data-percent="71"] .webpcLoader__columnCircle{stroke-dashoffset:173.1017192}.webpcLoader__column[data-percent="72"] .webpcLoader__columnCircle{stroke-dashoffset:167.1326944}.webpcLoader__column[data-percent="73"] .webpcLoader__columnCircle{stroke-dashoffset:161.1636696}.webpcLoader__column[data-percent="74"] .webpcLoader__columnCircle{stroke-dashoffset:155.1946448}.webpcLoader__column[data-percent="75"] .webpcLoader__columnCircle{stroke-dashoffset:149.22562}.webpcLoader__column[data-percent="76"] .webpcLoader__columnCircle{stroke-dashoffset:143.2565952}.webpcLoader__column[data-percent="77"] .webpcLoader__columnCircle{stroke-dashoffset:137.2875704}.webpcLoader__column[data-percent="78"] .webpcLoader__columnCircle{stroke-dashoffset:131.3185456}.webpcLoader__column[data-percent="79"] .webpcLoader__columnCircle{stroke-dashoffset:125.3495208}.webpcLoader__column[data-percent="80"] .webpcLoader__columnCircle{stroke-dashoffset:119.380496}.webpcLoader__column[data-percent="81"] .webpcLoader__columnCircle{stroke-dashoffset:113.4114712}.webpcLoader__column[data-percent="82"] .webpcLoader__columnCircle{stroke-dashoffset:107.4424464}.webpcLoader__column[data-percent="83"] .webpcLoader__columnCircle{stroke-dashoffset:101.4734216}.webpcLoader__column[data-percent="84"] .webpcLoader__columnCircle{stroke-dashoffset:95.5043968}.webpcLoader__column[data-percent="85"] .webpcLoader__columnCircle{stroke-dashoffset:89.535372}.webpcLoader__column[data-percent="86"] .webpcLoader__columnCircle{stroke-dashoffset:83.5663472}.webpcLoader__column[data-percent="87"] .webpcLoader__columnCircle{stroke-dashoffset:77.5973224}.webpcLoader__column[data-percent="88"] .webpcLoader__columnCircle{stroke-dashoffset:71.6282976}.webpcLoader__column[data-percent="89"] .webpcLoader__columnCircle{stroke-dashoffset:65.6592728}.webpcLoader__column[data-percent="90"] .webpcLoader__columnCircle{stroke-dashoffset:59.690248}.webpcLoader__column[data-percent="91"] .webpcLoader__columnCircle{stroke-dashoffset:53.7212232}.webpcLoader__column[data-percent="92"] .webpcLoader__columnCircle{stroke-dashoffset:47.7521984}.webpcLoader__column[data-percent="93"] .webpcLoader__columnCircle{stroke-dashoffset:41.7831736}.webpcLoader__column[data-percent="94"] .webpcLoader__columnCircle{stroke-dashoffset:35.8141488}.webpcLoader__column[data-percent="95"] .webpcLoader__columnCircle{stroke-dashoffset:29.845124}.webpcLoader__column[data-percent="96"] .webpcLoader__columnCircle{stroke-dashoffset:23.8760992}.webpcLoader__column[data-percent="97"] .webpcLoader__columnCircle{stroke-dashoffset:17.9070744}.webpcLoader__column[data-percent="98"] .webpcLoader__columnCircle{stroke-dashoffset:11.9380496}.webpcLoader__column[data-percent="99"] .webpcLoader__columnCircle{stroke-dashoffset:5.9690248}.webpcLoader__column[data-percent="100"] .webpcLoader__columnCircle{stroke-dashoffset:0}.webpcLoader__columnOverlay{left:0;position:absolute;text-align:center;top:50%;transform:translateY(-50%);width:100%}.webpcLoader__columnOverlayTitle{font-size:14px;font-weight:600;line-height:1.5714285714;padding:4px 20px}.webpcLoader__columnOverlayTitle strong{display:block;font-size:24px;line-height:1.2083333333}.webpcLoader__columnOverlayDesc{font-size:14px;line-height:1.5714285714;min-height:52px;padding:4px 20px}.webpcLoader__columnOverlayDesc--active{display:none}.webpcLoader__column[data-percent] .webpcLoader__columnOverlayDesc--active{display:block}.webpcLoader__column[data-percent] .webpcLoader__columnOverlayDesc--loading{display:none}.webpcLoader__columnOverlayDesc--loading:after{animation:dotsLoading 1s linear infinite;content:"...";font-family:monospace}.webpcLoader__statusProgress--error .webpcLoader__columnOverlayDesc--loading:after,.webpcLoader__statusProgress[data-percent="100"] .webpcLoader__columnOverlayDesc--loading:after{display:none}.webpcLoader__columnDesc{font-size:14px;line-height:1.5714285714;margin-bottom:-10px;margin-top:10px;padding:4px 0;text-align:center}.webpcLoader__status{margin-top:10px;padding-top:10px}.webpcLoader__statusProgress{font-size:0;height:31px;line-height:0;margin:10px 0;position:relative}.webpcLoader__statusProgress:before{background-color:#00a32a;content:"";height:100%;left:0;position:absolute;top:0;transition:width .3s;width:0}.webpcLoader__statusProgress--error:before{background-color:#d63638}.webpcLoader__statusProgress[data-percent="0"]:before{width:0}.webpcLoader__statusProgress[data-percent="1"]:before{width:1%}.webpcLoader__statusProgress[data-percent="2"]:before{width:2%}.webpcLoader__statusProgress[data-percent="3"]:before{width:3%}.webpcLoader__statusProgress[data-percent="4"]:before{width:4%}.webpcLoader__statusProgress[data-percent="5"]:before{width:5%}.webpcLoader__statusProgress[data-percent="6"]:before{width:6%}.webpcLoader__statusProgress[data-percent="7"]:before{width:7%}.webpcLoader__statusProgress[data-percent="8"]:before{width:8%}.webpcLoader__statusProgress[data-percent="9"]:before{width:9%}.webpcLoader__statusProgress[data-percent="10"]:before{width:10%}.webpcLoader__statusProgress[data-percent="11"]:before{width:11%}.webpcLoader__statusProgress[data-percent="12"]:before{width:12%}.webpcLoader__statusProgress[data-percent="13"]:before{width:13%}.webpcLoader__statusProgress[data-percent="14"]:before{width:14%}.webpcLoader__statusProgress[data-percent="15"]:before{width:15%}.webpcLoader__statusProgress[data-percent="16"]:before{width:16%}.webpcLoader__statusProgress[data-percent="17"]:before{width:17%}.webpcLoader__statusProgress[data-percent="18"]:before{width:18%}.webpcLoader__statusProgress[data-percent="19"]:before{width:19%}.webpcLoader__statusProgress[data-percent="20"]:before{width:20%}.webpcLoader__statusProgress[data-percent="21"]:before{width:21%}.webpcLoader__statusProgress[data-percent="22"]:before{width:22%}.webpcLoader__statusProgress[data-percent="23"]:before{width:23%}.webpcLoader__statusProgress[data-percent="24"]:before{width:24%}.webpcLoader__statusProgress[data-percent="25"]:before{width:25%}.webpcLoader__statusProgress[data-percent="26"]:before{width:26%}.webpcLoader__statusProgress[data-percent="27"]:before{width:27%}.webpcLoader__statusProgress[data-percent="28"]:before{width:28%}.webpcLoader__statusProgress[data-percent="29"]:before{width:29%}.webpcLoader__statusProgress[data-percent="30"]:before{width:30%}.webpcLoader__statusProgress[data-percent="31"]:before{width:31%}.webpcLoader__statusProgress[data-percent="32"]:before{width:32%}.webpcLoader__statusProgress[data-percent="33"]:before{width:33%}.webpcLoader__statusProgress[data-percent="34"]:before{width:34%}.webpcLoader__statusProgress[data-percent="35"]:before{width:35%}.webpcLoader__statusProgress[data-percent="36"]:before{width:36%}.webpcLoader__statusProgress[data-percent="37"]:before{width:37%}.webpcLoader__statusProgress[data-percent="38"]:before{width:38%}.webpcLoader__statusProgress[data-percent="39"]:before{width:39%}.webpcLoader__statusProgress[data-percent="40"]:before{width:40%}.webpcLoader__statusProgress[data-percent="41"]:before{width:41%}.webpcLoader__statusProgress[data-percent="42"]:before{width:42%}.webpcLoader__statusProgress[data-percent="43"]:before{width:43%}.webpcLoader__statusProgress[data-percent="44"]:before{width:44%}.webpcLoader__statusProgress[data-percent="45"]:before{width:45%}.webpcLoader__statusProgress[data-percent="46"]:before{width:46%}.webpcLoader__statusProgress[data-percent="47"]:before{width:47%}.webpcLoader__statusProgress[data-percent="48"]:before{width:48%}.webpcLoader__statusProgress[data-percent="49"]:before{width:49%}.webpcLoader__statusProgress[data-percent="50"]:before{width:50%}.webpcLoader__statusProgress[data-percent="51"]:before{width:51%}.webpcLoader__statusProgress[data-percent="52"]:before{width:52%}.webpcLoader__statusProgress[data-percent="53"]:before{width:53%}.webpcLoader__statusProgress[data-percent="54"]:before{width:54%}.webpcLoader__statusProgress[data-percent="55"]:before{width:55%}.webpcLoader__statusProgress[data-percent="56"]:before{width:56%}.webpcLoader__statusProgress[data-percent="57"]:before{width:57%}.webpcLoader__statusProgress[data-percent="58"]:before{width:58%}.webpcLoader__statusProgress[data-percent="59"]:before{width:59%}.webpcLoader__statusProgress[data-percent="60"]:before{width:60%}.webpcLoader__statusProgress[data-percent="61"]:before{width:61%}.webpcLoader__statusProgress[data-percent="62"]:before{width:62%}.webpcLoader__statusProgress[data-percent="63"]:before{width:63%}.webpcLoader__statusProgress[data-percent="64"]:before{width:64%}.webpcLoader__statusProgress[data-percent="65"]:before{width:65%}.webpcLoader__statusProgress[data-percent="66"]:before{width:66%}.webpcLoader__statusProgress[data-percent="67"]:before{width:67%}.webpcLoader__statusProgress[data-percent="68"]:before{width:68%}.webpcLoader__statusProgress[data-percent="69"]:before{width:69%}.webpcLoader__statusProgress[data-percent="70"]:before{width:70%}.webpcLoader__statusProgress[data-percent="71"]:before{width:71%}.webpcLoader__statusProgress[data-percent="72"]:before{width:72%}.webpcLoader__statusProgress[data-percent="73"]:before{width:73%}.webpcLoader__statusProgress[data-percent="74"]:before{width:74%}.webpcLoader__statusProgress[data-percent="75"]:before{width:75%}.webpcLoader__statusProgress[data-percent="76"]:before{width:76%}.webpcLoader__statusProgress[data-percent="77"]:before{width:77%}.webpcLoader__statusProgress[data-percent="78"]:before{width:78%}.webpcLoader__statusProgress[data-percent="79"]:before{width:79%}.webpcLoader__statusProgress[data-percent="80"]:before{width:80%}.webpcLoader__statusProgress[data-percent="81"]:before{width:81%}.webpcLoader__statusProgress[data-percent="82"]:before{width:82%}.webpcLoader__statusProgress[data-percent="83"]:before{width:83%}.webpcLoader__statusProgress[data-percent="84"]:before{width:84%}.webpcLoader__statusProgress[data-percent="85"]:before{width:85%}.webpcLoader__statusProgress[data-percent="86"]:before{width:86%}.webpcLoader__statusProgress[data-percent="87"]:before{width:87%}.webpcLoader__statusProgress[data-percent="88"]:before{width:88%}.webpcLoader__statusProgress[data-percent="89"]:before{width:89%}.webpcLoader__statusProgress[data-percent="90"]:before{width:90%}.webpcLoader__statusProgress[data-percent="91"]:before{width:91%}.webpcLoader__statusProgress[data-percent="92"]:before{width:92%}.webpcLoader__statusProgress[data-percent="93"]:before{width:93%}.webpcLoader__statusProgress[data-percent="94"]:before{width:94%}.webpcLoader__statusProgress[data-percent="95"]:before{width:95%}.webpcLoader__statusProgress[data-percent="96"]:before{width:96%}.webpcLoader__statusProgress[data-percent="97"]:before{width:97%}.webpcLoader__statusProgress[data-percent="98"]:before{width:98%}.webpcLoader__statusProgress[data-percent="99"]:before{width:99%}.webpcLoader__statusProgress[data-percent="100"]:before{width:100%}.webpcLoader__statusProgressCount{background-color:#00a32a;color:#fff;display:inline-block;font-family:monospace;font-size:12px;line-height:1.75;padding:5px 10px;position:relative}.webpcLoader__statusProgress--error .webpcLoader__statusProgressCount{background-color:#d63638}.webpcLoader__statusProgressCount:after{animation:dotsLoading 1s linear infinite;content:"...";margin-left:5px}.webpcLoader__statusProgress--error .webpcLoader__statusProgressCount:after,.webpcLoader__statusProgress[data-percent="100"] .webpcLoader__statusProgressCount:after{display:none}.webpcLoader__statusProgress[data-percent="0"] .webpcLoader__statusProgressCount:before{content:"0%"}.webpcLoader__statusProgress[data-percent="1"] .webpcLoader__statusProgressCount:before{content:"1%"}.webpcLoader__statusProgress[data-percent="2"] .webpcLoader__statusProgressCount:before{content:"2%"}.webpcLoader__statusProgress[data-percent="3"] .webpcLoader__statusProgressCount:before{content:"3%"}.webpcLoader__statusProgress[data-percent="4"] .webpcLoader__statusProgressCount:before{content:"4%"}.webpcLoader__statusProgress[data-percent="5"] .webpcLoader__statusProgressCount:before{content:"5%"}.webpcLoader__statusProgress[data-percent="6"] .webpcLoader__statusProgressCount:before{content:"6%"}.webpcLoader__statusProgress[data-percent="7"] .webpcLoader__statusProgressCount:before{content:"7%"}.webpcLoader__statusProgress[data-percent="8"] .webpcLoader__statusProgressCount:before{content:"8%"}.webpcLoader__statusProgress[data-percent="9"] .webpcLoader__statusProgressCount:before{content:"9%"}.webpcLoader__statusProgress[data-percent="10"] .webpcLoader__statusProgressCount:before{content:"10%"}.webpcLoader__statusProgress[data-percent="11"] .webpcLoader__statusProgressCount:before{content:"11%"}.webpcLoader__statusProgress[data-percent="12"] .webpcLoader__statusProgressCount:before{content:"12%"}.webpcLoader__statusProgress[data-percent="13"] .webpcLoader__statusProgressCount:before{content:"13%"}.webpcLoader__statusProgress[data-percent="14"] .webpcLoader__statusProgressCount:before{content:"14%"}.webpcLoader__statusProgress[data-percent="15"] .webpcLoader__statusProgressCount:before{content:"15%"}.webpcLoader__statusProgress[data-percent="16"] .webpcLoader__statusProgressCount:before{content:"16%"}.webpcLoader__statusProgress[data-percent="17"] .webpcLoader__statusProgressCount:before{content:"17%"}.webpcLoader__statusProgress[data-percent="18"] .webpcLoader__statusProgressCount:before{content:"18%"}.webpcLoader__statusProgress[data-percent="19"] .webpcLoader__statusProgressCount:before{content:"19%"}.webpcLoader__statusProgress[data-percent="20"] .webpcLoader__statusProgressCount:before{content:"20%"}.webpcLoader__statusProgress[data-percent="21"] .webpcLoader__statusProgressCount:before{content:"21%"}.webpcLoader__statusProgress[data-percent="22"] .webpcLoader__statusProgressCount:before{content:"22%"}.webpcLoader__statusProgress[data-percent="23"] .webpcLoader__statusProgressCount:before{content:"23%"}.webpcLoader__statusProgress[data-percent="24"] .webpcLoader__statusProgressCount:before{content:"24%"}.webpcLoader__statusProgress[data-percent="25"] .webpcLoader__statusProgressCount:before{content:"25%"}.webpcLoader__statusProgress[data-percent="26"] .webpcLoader__statusProgressCount:before{content:"26%"}.webpcLoader__statusProgress[data-percent="27"] .webpcLoader__statusProgressCount:before{content:"27%"}.webpcLoader__statusProgress[data-percent="28"] .webpcLoader__statusProgressCount:before{content:"28%"}.webpcLoader__statusProgress[data-percent="29"] .webpcLoader__statusProgressCount:before{content:"29%"}.webpcLoader__statusProgress[data-percent="30"] .webpcLoader__statusProgressCount:before{content:"30%"}.webpcLoader__statusProgress[data-percent="31"] .webpcLoader__statusProgressCount:before{content:"31%"}.webpcLoader__statusProgress[data-percent="32"] .webpcLoader__statusProgressCount:before{content:"32%"}.webpcLoader__statusProgress[data-percent="33"] .webpcLoader__statusProgressCount:before{content:"33%"}.webpcLoader__statusProgress[data-percent="34"] .webpcLoader__statusProgressCount:before{content:"34%"}.webpcLoader__statusProgress[data-percent="35"] .webpcLoader__statusProgressCount:before{content:"35%"}.webpcLoader__statusProgress[data-percent="36"] .webpcLoader__statusProgressCount:before{content:"36%"}.webpcLoader__statusProgress[data-percent="37"] .webpcLoader__statusProgressCount:before{content:"37%"}.webpcLoader__statusProgress[data-percent="38"] .webpcLoader__statusProgressCount:before{content:"38%"}.webpcLoader__statusProgress[data-percent="39"] .webpcLoader__statusProgressCount:before{content:"39%"}.webpcLoader__statusProgress[data-percent="40"] .webpcLoader__statusProgressCount:before{content:"40%"}.webpcLoader__statusProgress[data-percent="41"] .webpcLoader__statusProgressCount:before{content:"41%"}.webpcLoader__statusProgress[data-percent="42"] .webpcLoader__statusProgressCount:before{content:"42%"}.webpcLoader__statusProgress[data-percent="43"] .webpcLoader__statusProgressCount:before{content:"43%"}.webpcLoader__statusProgress[data-percent="44"] .webpcLoader__statusProgressCount:before{content:"44%"}.webpcLoader__statusProgress[data-percent="45"] .webpcLoader__statusProgressCount:before{content:"45%"}.webpcLoader__statusProgress[data-percent="46"] .webpcLoader__statusProgressCount:before{content:"46%"}.webpcLoader__statusProgress[data-percent="47"] .webpcLoader__statusProgressCount:before{content:"47%"}.webpcLoader__statusProgress[data-percent="48"] .webpcLoader__statusProgressCount:before{content:"48%"}.webpcLoader__statusProgress[data-percent="49"] .webpcLoader__statusProgressCount:before{content:"49%"}.webpcLoader__statusProgress[data-percent="50"] .webpcLoader__statusProgressCount:before{content:"50%"}.webpcLoader__statusProgress[data-percent="51"] .webpcLoader__statusProgressCount:before{content:"51%"}.webpcLoader__statusProgress[data-percent="52"] .webpcLoader__statusProgressCount:before{content:"52%"}.webpcLoader__statusProgress[data-percent="53"] .webpcLoader__statusProgressCount:before{content:"53%"}.webpcLoader__statusProgress[data-percent="54"] .webpcLoader__statusProgressCount:before{content:"54%"}.webpcLoader__statusProgress[data-percent="55"] .webpcLoader__statusProgressCount:before{content:"55%"}.webpcLoader__statusProgress[data-percent="56"] .webpcLoader__statusProgressCount:before{content:"56%"}.webpcLoader__statusProgress[data-percent="57"] .webpcLoader__statusProgressCount:before{content:"57%"}.webpcLoader__statusProgress[data-percent="58"] .webpcLoader__statusProgressCount:before{content:"58%"}.webpcLoader__statusProgress[data-percent="59"] .webpcLoader__statusProgressCount:before{content:"59%"}.webpcLoader__statusProgress[data-percent="60"] .webpcLoader__statusProgressCount:before{content:"60%"}.webpcLoader__statusProgress[data-percent="61"] .webpcLoader__statusProgressCount:before{content:"61%"}.webpcLoader__statusProgress[data-percent="62"] .webpcLoader__statusProgressCount:before{content:"62%"}.webpcLoader__statusProgress[data-percent="63"] .webpcLoader__statusProgressCount:before{content:"63%"}.webpcLoader__statusProgress[data-percent="64"] .webpcLoader__statusProgressCount:before{content:"64%"}.webpcLoader__statusProgress[data-percent="65"] .webpcLoader__statusProgressCount:before{content:"65%"}.webpcLoader__statusProgress[data-percent="66"] .webpcLoader__statusProgressCount:before{content:"66%"}.webpcLoader__statusProgress[data-percent="67"] .webpcLoader__statusProgressCount:before{content:"67%"}.webpcLoader__statusProgress[data-percent="68"] .webpcLoader__statusProgressCount:before{content:"68%"}.webpcLoader__statusProgress[data-percent="69"] .webpcLoader__statusProgressCount:before{content:"69%"}.webpcLoader__statusProgress[data-percent="70"] .webpcLoader__statusProgressCount:before{content:"70%"}.webpcLoader__statusProgress[data-percent="71"] .webpcLoader__statusProgressCount:before{content:"71%"}.webpcLoader__statusProgress[data-percent="72"] .webpcLoader__statusProgressCount:before{content:"72%"}.webpcLoader__statusProgress[data-percent="73"] .webpcLoader__statusProgressCount:before{content:"73%"}.webpcLoader__statusProgress[data-percent="74"] .webpcLoader__statusProgressCount:before{content:"74%"}.webpcLoader__statusProgress[data-percent="75"] .webpcLoader__statusProgressCount:before{content:"75%"}.webpcLoader__statusProgress[data-percent="76"] .webpcLoader__statusProgressCount:before{content:"76%"}.webpcLoader__statusProgress[data-percent="77"] .webpcLoader__statusProgressCount:before{content:"77%"}.webpcLoader__statusProgress[data-percent="78"] .webpcLoader__statusProgressCount:before{content:"78%"}.webpcLoader__statusProgress[data-percent="79"] .webpcLoader__statusProgressCount:before{content:"79%"}.webpcLoader__statusProgress[data-percent="80"] .webpcLoader__statusProgressCount:before{content:"80%"}.webpcLoader__statusProgress[data-percent="81"] .webpcLoader__statusProgressCount:before{content:"81%"}.webpcLoader__statusProgress[data-percent="82"] .webpcLoader__statusProgressCount:before{content:"82%"}.webpcLoader__statusProgress[data-percent="83"] .webpcLoader__statusProgressCount:before{content:"83%"}.webpcLoader__statusProgress[data-percent="84"] .webpcLoader__statusProgressCount:before{content:"84%"}.webpcLoader__statusProgress[data-percent="85"] .webpcLoader__statusProgressCount:before{content:"85%"}.webpcLoader__statusProgress[data-percent="86"] .webpcLoader__statusProgressCount:before{content:"86%"}.webpcLoader__statusProgress[data-percent="87"] .webpcLoader__statusProgressCount:before{content:"87%"}.webpcLoader__statusProgress[data-percent="88"] .webpcLoader__statusProgressCount:before{content:"88%"}.webpcLoader__statusProgress[data-percent="89"] .webpcLoader__statusProgressCount:before{content:"89%"}.webpcLoader__statusProgress[data-percent="90"] .webpcLoader__statusProgressCount:before{content:"90%"}.webpcLoader__statusProgress[data-percent="91"] .webpcLoader__statusProgressCount:before{content:"91%"}.webpcLoader__statusProgress[data-percent="92"] .webpcLoader__statusProgressCount:before{content:"92%"}.webpcLoader__statusProgress[data-percent="93"] .webpcLoader__statusProgressCount:before{content:"93%"}.webpcLoader__statusProgress[data-percent="94"] .webpcLoader__statusProgressCount:before{content:"94%"}.webpcLoader__statusProgress[data-percent="95"] .webpcLoader__statusProgressCount:before{content:"95%"}.webpcLoader__statusProgress[data-percent="96"] .webpcLoader__statusProgressCount:before{content:"96%"}.webpcLoader__statusProgress[data-percent="97"] .webpcLoader__statusProgressCount:before{content:"97%"}.webpcLoader__statusProgress[data-percent="98"] .webpcLoader__statusProgressCount:before{content:"98%"}.webpcLoader__statusProgress[data-percent="99"] .webpcLoader__statusProgressCount:before{content:"99%"}.webpcLoader__statusProgress[data-percent="100"] .webpcLoader__statusProgressCount:before{content:"100%"}.webpcLoader__statusContent{font-size:14px;line-height:1.5714285714;max-width:800px;padding:4px 0}.webpcLoader__statusContent--small{font-size:12px;line-height:1.75}.webpcLoader__statusContent strong{font-weight:600}.webpcLoader__success{padding:10px 0}.webpcLoader__successInner{border-left:2px solid #00a32a;padding:0 20px}.webpcLoader__successContent{color:#00a32a;font-size:14px;font-weight:600;line-height:1.5714285714;padding:4px 0}.webpcLoader__successContent a{color:inherit}.webpcLoader__errors{margin-top:10px;padding:10px 0}.webpcLoader__errorsInner{border-left:2px solid #c3c4c7}.webpcLoader__errorsTitle{background-color:#c3c4c7;color:#fff;display:inline-block;font-size:14px;line-height:1.5714285714;padding:4px 20px}.webpcLoader__errorsContent{padding:10px 0 10px 20px}.webpcLoader__errorsContent>p{font-size:12px;line-height:1.75;margin:0;max-width:100%}.webpcLoader__errorsContent>p.webpcLoader__errorsContentError{color:#d63638;font-size:14px;font-weight:600;line-height:1.5714285714}.webpcLoader__errorsContent pre{font-size:12px;line-height:1.75;white-space:normal}.webpcLoader__button--disabled{opacity:.25!important;pointer-events:none}.webpcMenu{margin-top:30px}.webpcMenu:first-child{margin-top:0}.webpcMenu__wrapper{border-bottom:1px solid #dcdcde}.webpcMenu__items{display:flex;font-size:0}.webpcMenu__itemLink{box-shadow:none!important;display:block;font-size:16px;line-height:1.5;outline:none!important;padding:13px 30px;text-align:center;text-decoration:none!important;transition:color .3s}.webpcMenu__itemLink:focus,.webpcMenu__itemLink:hover{color:rgba(34,113,177,.5)}.webpcMenu__itemLink--active{background-color:#fff;color:#101517;font-weight:600}.webpcMenu__itemLink--active:focus,.webpcMenu__itemLink--active:hover{color:inherit}.webpcPopup{margin-top:20px}.webpcPopup__inner{background-color:#fff;border:1px solid #c3c4c7;display:flex;flex-wrap:wrap}.webpcPopup__image{background-image:url(../../img/author.png);background-position:50%;background-repeat:no-repeat;background-size:cover;width:152px}.webpcPopup__content{border-left:1px solid #c3c4c7;flex:1;padding:10px 20px}.webpcQuality__items{display:flex;flex-wrap:wrap;justify-content:space-between}.webpcQuality__item{display:flex;flex:1;justify-content:center;position:relative}.webpcQuality__item:before{background-color:#c3c4c7;content:"";height:1px;left:0;position:absolute;top:50%;width:100%}.webpcQuality__item:first-child:before{left:50%}.webpcQuality__item:last-child:before{width:50%}.webpcQuality__itemInput{display:none!important}.webpcQuality__itemLabel{display:block;height:42px;position:relative;width:42px}.webpcQuality__itemLabel:after,.webpcQuality__itemLabel:before{border-radius:50%;content:"";height:22px;position:absolute;width:22px}.webpcQuality__itemLabel:before{background-color:#fff;border:1px solid #c3c4c7;left:10px;top:10px}.webpcQuality__itemLabel:after{background-color:#00a32a;height:8px;left:17px;top:17px;transform:scale(0);transition:transform .3s;width:8px}.webpcQuality__itemInput:checked+.webpcQuality__itemLabel:after{transform:scale(1)}.webpcQuality__texts{display:flex;flex-wrap:wrap}.webpcQuality__text{flex:1;font-size:12px;line-height:1.75;padding:4px 0;text-align:center}.webpcQuality__text strong{font-size:14px;line-height:1.5714285714}.webpcServerInfo{color:#222;text-align:center}.webpcServerInfo pre{font-family:monospace;margin:0}.webpcServerInfo h1,.webpcServerInfo h2{display:none}.webpcServerInfo p{max-width:100%}.webpcServerInfo table{border:0;border-collapse:collapse;margin:10px auto;width:100%}.webpcServerInfo td,.webpcServerInfo th{border:1px solid #666;font-family:monospace;font-size:12px;line-height:1.75;padding:4px 5px;text-align:center;vertical-align:baseline}.webpcServerInfo .p{text-align:left}.webpcServerInfo .e{background-color:#ccf;font-weight:700;width:300px}.webpcServerInfo .h{background-color:#99c;font-weight:700}.webpcServerInfo .v{word-wrap:break-word;background-color:#ddd;max-width:300px;overflow-x:auto}.webpcServerInfo .v i{color:#999}.webpcServerInfo img{border:0;float:right}@media screen and (max-width:1600px){.webpcPage__columns{margin:0 -15px}.webpcPage__column{padding:0 15px}.webpcPage__widget+.webpcPage__widget{margin-top:30px}}@media screen and (max-width:1279px){.webpcPage__column--large{width:100%}.webpcPage__column--small{margin-top:30px;width:100%}}@media screen and (max-width:1024px){.webpcPage__widgetColumns{display:block}.webpcPage__widgetColumn{width:100%}}@media screen and (max-width:782px){.webpcPage{padding-right:0}.webpcContent--author{background:none;margin-left:0;padding-left:30px}.webpcContent--notice img{bottom:auto;margin:20px 0 10px;position:relative;right:auto}.webpcInput{display:block}.webpcInput__field{width:100%}.webpcInput__field--small{width:calc(100% - 20px)}.webpcInput__button{margin:10px 0 0!important}.webpcLoader__columns,.webpcMenu__items{display:block}.webpcPopup__inner{border:1px solid #c3c4c7;display:block}.webpcPopup__image{height:152px;margin:20px auto 0}.webpcPopup__content{border-left:0}}
changelog.txt CHANGED
@@ -1,5 +1,10 @@
1
  == Changelog ==
2
 
 
 
 
 
 
3
  = 5.1.0 (2022-08-28) =
4
  * `[Fixed]` Exclusion of converted files from backup generated by UpdraftPlus plugin
5
  * `[Added]` Optimization statistics in Media Library
1
  == Changelog ==
2
 
3
+ = 5.2.0 (2022-09-10) =
4
+ * `[Fixed]` Re-conversion of images modified after previous conversion
5
+ * `[Added]` Optimization statistics in Media Upload Popup
6
+ * `[Added]` Filter `webpc_source_directories` to add support for custom directories
7
+
8
  = 5.1.0 (2022-08-28) =
9
  * `[Fixed]` Exclusion of converted files from backup generated by UpdraftPlus plugin
10
  * `[Added]` Optimization statistics in Media Library
readme.txt CHANGED
@@ -1,6 +1,6 @@
1
  === Converter for Media - One-click image optimization | Convert WebP and AVIF & Optimize Images ===
2
  Contributors: mateuszgbiorczyk
3
- Donate link: https://mattplugins.com/products/webp-converter-for-media-pro/?utm_source=webp-converter-for-media&utm_campaign=upgrade-to-pro&utm_medium=readme-donate
4
  Tags: convert webp, webp, optimize images, image optimization, compress images
5
  Requires at least: 4.9
6
  Tested up to: 6.0
@@ -23,7 +23,7 @@ This will be a profit both for your users who will not have to download so much
23
 
24
  #### AVIF support
25
 
26
- Now in [the PRO version](https://mattplugins.com/products/webp-converter-for-media-pro/?utm_source=webp-converter-for-media&utm_campaign=upgrade-to-pro&utm_medium=readme-avif-support) you can use AVIF as the output format for your images. The AVIF format is a new extension - is the successor to WebP. **AVIF allows you to achieve even higher levels of image compression**, and the quality of the converted images after image optimization is better than in WebP.
27
 
28
  #### How does this work?
29
 
@@ -50,7 +50,7 @@ You can convert WebP and optimize images not only from `/uploads` directory but
50
 
51
  We spend hours working on the development of this plugin. Technical support also requires a lot of time, but we do it because we want to offer you the best plugin. We enjoy every new plugin installation.
52
 
53
- If you would like to appreciate it, you can try [the PRO version](https://mattplugins.com/products/webp-converter-for-media-pro/?utm_source=webp-converter-for-media&utm_campaign=upgrade-to-pro&utm_medium=readme-plugin-development). In addition, you will gain access to extra functionalities that will allow you to achieve **even better image optimization results**.
54
 
55
  #### Please also read the FAQ below. Thank you for being with us!
56
 
@@ -60,7 +60,7 @@ If you would like to appreciate it, you can try [the PRO version](https://mattpl
60
  2. Activate the plugin through `Plugins` screen in WordPress Admin Panel.
61
  3. Use `Settings -> Settings -> Converter for Media` screen to configure the plugin.
62
  4. Click on the button `Start Bulk Optimization` and wait.
63
- 5. Check if everything works fine using [this tutorial](https://wordpress.org/support/topic/how-can-i-check-if-the-plugin-is-working-properly/).
64
 
65
  That's all! Your website is already loading faster!
66
 
@@ -68,11 +68,11 @@ That's all! Your website is already loading faster!
68
 
69
  = How to get technical support? (before you ask for help) =
70
 
71
- Before you add a new thread, **read all other questions in this FAQ and other threads in [the support forum](https://wordpress.org/support/plugin/webp-converter-for-media/) first**. Perhaps someone had a similar problem and it has been resolved.
72
 
73
  When adding a thread, follow these steps and reply to each of them:
74
 
75
- **1.** Do you have any errors on the plugin settings page? Please read [this thread](https://wordpress.org/support/topic/server-configuration-error-what-to-do/) if you have any errors.
76
 
77
  **2.** URL of your website.
78
 
@@ -86,7 +86,7 @@ Please remember to include the answers to all questions by adding a thread. It i
86
 
87
  If you have an error on the plugin settings screen, first of all, please read it carefully. They are displayed when there is a problem with the configuration of your server or website.
88
 
89
- The messages are designed to reduce the number of support requests that are repeated. It saves your and our time. Please read [this thread](https://wordpress.org/support/topic/server-configuration-error-what-to-do/) for more information.
90
 
91
  = Error while converting? =
92
 
@@ -106,7 +106,7 @@ Practically every hosting meets these requirements. You must use PHP at least 7.
106
 
107
  They are required native PHP extensions, used among others by WordPress to generate thumbnails. Your server must also have the modules `mod_mime`, `mod_rewrite` and `mod_expires` enabled.
108
 
109
- An example of the correct server configuration can be found [here](https://mattplugins.com/files/webp-server-config.png). The link to your current configuration can be found in the Help Center tab on plugin settings screen.
110
 
111
  **Note the items marked in red.** If the values marked in red do not appear in your case, it means that your server does not meet the technical requirements. Pay attention to the **WebP Support** value for the GD library and **WEBP in the list of supported extensions** for the Imagick library.
112
 
@@ -116,7 +116,7 @@ Also, REST API must be enabled and work without additional restrictions. If you
116
 
117
  = How to check if the plugin works? =
118
 
119
- You can find more information on how the plugin works in [our manual](https://wordpress.org/support/topic/how-can-i-check-if-the-plugin-is-working-properly/).
120
 
121
  = How to change the path to uploads? =
122
 
@@ -128,22 +128,20 @@ Path to the root installation directory of WordPress *(`ABSPATH` by default)*:
128
  return ABSPATH;
129
  } );`
130
 
131
- Path to `/uploads` directory *(relative to the root directory)*:
132
 
133
  `add_filter( 'webpc_dir_name', function( $path, $directory ) {
134
- if ( $directory !== 'uploads' ) {
135
- return $path;
 
 
 
 
 
 
 
136
  }
137
- return 'wp-content/uploads';
138
- }, 10, 2 );`
139
-
140
- Directory path with converted WebP files *(relative to the root directory)*:
141
-
142
- `add_filter( 'webpc_dir_name', function( $path, $directory ) {
143
- if ( $directory !== 'webp' ) {
144
- return $path;
145
- }
146
- return 'wp-content/uploads-webpc';
147
  }, 10, 2 );`
148
 
149
  **Note that the `/uploads-webpc` directory must be at the same nesting level as the `/uploads`, `/plugins` and `/themes` directories.**
@@ -176,16 +174,17 @@ add_filter( 'webpc_htaccess_rewrite_path', function( $prefix ) {
176
  return '/';
177
  } );
178
  add_filter( 'webpc_dir_name', function( $path, $directory ) {
179
- if ( $directory !== 'uploads' ) {
180
- return $path;
181
- }
182
- return 'app/uploads';
183
- }, 10, 2 );
184
- add_filter( 'webpc_dir_name', function( $path, $directory ) {
185
- if ( $directory !== 'webp' ) {
186
- return $path;
 
187
  }
188
- return 'app/uploads-webpc';
189
  }, 10, 2 );`
190
 
191
  After setting the filters go to `Settings -> Converter for Media` in the admin panel and click the `Save Changes` button. `.htaccess` files with appropriate rules should be created in the directories `/uploads` and `/uploads-webpc`.
@@ -216,6 +215,23 @@ Argument `$server_path` is the absolute server path to a directory or file. Insi
216
 
217
  Filters run before images are converted - they no longer support converted images. You have to delete them manually if they should not be converted.
218
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
219
  = How to run manually conversion? =
220
 
221
  By default, all images are converted when you click on the `Start Bulk Optimization ` button. In addition, conversion is automatic when you add new files to your Media Library.
@@ -313,7 +329,7 @@ After making changes, remember to restart the machine:
313
 
314
  `systemctl restart nginx`
315
 
316
- In case of problems, please contact us in [the support forum](https://wordpress.org/support/plugin/webp-converter-for-media/). We will try to help.
317
 
318
  == Screenshots ==
319
 
@@ -324,6 +340,11 @@ In case of problems, please contact us in [the support forum](https://wordpress.
324
 
325
  == Changelog ==
326
 
 
 
 
 
 
327
  = 5.1.0 (2022-08-28) =
328
  * `[Fixed]` Exclusion of converted files from backup generated by UpdraftPlus plugin
329
  * `[Added]` Optimization statistics in Media Library
@@ -346,7 +367,7 @@ In case of problems, please contact us in [the support forum](https://wordpress.
346
  * `[Added]` Statistics on number of converted images
347
  * `[Added]` Tabs for plugin settings
348
 
349
- See [changelog.txt](https://plugins.svn.wordpress.org/webp-converter-for-media/trunk/changelog.txt) for previous versions.
350
 
351
  == Upgrade Notice ==
352
 
1
  === Converter for Media - One-click image optimization | Convert WebP and AVIF & Optimize Images ===
2
  Contributors: mateuszgbiorczyk
3
+ Donate link: https://url.mattplugins.com/converter-readme-donate-link
4
  Tags: convert webp, webp, optimize images, image optimization, compress images
5
  Requires at least: 4.9
6
  Tested up to: 6.0
23
 
24
  #### AVIF support
25
 
26
+ Now in [the PRO version](https://url.mattplugins.com/converter-readme-avif-support-upgrade) you can use AVIF as the output format for your images. The AVIF format is a new extension - is the successor to WebP. **AVIF allows you to achieve even higher levels of image compression**, and the quality of the converted images after image optimization is better than in WebP.
27
 
28
  #### How does this work?
29
 
50
 
51
  We spend hours working on the development of this plugin. Technical support also requires a lot of time, but we do it because we want to offer you the best plugin. We enjoy every new plugin installation.
52
 
53
+ If you would like to appreciate it, you can try [the PRO version](https://url.mattplugins.com/converter-readme-development-support-upgrade). In addition, you will gain access to extra functionalities that will allow you to achieve **even better image optimization results**.
54
 
55
  #### Please also read the FAQ below. Thank you for being with us!
56
 
60
  2. Activate the plugin through `Plugins` screen in WordPress Admin Panel.
61
  3. Use `Settings -> Settings -> Converter for Media` screen to configure the plugin.
62
  4. Click on the button `Start Bulk Optimization` and wait.
63
+ 5. Check if everything works fine using [this tutorial](https://url.mattplugins.com/converter-readme-installation-instruction).
64
 
65
  That's all! Your website is already loading faster!
66
 
68
 
69
  = How to get technical support? (before you ask for help) =
70
 
71
+ Before you add a new thread, **read all other questions in this FAQ and other threads in [the support forum](https://url.mattplugins.com/converter-plugin-faq-technical-support-forum) first**. Perhaps someone had a similar problem and it has been resolved.
72
 
73
  When adding a thread, follow these steps and reply to each of them:
74
 
75
+ **1.** Do you have any errors on the plugin settings page? Please read [this thread](https://url.mattplugins.com/converter-plugin-faq-technical-support-error-instruction) if you have any errors.
76
 
77
  **2.** URL of your website.
78
 
86
 
87
  If you have an error on the plugin settings screen, first of all, please read it carefully. They are displayed when there is a problem with the configuration of your server or website.
88
 
89
+ The messages are designed to reduce the number of support requests that are repeated. It saves your and our time. Please read [this thread](https://url.mattplugins.com/converter-plugin-faq-configuration-error-instruction) for more information.
90
 
91
  = Error while converting? =
92
 
106
 
107
  They are required native PHP extensions, used among others by WordPress to generate thumbnails. Your server must also have the modules `mod_mime`, `mod_rewrite` and `mod_expires` enabled.
108
 
109
+ An example of the correct server configuration can be found [here](https://url.mattplugins.com/converter-plugin-faq-plugin-requirements-configuration-image). The link to your current configuration can be found in the Help Center tab on plugin settings screen.
110
 
111
  **Note the items marked in red.** If the values marked in red do not appear in your case, it means that your server does not meet the technical requirements. Pay attention to the **WebP Support** value for the GD library and **WEBP in the list of supported extensions** for the Imagick library.
112
 
116
 
117
  = How to check if the plugin works? =
118
 
119
+ You can find more information on how the plugin works in [our manual](https://url.mattplugins.com/converter-plugin-faq-plugin-check-instruction).
120
 
121
  = How to change the path to uploads? =
122
 
128
  return ABSPATH;
129
  } );`
130
 
131
+ Paths to directories *(relative to the root directory)*:
132
 
133
  `add_filter( 'webpc_dir_name', function( $path, $directory ) {
134
+ switch ( $directory ) {
135
+ case 'uploads':
136
+ return 'wp-content/uploads';
137
+ case 'webp':
138
+ return 'wp-content/uploads-webpc';
139
+ case 'plugins':
140
+ return 'wp-content/plugins';
141
+ case 'themes':
142
+ return 'wp-content/themes';
143
  }
144
+ return $path;
 
 
 
 
 
 
 
 
 
145
  }, 10, 2 );`
146
 
147
  **Note that the `/uploads-webpc` directory must be at the same nesting level as the `/uploads`, `/plugins` and `/themes` directories.**
174
  return '/';
175
  } );
176
  add_filter( 'webpc_dir_name', function( $path, $directory ) {
177
+ switch ( $directory ) {
178
+ case 'uploads':
179
+ return 'app/uploads';
180
+ case 'webp':
181
+ return 'app/uploads-webpc';
182
+ case 'plugins':
183
+ return 'app/plugins';
184
+ case 'themes':
185
+ return 'app/themes';
186
  }
187
+ return $path;
188
  }, 10, 2 );`
189
 
190
  After setting the filters go to `Settings -> Converter for Media` in the admin panel and click the `Save Changes` button. `.htaccess` files with appropriate rules should be created in the directories `/uploads` and `/uploads-webpc`.
215
 
216
  Filters run before images are converted - they no longer support converted images. You have to delete them manually if they should not be converted.
217
 
218
+ = Support for custom directories =
219
+
220
+ The plugin supports the following directories by default:
221
+ - `/gallery`
222
+ - `/plugins`
223
+ - `/themes`
224
+ - `/uploads`
225
+
226
+ If you want to add support for a custom directory, add the following code to the functions.php file in your theme directory *(use a correct directory name instead of `custom-directory`)*:
227
+
228
+ `add_filter( 'webpc_source_directories', function ( $directories ) {
229
+ $directories[] = 'custom-directory';
230
+ return $directories;
231
+ } );`
232
+
233
+ Remember that this directory must be located in the `/wp-content` directory.
234
+
235
  = How to run manually conversion? =
236
 
237
  By default, all images are converted when you click on the `Start Bulk Optimization ` button. In addition, conversion is automatic when you add new files to your Media Library.
329
 
330
  `systemctl restart nginx`
331
 
332
+ In case of problems, please contact us in [the support forum](https://url.mattplugins.com/converter-plugin-faq-nginx-configuration-contact). We will try to help.
333
 
334
  == Screenshots ==
335
 
340
 
341
  == Changelog ==
342
 
343
+ = 5.2.0 (2022-09-10) =
344
+ * `[Fixed]` Re-conversion of images modified after previous conversion
345
+ * `[Added]` Optimization statistics in Media Upload Popup
346
+ * `[Added]` Filter `webpc_source_directories` to add support for custom directories
347
+
348
  = 5.1.0 (2022-08-28) =
349
  * `[Fixed]` Exclusion of converted files from backup generated by UpdraftPlus plugin
350
  * `[Added]` Optimization statistics in Media Library
367
  * `[Added]` Statistics on number of converted images
368
  * `[Added]` Tabs for plugin settings
369
 
370
+ See [changelog.txt](https://url.mattplugins.com/converter-readme-changelog) for previous versions.
371
 
372
  == Upgrade Notice ==
373
 
src/Conversion/Cron/CronInitiator.php CHANGED
@@ -67,13 +67,14 @@ class CronInitiator {
67
  }
68
 
69
  /**
70
- * @param string[] $new_paths .
 
71
  *
72
  * @return void
73
  */
74
- public function add_paths_to_conversion( array $new_paths ) {
75
  $paths = $this->cron_status_manager->get_paths_to_conversion();
76
- $valid_new_paths = $this->paths_finder->skip_converted_paths( $new_paths );
77
 
78
  $this->cron_status_manager->set_paths_to_conversion( array_merge( $valid_new_paths, $paths ) );
79
  }
67
  }
68
 
69
  /**
70
+ * @param string[] $new_paths .
71
+ * @param bool $force_convert_modified .
72
  *
73
  * @return void
74
  */
75
+ public function add_paths_to_conversion( array $new_paths, bool $force_convert_modified = false ) {
76
  $paths = $this->cron_status_manager->get_paths_to_conversion();
77
+ $valid_new_paths = $this->paths_finder->skip_converted_paths( $new_paths, null, $force_convert_modified );
78
 
79
  $this->cron_status_manager->set_paths_to_conversion( array_merge( $valid_new_paths, $paths ) );
80
  }
src/Conversion/Directory/DirectoryFactory.php CHANGED
@@ -18,10 +18,13 @@ class DirectoryFactory implements HookableInterface {
18
  private $directories_integration;
19
 
20
  public function __construct() {
21
- $this->set_integration( new GalleryDirectory() );
22
- $this->set_integration( new PluginsDirectory() );
23
- $this->set_integration( new ThemesDirectory() );
24
- $this->set_integration( new UploadsDirectory() );
 
 
 
25
  $this->set_integration( new UploadsWebpcDirectory() );
26
  }
27
 
@@ -43,6 +46,17 @@ class DirectoryFactory implements HookableInterface {
43
  * {@inheritdoc}
44
  */
45
  public function init_hooks() {
 
 
 
 
 
 
 
 
 
 
 
46
  $this->directories_integration->init_hooks();
47
  }
48
 
18
  private $directories_integration;
19
 
20
  public function __construct() {
21
+ $this->set_integration( new SourceDirectory( 'gallery' ) );
22
+ $this->set_integration( new SourceDirectory( 'plugins' ) );
23
+ $this->set_integration( new SourceDirectory( 'themes' ) );
24
+ $this->set_integration( new SourceDirectory( 'uploads', true ) );
25
+ foreach ( apply_filters( 'webpc_source_directories', [] ) as $directory_name ) {
26
+ $this->set_integration( new SourceDirectory( $directory_name ) );
27
+ }
28
  $this->set_integration( new UploadsWebpcDirectory() );
29
  }
30
 
46
  * {@inheritdoc}
47
  */
48
  public function init_hooks() {
49
+ add_action( 'init', [ $this, 'init_hooks_after_setup' ] );
50
+ }
51
+
52
+ /**
53
+ * @return void
54
+ * @internal
55
+ */
56
+ public function init_hooks_after_setup() {
57
+ foreach ( apply_filters( 'webpc_source_directories', [] ) as $directory_name ) {
58
+ $this->set_integration( new SourceDirectory( $directory_name ) );
59
+ }
60
  $this->directories_integration->init_hooks();
61
  }
62
 
src/Conversion/Directory/DirectoryIntegration.php CHANGED
@@ -83,7 +83,7 @@ class DirectoryIntegration implements HookableInterface {
83
  /**
84
  * Returns server path of directory relative to WordPress root directory.
85
  *
86
- * @param mixed $value Default value.
87
  * @param string $directory_type Type of directory.
88
  *
89
  * @return string Relative server path of directory.
@@ -99,7 +99,7 @@ class DirectoryIntegration implements HookableInterface {
99
  /**
100
  * Returns server path of directory.
101
  *
102
- * @param mixed $value Default value.
103
  * @param string $directory_type Type of directory.
104
  *
105
  * @return string Server path of directory.
@@ -125,7 +125,7 @@ class DirectoryIntegration implements HookableInterface {
125
  /**
126
  * Returns URL of directory.
127
  *
128
- * @param mixed $value Default value.
129
  * @param string $directory_type Type of directory.
130
  *
131
  * @return string URL of directory.
83
  /**
84
  * Returns server path of directory relative to WordPress root directory.
85
  *
86
+ * @param string $value Default value.
87
  * @param string $directory_type Type of directory.
88
  *
89
  * @return string Relative server path of directory.
99
  /**
100
  * Returns server path of directory.
101
  *
102
+ * @param string $value Default value.
103
  * @param string $directory_type Type of directory.
104
  *
105
  * @return string Server path of directory.
125
  /**
126
  * Returns URL of directory.
127
  *
128
+ * @param string $value Default value.
129
  * @param string $directory_type Type of directory.
130
  *
131
  * @return string URL of directory.
src/Conversion/Directory/GalleryDirectory.php DELETED
@@ -1,33 +0,0 @@
1
- <?php
2
-
3
- namespace WebpConverter\Conversion\Directory;
4
-
5
- /**
6
- * Supports data about /gallery directory.
7
- */
8
- class GalleryDirectory extends DirectoryAbstract {
9
-
10
- const DIRECTORY_TYPE = 'gallery';
11
- const DIRECTORY_PATH = '%s/gallery';
12
-
13
- /**
14
- * {@inheritdoc}
15
- */
16
- public function get_type(): string {
17
- return self::DIRECTORY_TYPE;
18
- }
19
-
20
- /**
21
- * {@inheritdoc}
22
- */
23
- public function get_label(): string {
24
- return '/' . self::DIRECTORY_TYPE;
25
- }
26
-
27
- /**
28
- * {@inheritdoc}
29
- */
30
- public function get_relative_path(): string {
31
- return sprintf( self::DIRECTORY_PATH, basename( WP_CONTENT_DIR ) );
32
- }
33
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
src/Conversion/Directory/PluginsDirectory.php DELETED
@@ -1,33 +0,0 @@
1
- <?php
2
-
3
- namespace WebpConverter\Conversion\Directory;
4
-
5
- /**
6
- * Supports data about /plugins directory.
7
- */
8
- class PluginsDirectory extends DirectoryAbstract {
9
-
10
- const DIRECTORY_TYPE = 'plugins';
11
- const DIRECTORY_PATH = '%s/plugins';
12
-
13
- /**
14
- * {@inheritdoc}
15
- */
16
- public function get_type(): string {
17
- return self::DIRECTORY_TYPE;
18
- }
19
-
20
- /**
21
- * {@inheritdoc}
22
- */
23
- public function get_label(): string {
24
- return '/' . self::DIRECTORY_TYPE;
25
- }
26
-
27
- /**
28
- * {@inheritdoc}
29
- */
30
- public function get_relative_path(): string {
31
- return sprintf( self::DIRECTORY_PATH, basename( WP_CONTENT_DIR ) );
32
- }
33
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
src/Conversion/Directory/SourceDirectory.php ADDED
@@ -0,0 +1,61 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ namespace WebpConverter\Conversion\Directory;
4
+
5
+ /**
6
+ * Supports data about source directory.
7
+ */
8
+ class SourceDirectory extends DirectoryAbstract {
9
+
10
+ /**
11
+ * @var string
12
+ */
13
+ private $directory_type;
14
+
15
+ /**
16
+ * @var string
17
+ */
18
+ private $directory_path;
19
+
20
+ /**
21
+ * @var bool
22
+ */
23
+ private $is_always_available;
24
+
25
+ public function __construct( string $directory_name, bool $is_always_available = false ) {
26
+ $this->directory_type = trim( $directory_name, '/\\' );
27
+ $this->directory_path = '%s/' . $this->directory_type;
28
+ $this->is_always_available = $is_always_available;
29
+ }
30
+
31
+ /**
32
+ * {@inheritdoc}
33
+ */
34
+ public function get_type(): string {
35
+ return $this->directory_type;
36
+ }
37
+
38
+ /**
39
+ * {@inheritdoc}
40
+ */
41
+ public function get_label(): string {
42
+ return '/' . $this->directory_type;
43
+ }
44
+
45
+ /**
46
+ * {@inheritdoc}
47
+ */
48
+ public function get_relative_path(): string {
49
+ return sprintf( $this->directory_path, basename( WP_CONTENT_DIR ) );
50
+ }
51
+
52
+ /**
53
+ * {@inheritdoc}
54
+ */
55
+ public function is_available(): bool {
56
+ if ( $this->is_always_available ) {
57
+ return true;
58
+ }
59
+ return parent::is_available();
60
+ }
61
+ }
src/Conversion/Directory/ThemesDirectory.php DELETED
@@ -1,33 +0,0 @@
1
- <?php
2
-
3
- namespace WebpConverter\Conversion\Directory;
4
-
5
- /**
6
- * Supports data about /themes directory.
7
- */
8
- class ThemesDirectory extends DirectoryAbstract {
9
-
10
- const DIRECTORY_TYPE = 'themes';
11
- const DIRECTORY_PATH = '%s/themes';
12
-
13
- /**
14
- * {@inheritdoc}
15
- */
16
- public function get_type(): string {
17
- return self::DIRECTORY_TYPE;
18
- }
19
-
20
- /**
21
- * {@inheritdoc}
22
- */
23
- public function get_label(): string {
24
- return '/' . self::DIRECTORY_TYPE;
25
- }
26
-
27
- /**
28
- * {@inheritdoc}
29
- */
30
- public function get_relative_path(): string {
31
- return sprintf( self::DIRECTORY_PATH, basename( WP_CONTENT_DIR ) );
32
- }
33
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
src/Conversion/Directory/UploadsDirectory.php DELETED
@@ -1,40 +0,0 @@
1
- <?php
2
-
3
- namespace WebpConverter\Conversion\Directory;
4
-
5
- /**
6
- * Supports data about /uploads directory.
7
- */
8
- class UploadsDirectory extends DirectoryAbstract {
9
-
10
- const DIRECTORY_TYPE = 'uploads';
11
- const DIRECTORY_PATH = '%s/uploads';
12
-
13
- /**
14
- * {@inheritdoc}
15
- */
16
- public function get_type(): string {
17
- return self::DIRECTORY_TYPE;
18
- }
19
-
20
- /**
21
- * {@inheritdoc}
22
- */
23
- public function is_available(): bool {
24
- return true;
25
- }
26
-
27
- /**
28
- * {@inheritdoc}
29
- */
30
- public function get_label(): string {
31
- return '/' . self::DIRECTORY_TYPE;
32
- }
33
-
34
- /**
35
- * {@inheritdoc}
36
- */
37
- public function get_relative_path(): string {
38
- return sprintf( self::DIRECTORY_PATH, basename( WP_CONTENT_DIR ) );
39
- }
40
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
src/Conversion/Endpoint/CronConversionEndpoint.php CHANGED
@@ -39,6 +39,13 @@ class CronConversionEndpoint extends EndpointAbstract {
39
  return 'cron-conversion';
40
  }
41
 
 
 
 
 
 
 
 
42
  /**
43
  * {@inheritdoc}
44
  */
39
  return 'cron-conversion';
40
  }
41
 
42
+ /**
43
+ * {@inheritdoc}
44
+ */
45
+ public function get_http_methods(): string {
46
+ return \WP_REST_Server::CREATABLE;
47
+ }
48
+
49
  /**
50
  * {@inheritdoc}
51
  */
src/Conversion/Endpoint/EndpointIntegration.php CHANGED
@@ -42,7 +42,7 @@ class EndpointIntegration implements HookableInterface {
42
  self::ROUTE_NAMESPACE,
43
  $this->endpoint_object->get_route_name() . '-(?P<nonce_token>[a-zA-Z0-9.]+)',
44
  [
45
- 'methods' => \WP_REST_Server::ALLMETHODS,
46
  'permission_callback' => function ( \WP_REST_Request $request ) {
47
  return $this->endpoint_object->is_valid_request( $request );
48
  },
42
  self::ROUTE_NAMESPACE,
43
  $this->endpoint_object->get_route_name() . '-(?P<nonce_token>[a-zA-Z0-9.]+)',
44
  [
45
+ 'methods' => $this->endpoint_object->get_http_methods(),
46
  'permission_callback' => function ( \WP_REST_Request $request ) {
47
  return $this->endpoint_object->is_valid_request( $request );
48
  },
src/Conversion/Endpoint/EndpointInterface.php CHANGED
@@ -14,6 +14,13 @@ interface EndpointInterface {
14
  */
15
  public function get_route_name(): string;
16
 
 
 
 
 
 
 
 
17
  /**
18
  * Returns expiration time in seconds of endpoint URL.
19
  *
14
  */
15
  public function get_route_name(): string;
16
 
17
+ /**
18
+ * Returns methods separated by space.
19
+ *
20
+ * @return string
21
+ */
22
+ public function get_http_methods(): string;
23
+
24
  /**
25
  * Returns expiration time in seconds of endpoint URL.
26
  *
src/Conversion/Endpoint/ImagesCounterEndpoint.php CHANGED
@@ -38,6 +38,13 @@ class ImagesCounterEndpoint extends EndpointAbstract {
38
  return 'images-counter';
39
  }
40
 
 
 
 
 
 
 
 
41
  /**
42
  * {@inheritdoc}
43
  */
38
  return 'images-counter';
39
  }
40
 
41
+ /**
42
+ * {@inheritdoc}
43
+ */
44
+ public function get_http_methods(): string {
45
+ return \WP_REST_Server::READABLE;
46
+ }
47
+
48
  /**
49
  * {@inheritdoc}
50
  */
src/Conversion/Endpoint/PathsEndpoint.php CHANGED
@@ -44,6 +44,13 @@ class PathsEndpoint extends EndpointAbstract {
44
  return 'paths';
45
  }
46
 
 
 
 
 
 
 
 
47
  /**
48
  * {@inheritdoc}
49
  */
@@ -68,6 +75,8 @@ class PathsEndpoint extends EndpointAbstract {
68
  */
69
  public function get_route_response( \WP_REST_Request $request ) {
70
  $this->cron_status_manager->set_conversion_status_locked( true, true );
 
 
71
 
72
  $params = $request->get_params();
73
  $skip_converted = ( $params['regenerate_force'] !== true );
44
  return 'paths';
45
  }
46
 
47
+ /**
48
+ * {@inheritdoc}
49
+ */
50
+ public function get_http_methods(): string {
51
+ return \WP_REST_Server::CREATABLE;
52
+ }
53
+
54
  /**
55
  * {@inheritdoc}
56
  */
75
  */
76
  public function get_route_response( \WP_REST_Request $request ) {
77
  $this->cron_status_manager->set_conversion_status_locked( true, true );
78
+ $this->cron_status_manager->set_paths_to_conversion( [] );
79
+ $this->cron_status_manager->set_paths_skipped( [] );
80
 
81
  $params = $request->get_params();
82
  $skip_converted = ( $params['regenerate_force'] !== true );
src/Conversion/Endpoint/RegenerateEndpoint.php CHANGED
@@ -33,6 +33,13 @@ class RegenerateEndpoint extends EndpointAbstract {
33
  return 'regenerate';
34
  }
35
 
 
 
 
 
 
 
 
36
  /**
37
  * {@inheritdoc}
38
  */
33
  return 'regenerate';
34
  }
35
 
36
+ /**
37
+ * {@inheritdoc}
38
+ */
39
+ public function get_http_methods(): string {
40
+ return \WP_REST_Server::CREATABLE;
41
+ }
42
+
43
  /**
44
  * {@inheritdoc}
45
  */
src/Conversion/Format/AvifFormat.php CHANGED
@@ -4,7 +4,6 @@ namespace WebpConverter\Conversion\Format;
4
 
5
  use WebpConverter\Conversion\Method\RemoteMethod;
6
  use WebpConverter\Repository\TokenRepository;
7
- use WebpConverter\WebpConverterConstants;
8
 
9
  /**
10
  * Supports AVIF as output format for images.
@@ -50,7 +49,7 @@ class AvifFormat extends FormatAbstract {
50
  sprintf(
51
  /* translators: %1$s: open anchor tag, %2$s: close anchor tag */
52
  __( 'available in %1$sthe PRO version%2$s', 'webp-converter-for-media' ),
53
- '<a href="' . esc_url( sprintf( WebpConverterConstants::UPGRADE_PRO_PREFIX_URL, 'field-output-formats-avif-upgrade' ) ) . '" target="_blank">',
54
  '</a>'
55
  )
56
  );
4
 
5
  use WebpConverter\Conversion\Method\RemoteMethod;
6
  use WebpConverter\Repository\TokenRepository;
 
7
 
8
  /**
9
  * Supports AVIF as output format for images.
49
  sprintf(
50
  /* translators: %1$s: open anchor tag, %2$s: close anchor tag */
51
  __( 'available in %1$sthe PRO version%2$s', 'webp-converter-for-media' ),
52
+ '<a href="https://url.mattplugins.com/converter-field-output-format-avif-upgrade" target="_blank">',
53
  '</a>'
54
  )
55
  );
src/Conversion/Media/Attachment.php CHANGED
@@ -58,7 +58,7 @@ class Attachment {
58
  private function get_paths_by_attachment( int $post_id, array $settings ): array {
59
  $list = [];
60
  $metadata = wp_get_attachment_metadata( $post_id );
61
- if ( ! $metadata || ! isset( $metadata['file'] ) ) {
62
  return $list;
63
  }
64
 
58
  private function get_paths_by_attachment( int $post_id, array $settings ): array {
59
  $list = [];
60
  $metadata = wp_get_attachment_metadata( $post_id );
61
+ if ( ! $metadata ) {
62
  return $list;
63
  }
64
 
src/Conversion/Media/Upload.php CHANGED
@@ -132,7 +132,7 @@ class Upload implements HookableInterface {
132
  return;
133
  }
134
 
135
- $this->cron_initiator->add_paths_to_conversion( $paths );
136
  $this->cron_initiator->init_async_conversion();
137
  }
138
  }
132
  return;
133
  }
134
 
135
+ $this->cron_initiator->add_paths_to_conversion( $paths, true );
136
  $this->cron_initiator->init_async_conversion();
137
  }
138
  }
src/Conversion/Method/RemoteMethod.php CHANGED
@@ -82,7 +82,7 @@ class RemoteMethod extends MethodAbstract {
82
  sprintf(
83
  /* translators: %%1$s: open anchor tag, %2$s: close anchor tag */
84
  __( 'available in %1$sthe PRO version%2$s', 'webp-converter-for-media' ),
85
- '<a href="' . esc_url( sprintf( WebpConverterConstants::UPGRADE_PRO_PREFIX_URL, 'field-conversion-method-remote-upgrade' ) ) . '" target="_blank">',
86
  '</a>'
87
  )
88
  );
82
  sprintf(
83
  /* translators: %%1$s: open anchor tag, %2$s: close anchor tag */
84
  __( 'available in %1$sthe PRO version%2$s', 'webp-converter-for-media' ),
85
+ '<a href="https://url.mattplugins.com/converter-field-conversion-method-remote-upgrade" target="_blank">',
86
  '</a>'
87
  )
88
  );
src/Conversion/PathsFinder.php CHANGED
@@ -99,19 +99,19 @@ class PathsFinder {
99
  * @return int[] Number of images to be converted to given output formats.
100
  */
101
  public function get_paths_count( array $allowed_output_formats ): array {
102
- $paths = $this->find_source_paths( true );
103
- $values = [];
104
  foreach ( $allowed_output_formats as $output_format ) {
105
  $values[ $output_format ] = 0;
106
  $values[ 'all_' . $output_format ] = 0;
107
- foreach ( $paths as $path ) {
108
- $output_path = $this->output_path->get_path( $path, false, $output_format );
109
  if ( $output_path === null ) {
110
  continue;
111
  }
112
 
113
  $values[ 'all_' . $output_format ]++;
114
- if ( ! $this->is_converted_file( $output_path ) ) {
115
  $values[ $output_format ]++;
116
  }
117
  }
@@ -128,19 +128,20 @@ class PathsFinder {
128
  /**
129
  * @param string[] $source_paths Server paths of source images.
130
  * @param string[]|null $allowed_output_formats List of extensions or use selected in plugin settings.
 
131
  *
132
  * @return string[] Server paths of source images.
133
  */
134
- public function skip_converted_paths( array $source_paths, array $allowed_output_formats = null ): array {
135
  $allowed_output_formats = $allowed_output_formats
136
  ?: $this->plugin_data->get_plugin_settings()[ OutputFormatsOption::OPTION_NAME ];
137
 
138
- foreach ( $source_paths as $path_index => $path ) {
139
  $is_converted = true;
140
  foreach ( $allowed_output_formats as $output_format ) {
141
- $output_path = $this->output_path->get_path( $path, false, $output_format );
142
 
143
- if ( $output_path && ! $this->is_converted_file( $output_path ) ) {
144
  $is_converted = false;
145
  break;
146
  }
@@ -181,13 +182,20 @@ class PathsFinder {
181
  return $list;
182
  }
183
 
184
- private function is_converted_file( string $output_path ): bool {
185
- return ( file_exists( $output_path )
186
- || file_exists( $output_path . '.' . SkipLarger::DELETED_FILE_EXTENSION )
187
- || file_exists( $output_path . '.' . SkipCrashed::CRASHED_FILE_EXTENSION )
188
- );
 
 
189
  }
190
 
 
 
 
 
 
191
  private function get_paths_chunk_size( int $paths_count ): int {
192
  $settings = $this->plugin_data->get_plugin_settings();
193
  if ( $settings[ ConversionMethodOption::OPTION_NAME ] !== RemoteMethod::METHOD_NAME ) {
99
  * @return int[] Number of images to be converted to given output formats.
100
  */
101
  public function get_paths_count( array $allowed_output_formats ): array {
102
+ $source_paths = $this->find_source_paths( true );
103
+ $values = [];
104
  foreach ( $allowed_output_formats as $output_format ) {
105
  $values[ $output_format ] = 0;
106
  $values[ 'all_' . $output_format ] = 0;
107
+ foreach ( $source_paths as $source_path ) {
108
+ $output_path = $this->output_path->get_path( $source_path, false, $output_format );
109
  if ( $output_path === null ) {
110
  continue;
111
  }
112
 
113
  $values[ 'all_' . $output_format ]++;
114
+ if ( ! $this->is_converted_file( $source_path, $output_path ) ) {
115
  $values[ $output_format ]++;
116
  }
117
  }
128
  /**
129
  * @param string[] $source_paths Server paths of source images.
130
  * @param string[]|null $allowed_output_formats List of extensions or use selected in plugin settings.
131
+ * @param bool $force_convert_modified Force re-conversion of images modified after previous conversion.
132
  *
133
  * @return string[] Server paths of source images.
134
  */
135
+ public function skip_converted_paths( array $source_paths, array $allowed_output_formats = null, bool $force_convert_modified = false ): array {
136
  $allowed_output_formats = $allowed_output_formats
137
  ?: $this->plugin_data->get_plugin_settings()[ OutputFormatsOption::OPTION_NAME ];
138
 
139
+ foreach ( $source_paths as $path_index => $source_path ) {
140
  $is_converted = true;
141
  foreach ( $allowed_output_formats as $output_format ) {
142
+ $output_path = $this->output_path->get_path( $source_path, false, $output_format );
143
 
144
+ if ( $output_path && ! $this->is_converted_file( $source_path, $output_path, $force_convert_modified ) ) {
145
  $is_converted = false;
146
  break;
147
  }
182
  return $list;
183
  }
184
 
185
+ private function is_converted_file( string $source_path, string $output_path, bool $force_convert_modified = false ): bool {
186
+ if ( file_exists( $output_path ) ) {
187
+ return ( $force_convert_modified ) ? ( filemtime( $source_path ) <= filemtime( $output_path ) ) : true;
188
+ }
189
+
190
+ return ( file_exists( $output_path . '.' . SkipLarger::DELETED_FILE_EXTENSION )
191
+ || file_exists( $output_path . '.' . SkipCrashed::CRASHED_FILE_EXTENSION ) );
192
  }
193
 
194
+ /**
195
+ * @param int $paths_count .
196
+ *
197
+ * @return int<1, max>
198
+ */
199
  private function get_paths_chunk_size( int $paths_count ): int {
200
  $settings = $this->plugin_data->get_plugin_settings();
201
  if ( $settings[ ConversionMethodOption::OPTION_NAME ] !== RemoteMethod::METHOD_NAME ) {
src/Error/Notice/LibsNotInstalledNotice.php CHANGED
@@ -2,8 +2,6 @@
2
 
3
  namespace WebpConverter\Error\Notice;
4
 
5
- use WebpConverter\WebpConverterConstants;
6
-
7
  /**
8
  * {@inheritdoc}
9
  */
@@ -26,7 +24,7 @@ class LibsNotInstalledNotice implements ErrorNotice {
26
  sprintf(
27
  /* translators: %1$s: open anchor tag, %2$s: close anchor tag */
28
  __( 'On your server is not installed GD or Imagick library.', 'webp-converter-for-media' ) . ' ' . __( 'This means that you cannot convert images to WebP format on your server, because it does not meet the plugin requirements described in %1$sthe plugin FAQ%2$s. This issue is not dependent on the plugin.', 'webp-converter-for-media' ),
29
- '<a href="https://wordpress.org/plugins/webp-converter-for-media/#faq" target="_blank">',
30
  '</a>'
31
  ),
32
  sprintf(
@@ -34,7 +32,7 @@ class LibsNotInstalledNotice implements ErrorNotice {
34
  __( '%1$sHowever, we have a solution for you!%2$s You can activate %3$sthe PRO version%4$s of the plugin that allows you to convert images using a remote server. This will allow you to convert images without any problems and speed up your website now.', 'webp-converter-for-media' ),
35
  '<strong>',
36
  '</strong>',
37
- '<a href="' . esc_url( sprintf( WebpConverterConstants::UPGRADE_PRO_PREFIX_URL, 'error-notice-required-libs' ) ) . '" target="_blank">',
38
  '</a>'
39
  ),
40
  ];
2
 
3
  namespace WebpConverter\Error\Notice;
4
 
 
 
5
  /**
6
  * {@inheritdoc}
7
  */
24
  sprintf(
25
  /* translators: %1$s: open anchor tag, %2$s: close anchor tag */
26
  __( 'On your server is not installed GD or Imagick library.', 'webp-converter-for-media' ) . ' ' . __( 'This means that you cannot convert images to WebP format on your server, because it does not meet the plugin requirements described in %1$sthe plugin FAQ%2$s. This issue is not dependent on the plugin.', 'webp-converter-for-media' ),
27
+ '<a href="https://url.mattplugins.com/converter-error-libs-not-installed-faq" target="_blank">',
28
  '</a>'
29
  ),
30
  sprintf(
32
  __( '%1$sHowever, we have a solution for you!%2$s You can activate %3$sthe PRO version%4$s of the plugin that allows you to convert images using a remote server. This will allow you to convert images without any problems and speed up your website now.', 'webp-converter-for-media' ),
33
  '<strong>',
34
  '</strong>',
35
+ '<a href="https://url.mattplugins.com/converter-error-libs-not-installed-upgrade" target="_blank">',
36
  '</a>'
37
  ),
38
  ];
src/Error/Notice/LibsWithoutWebpSupportNotice.php CHANGED
@@ -2,8 +2,6 @@
2
 
3
  namespace WebpConverter\Error\Notice;
4
 
5
- use WebpConverter\WebpConverterConstants;
6
-
7
  /**
8
  * {@inheritdoc}
9
  */
@@ -26,7 +24,7 @@ class LibsWithoutWebpSupportNotice implements ErrorNotice {
26
  sprintf(
27
  /* translators: %1$s: open anchor tag, %2$s: close anchor tag */
28
  __( 'Required GD or Imagick library is installed on your server, but it does not support the WebP format.', 'webp-converter-for-media' ) . ' ' . __( 'This means that you cannot convert images to WebP format on your server, because it does not meet the plugin requirements described in %1$sthe plugin FAQ%2$s. This issue is not dependent on the plugin.', 'webp-converter-for-media' ),
29
- '<a href="https://wordpress.org/plugins/webp-converter-for-media/#faq" target="_blank">',
30
  '</a>'
31
  ),
32
  sprintf(
@@ -34,7 +32,7 @@ class LibsWithoutWebpSupportNotice implements ErrorNotice {
34
  __( '%1$sHowever, we have a solution for you!%2$s You can activate %3$sthe PRO version%4$s of the plugin that allows you to convert images using a remote server. This will allow you to convert images without any problems and speed up your website now.', 'webp-converter-for-media' ),
35
  '<strong>',
36
  '</strong>',
37
- '<a href="' . esc_url( sprintf( WebpConverterConstants::UPGRADE_PRO_PREFIX_URL, 'error-notice-webp-support' ) ) . '" target="_blank">',
38
  '</a>'
39
  ),
40
  ];
2
 
3
  namespace WebpConverter\Error\Notice;
4
 
 
 
5
  /**
6
  * {@inheritdoc}
7
  */
24
  sprintf(
25
  /* translators: %1$s: open anchor tag, %2$s: close anchor tag */
26
  __( 'Required GD or Imagick library is installed on your server, but it does not support the WebP format.', 'webp-converter-for-media' ) . ' ' . __( 'This means that you cannot convert images to WebP format on your server, because it does not meet the plugin requirements described in %1$sthe plugin FAQ%2$s. This issue is not dependent on the plugin.', 'webp-converter-for-media' ),
27
+ '<a href="https://url.mattplugins.com/converter-error-libs-without-webp-support-faq" target="_blank">',
28
  '</a>'
29
  ),
30
  sprintf(
32
  __( '%1$sHowever, we have a solution for you!%2$s You can activate %3$sthe PRO version%4$s of the plugin that allows you to convert images using a remote server. This will allow you to convert images without any problems and speed up your website now.', 'webp-converter-for-media' ),
33
  '<strong>',
34
  '</strong>',
35
+ '<a href="https://url.mattplugins.com/converter-error-libs-without-webp-support-upgrade" target="_blank">',
36
  '</a>'
37
  ),
38
  ];
src/Error/Notice/PathUploadsUnavailableNotice.php CHANGED
@@ -26,7 +26,7 @@ class PathUploadsUnavailableNotice implements ErrorNotice {
26
  __( 'The path for /uploads files does not exist (function is_dir() returns false). Use filter %1$s to set the correct path. The current using path is: %2$s. Please read %3$sthe plugin FAQ%4$s to learn more.', 'webp-converter-for-media' ),
27
  '<strong>webpc_dir_path</strong>',
28
  '<strong>' . apply_filters( 'webpc_dir_path', '', 'uploads' ) . '</strong>',
29
- '<a href="https://wordpress.org/plugins/webp-converter-for-media/#faq" target="_blank">',
30
  '</a>'
31
  ),
32
  ];
26
  __( 'The path for /uploads files does not exist (function is_dir() returns false). Use filter %1$s to set the correct path. The current using path is: %2$s. Please read %3$sthe plugin FAQ%4$s to learn more.', 'webp-converter-for-media' ),
27
  '<strong>webpc_dir_path</strong>',
28
  '<strong>' . apply_filters( 'webpc_dir_path', '', 'uploads' ) . '</strong>',
29
+ '<a href="https://url.mattplugins.com/converter-error-path-uploads-unavailable-faq" target="_blank">',
30
  '</a>'
31
  ),
32
  ];
src/Error/Notice/PathWebpNotWritableNotice.php CHANGED
@@ -26,7 +26,7 @@ class PathWebpNotWritableNotice implements ErrorNotice {
26
  __( 'The path for saving converted WebP files does not exist and cannot be created (function is_writable() returns false). Use filter %1$s to set the correct path. The current using path is: %2$s. Please read %3$sthe plugin FAQ%4$s to learn more.', 'webp-converter-for-media' ),
27
  '<strong>webpc_dir_path</strong>',
28
  '<strong>' . apply_filters( 'webpc_dir_path', '', 'webp' ) . '</strong>',
29
- '<a href="https://wordpress.org/plugins/webp-converter-for-media/#faq" target="_blank">',
30
  '</a>'
31
  ),
32
  ];
26
  __( 'The path for saving converted WebP files does not exist and cannot be created (function is_writable() returns false). Use filter %1$s to set the correct path. The current using path is: %2$s. Please read %3$sthe plugin FAQ%4$s to learn more.', 'webp-converter-for-media' ),
27
  '<strong>webpc_dir_path</strong>',
28
  '<strong>' . apply_filters( 'webpc_dir_path', '', 'webp' ) . '</strong>',
29
+ '<a href="https://url.mattplugins.com/converter-error-path-webp-not-writable-faq" target="_blank">',
30
  '</a>'
31
  ),
32
  ];
src/Error/Notice/RewritesNotExecutedNotice.php CHANGED
@@ -29,7 +29,7 @@ class RewritesNotExecutedNotice implements ErrorNotice {
29
  $server_name ?: 'Nginx',
30
  '<br><strong>',
31
  get_home_url(),
32
- '<a href="https://wordpress.org/plugins/webp-converter-for-media/faq/" target="_blank">https://wordpress.org/plugins/webp-converter-for-media/faq/</a>',
33
  'Configuration for Nginx',
34
  '</strong>'
35
  ),
29
  $server_name ?: 'Nginx',
30
  '<br><strong>',
31
  get_home_url(),
32
+ '<a href="https://url.mattplugins.com/converter-error-rewrites-not-executed-faq" target="_blank">https://wordpress.org/plugins/webp-converter-for-media/faq/</a>',
33
  'Configuration for Nginx',
34
  '</strong>'
35
  ),
src/Error/Notice/RewritesNotWorkingNotice.php CHANGED
@@ -24,7 +24,7 @@ class RewritesNotWorkingNotice implements ErrorNotice {
24
  sprintf(
25
  /* translators: %1$s: open strong tag, %2$s: close strong tag */
26
  __( 'Redirects on your server are not working. Check the correct configuration for you in %1$sthe plugin FAQ%2$s. If you have checked the configuration, it means that your server does not support redirects from the .htaccess file or your server configuration is not compatible with this plugin.', 'webp-converter-for-media' ),
27
- '<a href="https://wordpress.org/plugins/webp-converter-for-media/#faq" target="_blank">',
28
  '</a>'
29
  ),
30
  __( 'In this case, please contact your server administrator.', 'webp-converter-for-media' ),
24
  sprintf(
25
  /* translators: %1$s: open strong tag, %2$s: close strong tag */
26
  __( 'Redirects on your server are not working. Check the correct configuration for you in %1$sthe plugin FAQ%2$s. If you have checked the configuration, it means that your server does not support redirects from the .htaccess file or your server configuration is not compatible with this plugin.', 'webp-converter-for-media' ),
27
+ '<a href="https://url.mattplugins.com/converter-error-rewrites-not-working-faq" target="_blank">',
28
  '</a>'
29
  ),
30
  __( 'In this case, please contact your server administrator.', 'webp-converter-for-media' ),
src/Exception/FilesizeOversizeException.php CHANGED
@@ -14,9 +14,10 @@ class FilesizeOversizeException extends ExceptionAbstract {
14
  * {@inheritdoc}
15
  */
16
  public function get_error_message( array $values ): string {
 
17
  return sprintf(
18
  self::ERROR_MESSAGE,
19
- round( $values[0] / 1024 / 1024 ),
20
  $values[1]
21
  );
22
  }
14
  * {@inheritdoc}
15
  */
16
  public function get_error_message( array $values ): string {
17
+ $number = (int) $values[0];
18
  return sprintf(
19
  self::ERROR_MESSAGE,
20
+ round( $number / 1024 / 1024 ),
21
  $values[1]
22
  );
23
  }
src/Plugin/Links.php CHANGED
@@ -6,7 +6,6 @@ use WebpConverter\HookableInterface;
6
  use WebpConverter\PluginInfo;
7
  use WebpConverter\Repository\TokenRepository;
8
  use WebpConverter\Settings\Page\PageIntegration;
9
- use WebpConverter\WebpConverterConstants;
10
 
11
  /**
12
  * Adds links to plugin in list of plugins in panel.
@@ -95,11 +94,10 @@ class Links implements HookableInterface {
95
  return $links;
96
  }
97
 
98
- $upgrade_url = sprintf( WebpConverterConstants::UPGRADE_PRO_PREFIX_URL, 'plugin-links-upgrade' );
99
- $links[] = sprintf(
100
  /* translators: %1$s: open anchor tag, %2$s: close anchor tag */
101
  esc_html( __( '%1$sUpgrade to PRO%2$s', 'webp-converter-for-media' ) ),
102
- '<a href="' . esc_url( $upgrade_url ) . '" target="_blank" style="font-weight: bold;">',
103
  '</a>'
104
  );
105
  return $links;
6
  use WebpConverter\PluginInfo;
7
  use WebpConverter\Repository\TokenRepository;
8
  use WebpConverter\Settings\Page\PageIntegration;
 
9
 
10
  /**
11
  * Adds links to plugin in list of plugins in panel.
94
  return $links;
95
  }
96
 
97
+ $links[] = sprintf(
 
98
  /* translators: %1$s: open anchor tag, %2$s: close anchor tag */
99
  esc_html( __( '%1$sUpgrade to PRO%2$s', 'webp-converter-for-media' ) ),
100
+ '<a href="https://url.mattplugins.com/converter-plugin-links-upgrade" target="_blank" style="font-weight: bold;">',
101
  '</a>'
102
  );
103
  return $links;
src/Service/DeactivationModalGenerator.php CHANGED
@@ -87,7 +87,7 @@ class DeactivationModalGenerator {
87
  return sprintf(
88
  /* translators: %1$s: open anchor tag, %2$s: close anchor tag */
89
  __( 'Check out %1$sour instructions%2$s and see how to check if the plugin is working properly.', 'webp-converter-for-media' ),
90
- '<a href="https://wordpress.org/support/topic/how-can-i-check-if-the-plugin-is-working-properly/" target="_blank">',
91
  '</a>'
92
  );
93
  },
87
  return sprintf(
88
  /* translators: %1$s: open anchor tag, %2$s: close anchor tag */
89
  __( 'Check out %1$sour instructions%2$s and see how to check if the plugin is working properly.', 'webp-converter-for-media' ),
90
+ '<a href="https://url.mattplugins.com/converter-deactivation-misunderstanding-instruction" target="_blank">',
91
  '</a>'
92
  );
93
  },
src/Service/MediaStatusViewer.php CHANGED
@@ -57,6 +57,14 @@ class MediaStatusViewer implements HookableInterface {
57
  * {@inheritdoc}
58
  */
59
  public function init_hooks() {
 
 
 
 
 
 
 
 
60
  $plugin_settings = $this->plugin_data->get_plugin_settings();
61
  if ( ! $plugin_settings[ MediaStatsOption::OPTION_NAME ] ) {
62
  return;
@@ -65,6 +73,7 @@ class MediaStatusViewer implements HookableInterface {
65
  add_filter( 'manage_media_columns', [ $this, 'add_custom_table_column' ] );
66
  add_action( 'manage_media_custom_column', [ $this, 'print_table_column_value' ], 10, 2 );
67
  add_action( 'attachment_submitbox_misc_actions', [ $this, 'print_attachment_sidebar_value' ], 20 );
 
68
  }
69
 
70
  /**
@@ -113,11 +122,7 @@ class MediaStatusViewer implements HookableInterface {
113
  $conversion_status[] = sprintf(
114
  /* translators: %s: plugin name */
115
  '<small>' . __( 'Optimized by: %s', 'webp-converter-for-media' ) . '</small>',
116
- sprintf(
117
- '<a href="%1$s">%2$s</a>',
118
- esc_attr( PageIntegration::get_settings_page_url() ),
119
- __( 'Converter for Media', 'webp-converter-for-media' )
120
- )
121
  );
122
 
123
  ?>
@@ -127,6 +132,37 @@ class MediaStatusViewer implements HookableInterface {
127
  <?php
128
  }
129
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
130
  /**
131
  * @param int $post_id .
132
  *
@@ -178,22 +214,36 @@ class MediaStatusViewer implements HookableInterface {
178
  /* translators: %s: file size */
179
  __( 'Optimized file size: %s', 'webp-converter-for-media' ),
180
  ( $size_optimized )
181
- ? sprintf( '<strong>%1$s (%2$s)</strong>', size_format( $size_optimized ), $this->get_percent_value( $size_original, $size_optimized ) )
 
 
 
 
 
 
182
  : '<strong>-</strong>'
183
  ),
184
  sprintf(
185
- /* translators: %s: number of images */
186
- __( 'WebP generated: %s', 'webp-converter-for-media' ),
 
187
  ( count( $webp_source_size ) > 0 )
188
- ? sprintf( '<strong>%1$s (%2$s)</strong>', count( $webp_source_size ), $this->get_percent_value( $webp_source_size, $webp_output_size ) )
 
 
 
 
 
 
189
  : '<strong>0</strong>'
190
  ),
191
  ];
192
 
193
  if ( ! $this->token->get_valid_status() ) {
194
  $rows[] = sprintf(
195
- /* translators: %s: number of images */
196
- __( 'AVIF generated: %s', 'webp-converter-for-media' ),
 
197
  sprintf(
198
  '<strong>%1$s</strong> <small>(<a href="%2$s">%3$s</a>)</small>',
199
  count( $avif_source_size ),
@@ -203,10 +253,17 @@ class MediaStatusViewer implements HookableInterface {
203
  );
204
  } else {
205
  $rows[] = sprintf(
206
- /* translators: %s: number of images */
207
- __( 'AVIF generated: %s', 'webp-converter-for-media' ),
 
208
  ( count( $avif_source_size ) > 0 )
209
- ? sprintf( '<strong>%1$s (%2$s)</strong>', count( $avif_source_size ), $this->get_percent_value( $avif_source_size, $avif_output_size ) )
 
 
 
 
 
 
210
  : '<strong>0</strong>'
211
  );
212
  }
57
  * {@inheritdoc}
58
  */
59
  public function init_hooks() {
60
+ add_action( 'init', [ $this, 'init_hooks_after_setup' ] );
61
+ }
62
+
63
+ /**
64
+ * @return void
65
+ * @internal
66
+ */
67
+ public function init_hooks_after_setup() {
68
  $plugin_settings = $this->plugin_data->get_plugin_settings();
69
  if ( ! $plugin_settings[ MediaStatsOption::OPTION_NAME ] ) {
70
  return;
73
  add_filter( 'manage_media_columns', [ $this, 'add_custom_table_column' ] );
74
  add_action( 'manage_media_custom_column', [ $this, 'print_table_column_value' ], 10, 2 );
75
  add_action( 'attachment_submitbox_misc_actions', [ $this, 'print_attachment_sidebar_value' ], 20 );
76
+ add_filter( 'wp_prepare_attachment_for_js', [ $this, 'add_status_for_attachment_data' ], 10, 2 );
77
  }
78
 
79
  /**
122
  $conversion_status[] = sprintf(
123
  /* translators: %s: plugin name */
124
  '<small>' . __( 'Optimized by: %s', 'webp-converter-for-media' ) . '</small>',
125
+ sprintf( '<a href="%1$s">%2$s</a>', esc_attr( PageIntegration::get_settings_page_url() ), 'Converter for Media' )
 
 
 
 
126
  );
127
 
128
  ?>
132
  <?php
133
  }
134
 
135
+ /**
136
+ * @param mixed[] $response .
137
+ * @param \WP_Post $attachment .
138
+ *
139
+ * @return mixed[]
140
+ * @internal
141
+ */
142
+ public function add_status_for_attachment_data( array $response, \WP_Post $attachment ): array {
143
+ $source_post_id = (string) ( $_REQUEST['post_id'] ?? '' ); // phpcs:ignore WordPress.Security
144
+ if ( $source_post_id !== '0' ) {
145
+ return $response;
146
+ }
147
+
148
+ $conversion_status = $this->get_conversion_status( $attachment->ID );
149
+ if ( $conversion_status === null ) {
150
+ return $response;
151
+ }
152
+
153
+ $conversion_status[] = sprintf(
154
+ /* translators: %s: plugin name */
155
+ '<small>' . __( 'Optimized by: %s', 'webp-converter-for-media' ) . '</small>',
156
+ sprintf( '<a href="%1$s">%2$s</a>', esc_attr( PageIntegration::get_settings_page_url() ), 'Converter for Media' )
157
+ );
158
+
159
+ $response['compat'] = $response['compat'] ?? [];
160
+ $response['compat']['meta'] = $response['compat']['meta'] ?? '';
161
+
162
+ $response['compat']['meta'] .= '<br>' . wp_kses_post( implode( '<br>', $conversion_status ) );
163
+ return $response;
164
+ }
165
+
166
  /**
167
  * @param int $post_id .
168
  *
214
  /* translators: %s: file size */
215
  __( 'Optimized file size: %s', 'webp-converter-for-media' ),
216
  ( $size_optimized )
217
+ ?
218
+ sprintf(
219
+ '<strong>%1$s <abbr title="%2$s">(%3$s)</abbr></strong>',
220
+ size_format( $size_optimized ),
221
+ esc_attr( __( 'File size reduction of the uploaded image compared to the original one.', 'webp-converter-for-media' ) ),
222
+ $this->get_percent_value( $size_original, $size_optimized )
223
+ )
224
  : '<strong>-</strong>'
225
  ),
226
  sprintf(
227
+ /* translators: %1$s: output format, %2$s: number of images */
228
+ __( 'Files converted to %1$s: %2$s', 'webp-converter-for-media' ),
229
+ 'WebP',
230
  ( count( $webp_source_size ) > 0 )
231
+ ?
232
+ sprintf(
233
+ '<strong>%1$s <abbr title="%2$s">(%3$s)</abbr></strong>',
234
+ count( $webp_source_size ),
235
+ esc_attr( __( 'File size reduction of all thumbnails compared to the original ones.', 'webp-converter-for-media' ) ),
236
+ $this->get_percent_value( $webp_source_size, $webp_output_size )
237
+ )
238
  : '<strong>0</strong>'
239
  ),
240
  ];
241
 
242
  if ( ! $this->token->get_valid_status() ) {
243
  $rows[] = sprintf(
244
+ /* translators: %1$s: output format, %2$s: number of images */
245
+ __( 'Files converted to %1$s: %2$s', 'webp-converter-for-media' ),
246
+ 'AVIF',
247
  sprintf(
248
  '<strong>%1$s</strong> <small>(<a href="%2$s">%3$s</a>)</small>',
249
  count( $avif_source_size ),
253
  );
254
  } else {
255
  $rows[] = sprintf(
256
+ /* translators: %1$s: output format, %2$s: number of images */
257
+ __( 'Files converted to %1$s: %2$s', 'webp-converter-for-media' ),
258
+ 'AVIF',
259
  ( count( $avif_source_size ) > 0 )
260
+ ?
261
+ sprintf(
262
+ '<strong>%1$s <abbr title="%2$s">(%3$s)</abbr></strong>',
263
+ count( $avif_source_size ),
264
+ esc_attr( __( 'File size reduction of all thumbnails compared to the original ones.', 'webp-converter-for-media' ) ),
265
+ $this->get_percent_value( $avif_source_size, $avif_output_size )
266
+ )
267
  : '<strong>0</strong>'
268
  );
269
  }
src/Settings/AdminAssets.php CHANGED
@@ -38,12 +38,12 @@ class AdminAssets implements HookableInterface {
38
  */
39
  public function load_styles() {
40
  wp_register_style(
41
- 'webp-converter',
42
  $this->plugin_info->get_plugin_directory_url() . self::CSS_FILE_PATH,
43
  [],
44
  $this->plugin_info->get_plugin_version()
45
  );
46
- wp_enqueue_style( 'webp-converter' );
47
  }
48
 
49
  /**
@@ -54,12 +54,12 @@ class AdminAssets implements HookableInterface {
54
  */
55
  public function load_scripts() {
56
  wp_register_script(
57
- 'webp-converter',
58
  $this->plugin_info->get_plugin_directory_url() . self::JS_FILE_PATH,
59
  [],
60
  $this->plugin_info->get_plugin_version(),
61
  true
62
  );
63
- wp_enqueue_script( 'webp-converter' );
64
  }
65
  }
38
  */
39
  public function load_styles() {
40
  wp_register_style(
41
+ 'converter-for-media',
42
  $this->plugin_info->get_plugin_directory_url() . self::CSS_FILE_PATH,
43
  [],
44
  $this->plugin_info->get_plugin_version()
45
  );
46
+ wp_enqueue_style( 'converter-for-media' );
47
  }
48
 
49
  /**
54
  */
55
  public function load_scripts() {
56
  wp_register_script(
57
+ 'converter-for-media',
58
  $this->plugin_info->get_plugin_directory_url() . self::JS_FILE_PATH,
59
  [],
60
  $this->plugin_info->get_plugin_version(),
61
  true
62
  );
63
+ wp_enqueue_script( 'converter-for-media' );
64
  }
65
  }
src/Settings/Option/AccessTokenOption.php CHANGED
@@ -3,7 +3,6 @@
3
  namespace WebpConverter\Settings\Option;
4
 
5
  use WebpConverter\Repository\TokenRepository;
6
- use WebpConverter\WebpConverterConstants;
7
 
8
  /**
9
  * {@inheritdoc}
@@ -57,7 +56,7 @@ class AccessTokenOption extends OptionAbstract {
57
  return sprintf(
58
  /* translators: %1$s: open anchor tag, %2$s: close anchor tag */
59
  __( 'To manage your subscriptions, please visit %1$sour website%2$s.', 'webp-converter-for-media' ),
60
- '<a href="' . esc_url( WebpConverterConstants::SUBSCRIPTION_MANAGEMENT_URL ) . '" target="_blank">',
61
  '</a>'
62
  );
63
  }
@@ -65,9 +64,9 @@ class AccessTokenOption extends OptionAbstract {
65
  return sprintf(
66
  /* translators: %1$s: open anchor tag, %2$s: close anchor tag, %3$s: open anchor tag, %4$s: close anchor tag */
67
  __( 'Provide a valid token to access %1$sthe PRO functionalities%2$s. You can find out more about it %3$shere%4$s.', 'webp-converter-for-media' ),
68
- '<a href="' . esc_url( sprintf( WebpConverterConstants::UPGRADE_PRO_PREFIX_URL, 'field-access-token-pro-features' ) ) . '" target="_blank">',
69
  '</a>',
70
- '<a href="' . esc_url( sprintf( WebpConverterConstants::UPGRADE_PRO_PREFIX_URL, 'field-access-token-upgrade' ) ) . '" target="_blank">',
71
  '</a>'
72
  );
73
  }
3
  namespace WebpConverter\Settings\Option;
4
 
5
  use WebpConverter\Repository\TokenRepository;
 
6
 
7
  /**
8
  * {@inheritdoc}
56
  return sprintf(
57
  /* translators: %1$s: open anchor tag, %2$s: close anchor tag */
58
  __( 'To manage your subscriptions, please visit %1$sour website%2$s.', 'webp-converter-for-media' ),
59
+ '<a href="https://url.mattplugins.com/converter-field-access-token-management" target="_blank">',
60
  '</a>'
61
  );
62
  }
64
  return sprintf(
65
  /* translators: %1$s: open anchor tag, %2$s: close anchor tag, %3$s: open anchor tag, %4$s: close anchor tag */
66
  __( 'Provide a valid token to access %1$sthe PRO functionalities%2$s. You can find out more about it %3$shere%4$s.', 'webp-converter-for-media' ),
67
+ '<a href="https://url.mattplugins.com/converter-field-access-token-pro-features" target="_blank">',
68
  '</a>',
69
+ '<a href="https://url.mattplugins.com/converter-field-access-token-find-more" target="_blank">',
70
  '</a>'
71
  );
72
  }
src/Settings/Option/ConversionMethodOption.php CHANGED
@@ -4,7 +4,6 @@ namespace WebpConverter\Settings\Option;
4
 
5
  use WebpConverter\Conversion\Method\MethodFactory;
6
  use WebpConverter\Repository\TokenRepository;
7
- use WebpConverter\WebpConverterConstants;
8
 
9
  /**
10
  * {@inheritdoc}
@@ -70,7 +69,7 @@ class ConversionMethodOption extends OptionAbstract {
70
  $notice[] = sprintf(
71
  /* translators: %1$s: open anchor tag, %2$s: close anchor tag */
72
  __( '%1$sUpgrade to PRO%2$s', 'webp-converter-for-media' ),
73
- '<a href="' . esc_url( sprintf( WebpConverterConstants::UPGRADE_PRO_PREFIX_URL, 'field-conversion-method-info' ) ) . '" target="_blank">',
74
  ' <span class="dashicons dashicons-arrow-right-alt"></span></a>'
75
  );
76
  }
4
 
5
  use WebpConverter\Conversion\Method\MethodFactory;
6
  use WebpConverter\Repository\TokenRepository;
 
7
 
8
  /**
9
  * {@inheritdoc}
69
  $notice[] = sprintf(
70
  /* translators: %1$s: open anchor tag, %2$s: close anchor tag */
71
  __( '%1$sUpgrade to PRO%2$s', 'webp-converter-for-media' ),
72
+ '<a href="https://url.mattplugins.com/converter-field-conversion-method-info" target="_blank">',
73
  ' <span class="dashicons dashicons-arrow-right-alt"></span></a>'
74
  );
75
  }
src/Settings/Option/ImageResizeOption.php CHANGED
@@ -3,7 +3,6 @@
3
  namespace WebpConverter\Settings\Option;
4
 
5
  use WebpConverter\Repository\TokenRepository;
6
- use WebpConverter\WebpConverterConstants;
7
 
8
  /**
9
  * {@inheritdoc}
@@ -62,7 +61,7 @@ class ImageResizeOption extends OptionAbstract {
62
  sprintf(
63
  /* translators: %1$s: open anchor tag, %2$s: close anchor tag */
64
  __( 'available in %1$sthe PRO version%2$s', 'webp-converter-for-media' ),
65
- '<a href="' . esc_url( sprintf( WebpConverterConstants::UPGRADE_PRO_PREFIX_URL, 'field-image-resize-upgrade' ) ) . '" target="_blank">',
66
  '</a>'
67
  )
68
  );
@@ -88,7 +87,7 @@ class ImageResizeOption extends OptionAbstract {
88
  $notice[] = sprintf(
89
  /* translators: %1$s: open anchor tag, %2$s: close anchor tag */
90
  __( '%1$sUpgrade to PRO%2$s', 'webp-converter-for-media' ),
91
- '<a href="' . esc_url( sprintf( WebpConverterConstants::UPGRADE_PRO_PREFIX_URL, 'field-image-resize-info' ) ) . '" target="_blank">',
92
  ' <span class="dashicons dashicons-arrow-right-alt"></span></a>'
93
  );
94
  }
3
  namespace WebpConverter\Settings\Option;
4
 
5
  use WebpConverter\Repository\TokenRepository;
 
6
 
7
  /**
8
  * {@inheritdoc}
61
  sprintf(
62
  /* translators: %1$s: open anchor tag, %2$s: close anchor tag */
63
  __( 'available in %1$sthe PRO version%2$s', 'webp-converter-for-media' ),
64
+ '<a href="https://url.mattplugins.com/converter-field-image-resize-upgrade" target="_blank">',
65
  '</a>'
66
  )
67
  );
87
  $notice[] = sprintf(
88
  /* translators: %1$s: open anchor tag, %2$s: close anchor tag */
89
  __( '%1$sUpgrade to PRO%2$s', 'webp-converter-for-media' ),
90
+ '<a href="https://url.mattplugins.com/converter-field-image-resize-info" target="_blank">',
91
  ' <span class="dashicons dashicons-arrow-right-alt"></span></a>'
92
  );
93
  }
src/Settings/Option/OutputFormatsOption.php CHANGED
@@ -6,7 +6,6 @@ use WebpConverter\Conversion\Format\AvifFormat;
6
  use WebpConverter\Conversion\Format\FormatFactory;
7
  use WebpConverter\Conversion\Format\WebpFormat;
8
  use WebpConverter\Repository\TokenRepository;
9
- use WebpConverter\WebpConverterConstants;
10
 
11
  /**
12
  * {@inheritdoc}
@@ -78,7 +77,7 @@ class OutputFormatsOption extends OptionAbstract {
78
  $notice[] = sprintf(
79
  /* translators: %1$s: open anchor tag, %2$s: close anchor tag */
80
  __( '%1$sUpgrade to PRO%2$s', 'webp-converter-for-media' ),
81
- '<a href="' . esc_url( sprintf( WebpConverterConstants::UPGRADE_PRO_PREFIX_URL, 'field-output-formats-info' ) ) . '" target="_blank">',
82
  ' <span class="dashicons dashicons-arrow-right-alt"></span></a>'
83
  );
84
  }
6
  use WebpConverter\Conversion\Format\FormatFactory;
7
  use WebpConverter\Conversion\Format\WebpFormat;
8
  use WebpConverter\Repository\TokenRepository;
 
9
 
10
  /**
11
  * {@inheritdoc}
77
  $notice[] = sprintf(
78
  /* translators: %1$s: open anchor tag, %2$s: close anchor tag */
79
  __( '%1$sUpgrade to PRO%2$s', 'webp-converter-for-media' ),
80
+ '<a href="https://url.mattplugins.com/converter-field-output-formats-info" target="_blank">',
81
  ' <span class="dashicons dashicons-arrow-right-alt"></span></a>'
82
  );
83
  }
src/Settings/Page/GeneralSettingsPage.php CHANGED
@@ -14,7 +14,6 @@ use WebpConverter\Service\NonceManager;
14
  use WebpConverter\Settings\Option\OptionAbstract;
15
  use WebpConverter\Settings\PluginOptions;
16
  use WebpConverter\Settings\SettingsSave;
17
- use WebpConverter\WebpConverterConstants;
18
 
19
  /**
20
  * {@inheritdoc}
@@ -105,7 +104,7 @@ class GeneralSettingsPage extends PageAbstract {
105
  ? sprintf(
106
  /* translators: %1$s: open anchor tag, %2$s: close anchor tag */
107
  __( 'available in %1$sthe PRO version%2$s', 'webp-converter-for-media' ),
108
- '<a href="' . esc_url( sprintf( WebpConverterConstants::UPGRADE_PRO_PREFIX_URL, 'regeneration-widget-avif-upgrade' ) ) . '" target="_blank">',
109
  '</a>'
110
  )
111
  : null,
14
  use WebpConverter\Settings\Option\OptionAbstract;
15
  use WebpConverter\Settings\PluginOptions;
16
  use WebpConverter\Settings\SettingsSave;
 
17
 
18
  /**
19
  * {@inheritdoc}
104
  ? sprintf(
105
  /* translators: %1$s: open anchor tag, %2$s: close anchor tag */
106
  __( 'available in %1$sthe PRO version%2$s', 'webp-converter-for-media' ),
107
+ '<a href="https://url.mattplugins.com/converter-regeneration-widget-avif-upgrade" target="_blank">',
108
  '</a>'
109
  )
110
  : null,
src/WebpConverterConstants.php CHANGED
@@ -7,13 +7,6 @@ namespace WebpConverter;
7
  */
8
  class WebpConverterConstants {
9
 
10
- /**
11
- * URLs.
12
- */
13
- const UPGRADE_PRO_PREFIX_URL = 'https://mattplugins.com/products/webp-converter-for-media-pro/?utm_source=webp-converter-for-media&utm_campaign=upgrade-to-pro&utm_medium=%s';
14
- const OPTIMIZATION_TEST_PREFIX_URL = 'https://mattplugins.com/image-optimization-test/?utm_source=webp-converter-for-media&utm_campaign=upgrade-to-pro&utm_medium=%s';
15
- const SUBSCRIPTION_MANAGEMENT_URL = 'https://panel.mattplugins.com';
16
-
17
  /**
18
  * API.
19
  */
7
  */
8
  class WebpConverterConstants {
9
 
 
 
 
 
 
 
 
10
  /**
11
  * API.
12
  */
templates/components/notices/thanks.php CHANGED
@@ -26,7 +26,7 @@
26
  ?>
27
  </p>
28
  <div class="webpcContent__buttons">
29
- <a href="https://wordpress.org/support/plugin/webp-converter-for-media/reviews/?rate=5#new-post"
30
  target="_blank"
31
  class="webpcContent__button webpcButton webpcButton--blue webpcButton--bg"
32
  >
26
  ?>
27
  </p>
28
  <div class="webpcContent__buttons">
29
+ <a href="https://url.mattplugins.com/converter-notice-thanks-button-review"
30
  target="_blank"
31
  class="webpcContent__button webpcButton webpcButton--blue webpcButton--bg"
32
  >
templates/components/notices/welcome.php CHANGED
@@ -33,5 +33,6 @@
33
  <?php echo esc_html( __( 'Speed up my website', 'webp-converter-for-media' ) ); ?>
34
  </a>
35
  </div>
 
36
  </div>
37
  </div>
33
  <?php echo esc_html( __( 'Speed up my website', 'webp-converter-for-media' ) ); ?>
34
  </a>
35
  </div>
36
+ <img src="https://mattplugins.com/images/matt-plugins-logo.png" alt="">
37
  </div>
38
  </div>
templates/components/server/filters.php CHANGED
@@ -47,6 +47,12 @@ use WebpConverter\Service\PathsGenerator;
47
  <?php echo esc_html( apply_filters( 'webpc_dir_path', '', 'webp' ) ); ?>
48
  </td>
49
  </tr>
 
 
 
 
 
 
50
  <tr>
51
  <td class="e">webpc_htaccess_rewrite_root</td>
52
  <td class="v">
47
  <?php echo esc_html( apply_filters( 'webpc_dir_path', '', 'webp' ) ); ?>
48
  </td>
49
  </tr>
50
+ <tr>
51
+ <td class="e">webpc_source_directories</td>
52
+ <td class="v">
53
+ <?php echo esc_html( json_encode( apply_filters( 'webpc_source_directories', [] ) ) ?: '-' ); ?>
54
+ </td>
55
+ </tr>
56
  <tr>
57
  <td class="e">webpc_htaccess_rewrite_root</td>
58
  <td class="v">
templates/components/widgets/about.php CHANGED
@@ -26,7 +26,7 @@
26
  ?>
27
  </p>
28
  <p class="center">
29
- <a href="https://wordpress.org/support/topic/how-can-i-check-if-the-plugin-is-working-properly/"
30
  target="_blank"
31
  class="webpcButton webpcButton--blue"
32
  >
26
  ?>
27
  </p>
28
  <p class="center">
29
+ <a href="https://url.mattplugins.com/converter-widget-about-button-instruction"
30
  target="_blank"
31
  class="webpcButton webpcButton--blue"
32
  >
templates/components/widgets/regenerate.php CHANGED
@@ -162,7 +162,7 @@
162
  sprintf(
163
  /* translators: %1$s: open anchor tag, %2$s: close anchor tag */
164
  __( 'Do you want to know how a plugin works and how to check if it is working properly? Read %1$sour manual%2$s.', 'webp-converter-for-media' ),
165
- '<a href="https://wordpress.org/support/topic/how-can-i-check-if-the-plugin-is-working-properly/" target="_blank">',
166
  '</a>'
167
  )
168
  );
162
  sprintf(
163
  /* translators: %1$s: open anchor tag, %2$s: close anchor tag */
164
  __( 'Do you want to know how a plugin works and how to check if it is working properly? Read %1$sour manual%2$s.', 'webp-converter-for-media' ),
165
+ '<a href="https://url.mattplugins.com/converter-regeneration-success-message-instruction" target="_blank">',
166
  '</a>'
167
  )
168
  );
templates/components/widgets/server.php CHANGED
@@ -23,11 +23,11 @@
23
  sprintf(
24
  /* translators: %1$s: open anchor tag, %2$s: close anchor tag, %3$s: open anchor tag, %4$s: close anchor tag */
25
  __( 'Please %1$scheck our FAQ%2$s before adding a thread with technical problem. If you do not find help there, %3$scheck support forum%4$s for similar problems. If you do not find a solution, please %5$scontact us%6$s.', 'webp-converter-for-media' ),
26
- '<a href="https://wordpress.org/plugins/webp-converter-for-media/#faq" target="_blank">',
27
  '</a>',
28
- '<a href="https://wordpress.org/support/plugin/webp-converter-for-media/" target="_blank">',
29
  '</a>',
30
- '<a href="https://wordpress.org/support/plugin/webp-converter-for-media/" target="_blank">',
31
  '</a>'
32
  )
33
  );
23
  sprintf(
24
  /* translators: %1$s: open anchor tag, %2$s: close anchor tag, %3$s: open anchor tag, %4$s: close anchor tag */
25
  __( 'Please %1$scheck our FAQ%2$s before adding a thread with technical problem. If you do not find help there, %3$scheck support forum%4$s for similar problems. If you do not find a solution, please %5$scontact us%6$s.', 'webp-converter-for-media' ),
26
+ '<a href="https://url.mattplugins.com/converter-tab-server-message-faq" target="_blank">',
27
  '</a>',
28
+ '<a href="https://url.mattplugins.com/converter-tab-server-message-support" target="_blank">',
29
  '</a>',
30
+ '<a href="https://url.mattplugins.com/converter-tab-server-message-contact" target="_blank">',
31
  '</a>'
32
  )
33
  );
templates/views/settings-debug.php CHANGED
@@ -50,8 +50,8 @@
50
  /* translators: %1$s: br tag, %2$s: icon heart */
51
  __( 'Created with %1$s by %2$s - if you like our plugin, please %3$srate one%4$s%5$s', 'webp-converter-for-media' ),
52
  '<span class="webpcPage__footerIcon webpcPage__footerIcon--heart"></span>',
53
- '<a href="https://mattplugins.com/?utm_source=webp-converter-for-media&utm_campaign=website-check&utm_medium=plugin-settings-footer" target="_blank">matt plugins</a>',
54
- '<a href="https://wordpress.org/support/plugin/webp-converter-for-media/reviews/?rate=5#new-post" target="_blank">',
55
  ' <span class="webpcPage__footerIcon webpcPage__footerIcon--stars"></span>',
56
  '</a>'
57
  )
50
  /* translators: %1$s: br tag, %2$s: icon heart */
51
  __( 'Created with %1$s by %2$s - if you like our plugin, please %3$srate one%4$s%5$s', 'webp-converter-for-media' ),
52
  '<span class="webpcPage__footerIcon webpcPage__footerIcon--heart"></span>',
53
+ '<a href="https://url.mattplugins.com/converter-settings-footer-author-website" target="_blank">matt plugins</a>',
54
+ '<a href="https://url.mattplugins.com/converter-settings-footer-plugin-review" target="_blank">',
55
  ' <span class="webpcPage__footerIcon webpcPage__footerIcon--stars"></span>',
56
  '</a>'
57
  )
templates/views/settings.php CHANGED
@@ -70,8 +70,8 @@
70
  /* translators: %1$s: br tag, %2$s: icon heart */
71
  __( 'Created with %1$s by %2$s - if you like our plugin, please %3$srate one%4$s%5$s', 'webp-converter-for-media' ),
72
  '<span class="webpcPage__footerIcon webpcPage__footerIcon--heart"></span>',
73
- '<a href="https://mattplugins.com/?utm_source=webp-converter-for-media&utm_campaign=website-check&utm_medium=plugin-settings-footer" target="_blank">matt plugins</a>',
74
- '<a href="https://wordpress.org/support/plugin/webp-converter-for-media/reviews/?rate=5#new-post" target="_blank">',
75
  ' <span class="webpcPage__footerIcon webpcPage__footerIcon--stars"></span>',
76
  '</a>'
77
  )
70
  /* translators: %1$s: br tag, %2$s: icon heart */
71
  __( 'Created with %1$s by %2$s - if you like our plugin, please %3$srate one%4$s%5$s', 'webp-converter-for-media' ),
72
  '<span class="webpcPage__footerIcon webpcPage__footerIcon--heart"></span>',
73
+ '<a href="https://url.mattplugins.com/converter-settings-footer-author-website" target="_blank">matt plugins</a>',
74
+ '<a href="https://url.mattplugins.com/converter-settings-footer-plugin-review" target="_blank">',
75
  ' <span class="webpcPage__footerIcon webpcPage__footerIcon--stars"></span>',
76
  '</a>'
77
  )
vendor/autoload.php CHANGED
@@ -4,4 +4,4 @@
4
 
5
  require_once __DIR__ . '/composer/autoload_real.php';
6
 
7
- return ComposerAutoloaderInit5dda79ecb8a6ed3558675f4c77c86e5a::getLoader();
4
 
5
  require_once __DIR__ . '/composer/autoload_real.php';
6
 
7
+ return ComposerAutoloaderInitc4d2fe736f48792b51897a53ab3e4b54::getLoader();
vendor/composer/autoload_classmap.php CHANGED
@@ -34,10 +34,7 @@ return array(
34
  'WebpConverter\\Conversion\\Directory\\DirectoryFactory' => $baseDir . '/src/Conversion/Directory/DirectoryFactory.php',
35
  'WebpConverter\\Conversion\\Directory\\DirectoryIntegration' => $baseDir . '/src/Conversion/Directory/DirectoryIntegration.php',
36
  'WebpConverter\\Conversion\\Directory\\DirectoryInterface' => $baseDir . '/src/Conversion/Directory/DirectoryInterface.php',
37
- 'WebpConverter\\Conversion\\Directory\\GalleryDirectory' => $baseDir . '/src/Conversion/Directory/GalleryDirectory.php',
38
- 'WebpConverter\\Conversion\\Directory\\PluginsDirectory' => $baseDir . '/src/Conversion/Directory/PluginsDirectory.php',
39
- 'WebpConverter\\Conversion\\Directory\\ThemesDirectory' => $baseDir . '/src/Conversion/Directory/ThemesDirectory.php',
40
- 'WebpConverter\\Conversion\\Directory\\UploadsDirectory' => $baseDir . '/src/Conversion/Directory/UploadsDirectory.php',
41
  'WebpConverter\\Conversion\\Directory\\UploadsWebpcDirectory' => $baseDir . '/src/Conversion/Directory/UploadsWebpcDirectory.php',
42
  'WebpConverter\\Conversion\\Endpoint\\CronConversionEndpoint' => $baseDir . '/src/Conversion/Endpoint/CronConversionEndpoint.php',
43
  'WebpConverter\\Conversion\\Endpoint\\EndpointAbstract' => $baseDir . '/src/Conversion/Endpoint/EndpointAbstract.php',
34
  'WebpConverter\\Conversion\\Directory\\DirectoryFactory' => $baseDir . '/src/Conversion/Directory/DirectoryFactory.php',
35
  'WebpConverter\\Conversion\\Directory\\DirectoryIntegration' => $baseDir . '/src/Conversion/Directory/DirectoryIntegration.php',
36
  'WebpConverter\\Conversion\\Directory\\DirectoryInterface' => $baseDir . '/src/Conversion/Directory/DirectoryInterface.php',
37
+ 'WebpConverter\\Conversion\\Directory\\SourceDirectory' => $baseDir . '/src/Conversion/Directory/SourceDirectory.php',
 
 
 
38
  'WebpConverter\\Conversion\\Directory\\UploadsWebpcDirectory' => $baseDir . '/src/Conversion/Directory/UploadsWebpcDirectory.php',
39
  'WebpConverter\\Conversion\\Endpoint\\CronConversionEndpoint' => $baseDir . '/src/Conversion/Endpoint/CronConversionEndpoint.php',
40
  'WebpConverter\\Conversion\\Endpoint\\EndpointAbstract' => $baseDir . '/src/Conversion/Endpoint/EndpointAbstract.php',
vendor/composer/autoload_real.php CHANGED
@@ -2,7 +2,7 @@
2
 
3
  // autoload_real.php @generated by Composer
4
 
5
- class ComposerAutoloaderInit5dda79ecb8a6ed3558675f4c77c86e5a
6
  {
7
  private static $loader;
8
 
@@ -22,15 +22,15 @@ class ComposerAutoloaderInit5dda79ecb8a6ed3558675f4c77c86e5a
22
  return self::$loader;
23
  }
24
 
25
- spl_autoload_register(array('ComposerAutoloaderInit5dda79ecb8a6ed3558675f4c77c86e5a', 'loadClassLoader'), true, true);
26
  self::$loader = $loader = new \Composer\Autoload\ClassLoader(\dirname(\dirname(__FILE__)));
27
- spl_autoload_unregister(array('ComposerAutoloaderInit5dda79ecb8a6ed3558675f4c77c86e5a', 'loadClassLoader'));
28
 
29
  $useStaticLoader = PHP_VERSION_ID >= 50600 && !defined('HHVM_VERSION') && (!function_exists('zend_loader_file_encoded') || !zend_loader_file_encoded());
30
  if ($useStaticLoader) {
31
  require __DIR__ . '/autoload_static.php';
32
 
33
- call_user_func(\Composer\Autoload\ComposerStaticInit5dda79ecb8a6ed3558675f4c77c86e5a::getInitializer($loader));
34
  } else {
35
  $map = require __DIR__ . '/autoload_namespaces.php';
36
  foreach ($map as $namespace => $path) {
2
 
3
  // autoload_real.php @generated by Composer
4
 
5
+ class ComposerAutoloaderInitc4d2fe736f48792b51897a53ab3e4b54
6
  {
7
  private static $loader;
8
 
22
  return self::$loader;
23
  }
24
 
25
+ spl_autoload_register(array('ComposerAutoloaderInitc4d2fe736f48792b51897a53ab3e4b54', 'loadClassLoader'), true, true);
26
  self::$loader = $loader = new \Composer\Autoload\ClassLoader(\dirname(\dirname(__FILE__)));
27
+ spl_autoload_unregister(array('ComposerAutoloaderInitc4d2fe736f48792b51897a53ab3e4b54', 'loadClassLoader'));
28
 
29
  $useStaticLoader = PHP_VERSION_ID >= 50600 && !defined('HHVM_VERSION') && (!function_exists('zend_loader_file_encoded') || !zend_loader_file_encoded());
30
  if ($useStaticLoader) {
31
  require __DIR__ . '/autoload_static.php';
32
 
33
+ call_user_func(\Composer\Autoload\ComposerStaticInitc4d2fe736f48792b51897a53ab3e4b54::getInitializer($loader));
34
  } else {
35
  $map = require __DIR__ . '/autoload_namespaces.php';
36
  foreach ($map as $namespace => $path) {
vendor/composer/autoload_static.php CHANGED
@@ -4,7 +4,7 @@
4
 
5
  namespace Composer\Autoload;
6
 
7
- class ComposerStaticInit5dda79ecb8a6ed3558675f4c77c86e5a
8
  {
9
  public static $prefixLengthsPsr4 = array (
10
  'W' =>
@@ -49,10 +49,7 @@ class ComposerStaticInit5dda79ecb8a6ed3558675f4c77c86e5a
49
  'WebpConverter\\Conversion\\Directory\\DirectoryFactory' => __DIR__ . '/../..' . '/src/Conversion/Directory/DirectoryFactory.php',
50
  'WebpConverter\\Conversion\\Directory\\DirectoryIntegration' => __DIR__ . '/../..' . '/src/Conversion/Directory/DirectoryIntegration.php',
51
  'WebpConverter\\Conversion\\Directory\\DirectoryInterface' => __DIR__ . '/../..' . '/src/Conversion/Directory/DirectoryInterface.php',
52
- 'WebpConverter\\Conversion\\Directory\\GalleryDirectory' => __DIR__ . '/../..' . '/src/Conversion/Directory/GalleryDirectory.php',
53
- 'WebpConverter\\Conversion\\Directory\\PluginsDirectory' => __DIR__ . '/../..' . '/src/Conversion/Directory/PluginsDirectory.php',
54
- 'WebpConverter\\Conversion\\Directory\\ThemesDirectory' => __DIR__ . '/../..' . '/src/Conversion/Directory/ThemesDirectory.php',
55
- 'WebpConverter\\Conversion\\Directory\\UploadsDirectory' => __DIR__ . '/../..' . '/src/Conversion/Directory/UploadsDirectory.php',
56
  'WebpConverter\\Conversion\\Directory\\UploadsWebpcDirectory' => __DIR__ . '/../..' . '/src/Conversion/Directory/UploadsWebpcDirectory.php',
57
  'WebpConverter\\Conversion\\Endpoint\\CronConversionEndpoint' => __DIR__ . '/../..' . '/src/Conversion/Endpoint/CronConversionEndpoint.php',
58
  'WebpConverter\\Conversion\\Endpoint\\EndpointAbstract' => __DIR__ . '/../..' . '/src/Conversion/Endpoint/EndpointAbstract.php',
@@ -205,9 +202,9 @@ class ComposerStaticInit5dda79ecb8a6ed3558675f4c77c86e5a
205
  public static function getInitializer(ClassLoader $loader)
206
  {
207
  return \Closure::bind(function () use ($loader) {
208
- $loader->prefixLengthsPsr4 = ComposerStaticInit5dda79ecb8a6ed3558675f4c77c86e5a::$prefixLengthsPsr4;
209
- $loader->prefixDirsPsr4 = ComposerStaticInit5dda79ecb8a6ed3558675f4c77c86e5a::$prefixDirsPsr4;
210
- $loader->classMap = ComposerStaticInit5dda79ecb8a6ed3558675f4c77c86e5a::$classMap;
211
 
212
  }, null, ClassLoader::class);
213
  }
4
 
5
  namespace Composer\Autoload;
6
 
7
+ class ComposerStaticInitc4d2fe736f48792b51897a53ab3e4b54
8
  {
9
  public static $prefixLengthsPsr4 = array (
10
  'W' =>
49
  'WebpConverter\\Conversion\\Directory\\DirectoryFactory' => __DIR__ . '/../..' . '/src/Conversion/Directory/DirectoryFactory.php',
50
  'WebpConverter\\Conversion\\Directory\\DirectoryIntegration' => __DIR__ . '/../..' . '/src/Conversion/Directory/DirectoryIntegration.php',
51
  'WebpConverter\\Conversion\\Directory\\DirectoryInterface' => __DIR__ . '/../..' . '/src/Conversion/Directory/DirectoryInterface.php',
52
+ 'WebpConverter\\Conversion\\Directory\\SourceDirectory' => __DIR__ . '/../..' . '/src/Conversion/Directory/SourceDirectory.php',
 
 
 
53
  'WebpConverter\\Conversion\\Directory\\UploadsWebpcDirectory' => __DIR__ . '/../..' . '/src/Conversion/Directory/UploadsWebpcDirectory.php',
54
  'WebpConverter\\Conversion\\Endpoint\\CronConversionEndpoint' => __DIR__ . '/../..' . '/src/Conversion/Endpoint/CronConversionEndpoint.php',
55
  'WebpConverter\\Conversion\\Endpoint\\EndpointAbstract' => __DIR__ . '/../..' . '/src/Conversion/Endpoint/EndpointAbstract.php',
202
  public static function getInitializer(ClassLoader $loader)
203
  {
204
  return \Closure::bind(function () use ($loader) {
205
+ $loader->prefixLengthsPsr4 = ComposerStaticInitc4d2fe736f48792b51897a53ab3e4b54::$prefixLengthsPsr4;
206
+ $loader->prefixDirsPsr4 = ComposerStaticInitc4d2fe736f48792b51897a53ab3e4b54::$prefixDirsPsr4;
207
+ $loader->classMap = ComposerStaticInitc4d2fe736f48792b51897a53ab3e4b54::$classMap;
208
 
209
  }, null, ClassLoader::class);
210
  }
vendor/composer/installed.php CHANGED
@@ -5,7 +5,7 @@
5
  'type' => 'library',
6
  'install_path' => __DIR__ . '/../../',
7
  'aliases' => array(),
8
- 'reference' => '68e903d3e477409047c6ea1a5484f8d8a3bc718e',
9
  'name' => 'gbiorczyk/webp-converter-for-media',
10
  'dev' => false,
11
  ),
@@ -16,7 +16,7 @@
16
  'type' => 'library',
17
  'install_path' => __DIR__ . '/../../',
18
  'aliases' => array(),
19
- 'reference' => '68e903d3e477409047c6ea1a5484f8d8a3bc718e',
20
  'dev_requirement' => false,
21
  ),
22
  'matt-plugins/deactivation-modal' => array(
5
  'type' => 'library',
6
  'install_path' => __DIR__ . '/../../',
7
  'aliases' => array(),
8
+ 'reference' => 'fc6307c9f6ece052e10d901f79cc2718aed76993',
9
  'name' => 'gbiorczyk/webp-converter-for-media',
10
  'dev' => false,
11
  ),
16
  'type' => 'library',
17
  'install_path' => __DIR__ . '/../../',
18
  'aliases' => array(),
19
+ 'reference' => 'fc6307c9f6ece052e10d901f79cc2718aed76993',
20
  'dev_requirement' => false,
21
  ),
22
  'matt-plugins/deactivation-modal' => array(
webp-converter-for-media.php CHANGED
@@ -3,9 +3,9 @@
3
  /**
4
  * Plugin Name: Converter for Media
5
  * Description: Speed up your website by using our WebP & AVIF Converter (formerly WebP Converter for Media). Serve WebP and AVIF images instead of standard formats JPEG, PNG and GIF just now!
6
- * Version: 5.1.0
7
  * Author: Mateusz Gbiorczyk - Optimize Images by convert AVIF & WebP
8
- * Author URI: https://mattplugins.com/
9
  * Text Domain: webp-converter-for-media
10
  * Network: true
11
  */
@@ -13,5 +13,5 @@
13
  require_once __DIR__ . '/vendor/autoload.php';
14
 
15
  new WebpConverter\WebpConverter(
16
- new WebpConverter\PluginInfo( __FILE__, '5.1.0' )
17
  );
3
  /**
4
  * Plugin Name: Converter for Media
5
  * Description: Speed up your website by using our WebP & AVIF Converter (formerly WebP Converter for Media). Serve WebP and AVIF images instead of standard formats JPEG, PNG and GIF just now!
6
+ * Version: 5.2.0
7
  * Author: Mateusz Gbiorczyk - Optimize Images by convert AVIF & WebP
8
+ * Author URI: https://url.mattplugins.com/converter-plugin-author-link
9
  * Text Domain: webp-converter-for-media
10
  * Network: true
11
  */
13
  require_once __DIR__ . '/vendor/autoload.php';
14
 
15
  new WebpConverter\WebpConverter(
16
+ new WebpConverter\PluginInfo( __FILE__, '5.2.0' )
17
  );