Version Description
(2022-08-28) =
* [Fixed]
Exclusion of converted files from backup generated by UpdraftPlus plugin
* [Added]
Optimization statistics in Media Library
Download this release
Release Info
Developer | mateuszgbiorczyk |
Plugin | Converter for Media – Optimize images | Convert WebP & AVIF |
Version | 5.1.0 |
Comparing to | |
See all releases |
Code changes from version 5.0.1 to 5.1.0
- assets/build/css/styles.css +1 -1
- changelog.txt +4 -0
- readme.txt +5 -0
- src/Conversion/Cron/CronStatusViewer.php +1 -10
- src/Conversion/Media/Attachment.php +2 -2
- src/Notice/CloudflareNotice.php +1 -1
- src/Notice/LitespeedNotice.php +1 -1
- src/Notice/NoticeIntegration.php +0 -2
- src/Notice/WelcomeNotice.php +1 -1
- src/Service/BackupExcluder.php +3 -3
- src/Service/MediaStatusViewer.php +265 -0
- src/Settings/Option/ExtraFeaturesOption.php +1 -2
- src/Settings/Option/MediaStatsOption.php +72 -0
- src/Settings/Option/OptionsAggregator.php +1 -0
- src/Settings/Page/BulkOptimizationPage.php +55 -0
- src/Settings/Page/PageAbstract.php +10 -5
- src/Settings/Page/PageIntegration.php +38 -35
- src/Settings/Page/PageInterface.php +10 -0
- src/WebpConverter.php +3 -1
- templates/components/widgets/menu.php +8 -6
- templates/views/settings.php +20 -18
- vendor/composer/autoload_classmap.php +3 -0
- vendor/composer/autoload_static.php +3 -0
- vendor/composer/installed.php +2 -2
- webp-converter-for-media.php +2 -2
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=11846313);src:url(../../fonts/icons/icomoon.woff?ver=11846313) format("woff"),url(../../fonts/icons/icomoon.eot?ver=11846313#iefix) format("embedded-opentype"),url(../../fonts/icons/icomoon.ttf?ver=11846313) format("truetype"),url(../../fonts/icons/icomoon.svg?ver=11846313#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}.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=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}}
|
changelog.txt
CHANGED
@@ -1,5 +1,9 @@
|
|
1 |
== Changelog ==
|
2 |
|
|
|
|
|
|
|
|
|
3 |
= 5.0.1 (2022-08-26) =
|
4 |
* `[Removed]` Filter `webpc_uploads_prefix`
|
5 |
* `[Fixed]` Calculating number of images to convert in WP-CLI
|
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
|
6 |
+
|
7 |
= 5.0.1 (2022-08-26) =
|
8 |
* `[Removed]` Filter `webpc_uploads_prefix`
|
9 |
* `[Fixed]` Calculating number of images to convert in WP-CLI
|
readme.txt
CHANGED
@@ -320,9 +320,14 @@ In case of problems, please contact us in [the support forum](https://wordpress.
|
|
320 |
1. General tab of the plugin settings
|
321 |
2. Advanced tab of the plugin settings
|
322 |
3. Bulk optimization of images
|
|
|
323 |
|
324 |
== Changelog ==
|
325 |
|
|
|
|
|
|
|
|
|
326 |
= 5.0.1 (2022-08-26) =
|
327 |
* `[Removed]` Filter `webpc_uploads_prefix`
|
328 |
* `[Fixed]` Calculating number of images to convert in WP-CLI
|
320 |
1. General tab of the plugin settings
|
321 |
2. Advanced tab of the plugin settings
|
322 |
3. Bulk optimization of images
|
323 |
+
4. Optimization statistics of Media Library
|
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
|
330 |
+
|
331 |
= 5.0.1 (2022-08-26) =
|
332 |
* `[Removed]` Filter `webpc_uploads_prefix`
|
333 |
* `[Fixed]` Calculating number of images to convert in WP-CLI
|
src/Conversion/Cron/CronStatusViewer.php
CHANGED
@@ -3,8 +3,6 @@
|
|
3 |
namespace WebpConverter\Conversion\Cron;
|
4 |
|
5 |
use WebpConverter\HookableInterface;
|
6 |
-
use WebpConverter\PluginInfo;
|
7 |
-
use WebpConverter\Settings\AdminAssets;
|
8 |
use WebpConverter\Settings\Page\PageIntegration;
|
9 |
|
10 |
/**
|
@@ -12,11 +10,6 @@ use WebpConverter\Settings\Page\PageIntegration;
|
|
12 |
*/
|
13 |
class CronStatusViewer implements HookableInterface {
|
14 |
|
15 |
-
/**
|
16 |
-
* @var PluginInfo
|
17 |
-
*/
|
18 |
-
private $plugin_info;
|
19 |
-
|
20 |
/**
|
21 |
* @var CronStatusManager
|
22 |
*/
|
@@ -27,8 +20,7 @@ class CronStatusViewer implements HookableInterface {
|
|
27 |
*/
|
28 |
private $paths_preview_count = 0;
|
29 |
|
30 |
-
public function __construct(
|
31 |
-
$this->plugin_info = $plugin_info;
|
32 |
$this->cron_status_manager = $cron_status_manager ?: new CronStatusManager();
|
33 |
}
|
34 |
|
@@ -54,7 +46,6 @@ class CronStatusViewer implements HookableInterface {
|
|
54 |
}
|
55 |
|
56 |
add_action( 'admin_bar_menu', [ $this, 'add_menu_to_top_bar' ], 1000 );
|
57 |
-
( new AdminAssets( $this->plugin_info ) )->init_hooks();
|
58 |
}
|
59 |
|
60 |
/**
|
3 |
namespace WebpConverter\Conversion\Cron;
|
4 |
|
5 |
use WebpConverter\HookableInterface;
|
|
|
|
|
6 |
use WebpConverter\Settings\Page\PageIntegration;
|
7 |
|
8 |
/**
|
10 |
*/
|
11 |
class CronStatusViewer implements HookableInterface {
|
12 |
|
|
|
|
|
|
|
|
|
|
|
13 |
/**
|
14 |
* @var CronStatusManager
|
15 |
*/
|
20 |
*/
|
21 |
private $paths_preview_count = 0;
|
22 |
|
23 |
+
public function __construct( CronStatusManager $cron_status_manager = null ) {
|
|
|
24 |
$this->cron_status_manager = $cron_status_manager ?: new CronStatusManager();
|
25 |
}
|
26 |
|
46 |
}
|
47 |
|
48 |
add_action( 'admin_bar_menu', [ $this, 'add_menu_to_top_bar' ], 1000 );
|
|
|
49 |
}
|
50 |
|
51 |
/**
|
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 ) {
|
62 |
return $list;
|
63 |
}
|
64 |
|
@@ -81,7 +81,7 @@ class Attachment {
|
|
81 |
*/
|
82 |
private function get_paths_by_sizes( int $post_id, string $path ): array {
|
83 |
$list = [];
|
84 |
-
$list[] = str_replace( '\\', '/',
|
85 |
|
86 |
foreach ( $this->image_sizes as $size ) {
|
87 |
$src = wp_get_attachment_image_src( $post_id, $size );
|
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 |
|
81 |
*/
|
82 |
private function get_paths_by_sizes( int $post_id, string $path ): array {
|
83 |
$list = [];
|
84 |
+
$list[] = str_replace( '\\', '/', ( $this->upload_dir['basedir'] . '/' . $path ) );
|
85 |
|
86 |
foreach ( $this->image_sizes as $size ) {
|
87 |
$src = wp_get_attachment_image_src( $post_id, $size );
|
src/Notice/CloudflareNotice.php
CHANGED
@@ -40,7 +40,7 @@ class CloudflareNotice extends NoticeAbstract implements NoticeInterface {
|
|
40 |
return false;
|
41 |
}
|
42 |
|
43 |
-
return ( ( $_GET['page'] ?? '' ) === PageIntegration::
|
44 |
}
|
45 |
|
46 |
/**
|
40 |
return false;
|
41 |
}
|
42 |
|
43 |
+
return ( ( $_GET['page'] ?? '' ) === PageIntegration::SETTINGS_MENU_PAGE ); // phpcs:ignore WordPress.Security
|
44 |
}
|
45 |
|
46 |
/**
|
src/Notice/LitespeedNotice.php
CHANGED
@@ -37,7 +37,7 @@ class LitespeedNotice extends NoticeAbstract implements NoticeInterface {
|
|
37 |
return false;
|
38 |
}
|
39 |
|
40 |
-
return ( ( $_GET['page'] ?? '' ) === PageIntegration::
|
41 |
}
|
42 |
|
43 |
/**
|
37 |
return false;
|
38 |
}
|
39 |
|
40 |
+
return ( ( $_GET['page'] ?? '' ) === PageIntegration::SETTINGS_MENU_PAGE ); // phpcs:ignore WordPress.Security
|
41 |
}
|
42 |
|
43 |
/**
|
src/Notice/NoticeIntegration.php
CHANGED
@@ -6,7 +6,6 @@ use WebpConverter\HookableInterface;
|
|
6 |
use WebpConverter\PluginInfo;
|
7 |
use WebpConverter\Service\OptionsAccessManager;
|
8 |
use WebpConverter\Service\ViewLoader;
|
9 |
-
use WebpConverter\Settings\AdminAssets;
|
10 |
|
11 |
/**
|
12 |
* Supports ability to display notice and its management.
|
@@ -50,7 +49,6 @@ class NoticeIntegration implements HookableInterface {
|
|
50 |
return;
|
51 |
}
|
52 |
|
53 |
-
( new AdminAssets( $this->plugin_info ) )->init_hooks();
|
54 |
if ( ! is_multisite() ) {
|
55 |
add_action( 'admin_notices', [ $this, 'load_notice' ], 0 );
|
56 |
} else {
|
6 |
use WebpConverter\PluginInfo;
|
7 |
use WebpConverter\Service\OptionsAccessManager;
|
8 |
use WebpConverter\Service\ViewLoader;
|
|
|
9 |
|
10 |
/**
|
11 |
* Supports ability to display notice and its management.
|
49 |
return;
|
50 |
}
|
51 |
|
|
|
52 |
if ( ! is_multisite() ) {
|
53 |
add_action( 'admin_notices', [ $this, 'load_notice' ], 0 );
|
54 |
} else {
|
src/Notice/WelcomeNotice.php
CHANGED
@@ -31,7 +31,7 @@ class WelcomeNotice extends NoticeAbstract implements NoticeInterface {
|
|
31 |
* {@inheritdoc}
|
32 |
*/
|
33 |
public function is_available(): bool {
|
34 |
-
return ( ! isset( $_GET['page'] ) || ( $_GET['page'] !== PageIntegration::
|
35 |
}
|
36 |
|
37 |
/**
|
31 |
* {@inheritdoc}
|
32 |
*/
|
33 |
public function is_available(): bool {
|
34 |
+
return ( ! isset( $_GET['page'] ) || ( $_GET['page'] !== PageIntegration::SETTINGS_MENU_PAGE ) ); // phpcs:ignore WordPress.Security.NonceVerification.Recommended
|
35 |
}
|
36 |
|
37 |
/**
|
src/Service/BackupExcluder.php
CHANGED
@@ -15,9 +15,9 @@ class BackupExcluder implements HookableInterface {
|
|
15 |
* {@inheritdoc}
|
16 |
*/
|
17 |
public function init_hooks() {
|
18 |
-
add_filter( 'ai1wm_exclude_content_from_export', [ $this, 'ai1wm_exclude_content_from_export' ] );
|
19 |
-
add_filter( 'updraftplus_exclude_directory', [ $this, 'updraftplus_exclude_directory' ] );
|
20 |
-
add_filter( 'backwpup_content_exclude_dirs', [ $this, 'backwpup_content_exclude_dirs' ] );
|
21 |
}
|
22 |
|
23 |
/**
|
15 |
* {@inheritdoc}
|
16 |
*/
|
17 |
public function init_hooks() {
|
18 |
+
add_filter( 'ai1wm_exclude_content_from_export', [ $this, 'ai1wm_exclude_content_from_export' ], 10, 1 );
|
19 |
+
add_filter( 'updraftplus_exclude_directory', [ $this, 'updraftplus_exclude_directory' ], 10, 2 );
|
20 |
+
add_filter( 'backwpup_content_exclude_dirs', [ $this, 'backwpup_content_exclude_dirs' ], 10, 1 );
|
21 |
}
|
22 |
|
23 |
/**
|
src/Service/MediaStatusViewer.php
ADDED
@@ -0,0 +1,265 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
namespace WebpConverter\Service;
|
4 |
+
|
5 |
+
use WebpConverter\Conversion\Format\AvifFormat;
|
6 |
+
use WebpConverter\Conversion\Format\WebpFormat;
|
7 |
+
use WebpConverter\Conversion\Media\Attachment;
|
8 |
+
use WebpConverter\Conversion\OutputPath;
|
9 |
+
use WebpConverter\HookableInterface;
|
10 |
+
use WebpConverter\Model\Token;
|
11 |
+
use WebpConverter\PluginData;
|
12 |
+
use WebpConverter\Repository\TokenRepository;
|
13 |
+
use WebpConverter\Settings\Option\MediaStatsOption;
|
14 |
+
use WebpConverter\Settings\Page\PageIntegration;
|
15 |
+
|
16 |
+
/**
|
17 |
+
* Generates information about conversion status in Media Library.
|
18 |
+
*/
|
19 |
+
class MediaStatusViewer implements HookableInterface {
|
20 |
+
|
21 |
+
/**
|
22 |
+
* @var PluginData
|
23 |
+
*/
|
24 |
+
private $plugin_data;
|
25 |
+
|
26 |
+
/**
|
27 |
+
* @var TokenRepository
|
28 |
+
*/
|
29 |
+
private $token_repository;
|
30 |
+
|
31 |
+
/**
|
32 |
+
* @var OutputPath
|
33 |
+
*/
|
34 |
+
private $output_path;
|
35 |
+
|
36 |
+
/**
|
37 |
+
* @var Attachment|null
|
38 |
+
*/
|
39 |
+
private $attachment = null;
|
40 |
+
|
41 |
+
/**
|
42 |
+
* @var Token|null
|
43 |
+
*/
|
44 |
+
private $token = null;
|
45 |
+
|
46 |
+
public function __construct(
|
47 |
+
PluginData $plugin_data,
|
48 |
+
TokenRepository $token_repository,
|
49 |
+
OutputPath $output_path = null
|
50 |
+
) {
|
51 |
+
$this->plugin_data = $plugin_data;
|
52 |
+
$this->token_repository = $token_repository;
|
53 |
+
$this->output_path = $output_path ?: new OutputPath();
|
54 |
+
}
|
55 |
+
|
56 |
+
/**
|
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;
|
63 |
+
}
|
64 |
+
|
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 |
+
/**
|
71 |
+
* @param string[] $columns .
|
72 |
+
*
|
73 |
+
* @return string[]
|
74 |
+
* @internal
|
75 |
+
*/
|
76 |
+
public function add_custom_table_column( array $columns ): array {
|
77 |
+
$columns['webpc_status'] = 'Converter for Media';
|
78 |
+
return $columns;
|
79 |
+
}
|
80 |
+
|
81 |
+
/**
|
82 |
+
* @param string $column_name .
|
83 |
+
* @param int $post_id .
|
84 |
+
*
|
85 |
+
* @return void
|
86 |
+
* @internal
|
87 |
+
*/
|
88 |
+
public function print_table_column_value( string $column_name, int $post_id ) {
|
89 |
+
if ( $column_name !== 'webpc_status' ) {
|
90 |
+
return;
|
91 |
+
}
|
92 |
+
|
93 |
+
$conversion_status = $this->get_conversion_status( $post_id );
|
94 |
+
if ( $conversion_status === null ) {
|
95 |
+
return;
|
96 |
+
}
|
97 |
+
|
98 |
+
echo wp_kses_post( implode( '<br>', $conversion_status ) );
|
99 |
+
}
|
100 |
+
|
101 |
+
/**
|
102 |
+
* @param \WP_Post $post .
|
103 |
+
*
|
104 |
+
* @return void
|
105 |
+
* @internal
|
106 |
+
*/
|
107 |
+
public function print_attachment_sidebar_value( \WP_Post $post ) {
|
108 |
+
$conversion_status = $this->get_conversion_status( $post->ID );
|
109 |
+
if ( $conversion_status === null ) {
|
110 |
+
return;
|
111 |
+
}
|
112 |
+
|
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 |
+
?>
|
124 |
+
<div class="misc-pub-section misc-pub-webpc">
|
125 |
+
<?php echo wp_kses_post( implode( '<br>', $conversion_status ) ); ?>
|
126 |
+
</div>
|
127 |
+
<?php
|
128 |
+
}
|
129 |
+
|
130 |
+
/**
|
131 |
+
* @param int $post_id .
|
132 |
+
*
|
133 |
+
* @return string[]|null
|
134 |
+
*/
|
135 |
+
private function get_conversion_status( int $post_id ) {
|
136 |
+
$this->attachment = $this->attachment ?: new Attachment( $this->plugin_data );
|
137 |
+
$this->token = $this->token ?: $this->token_repository->get_token();
|
138 |
+
|
139 |
+
$source_paths = $this->attachment->get_attachment_paths( $post_id );
|
140 |
+
if ( ! $source_paths ) {
|
141 |
+
return null;
|
142 |
+
}
|
143 |
+
|
144 |
+
$images_stats = $this->get_images_stats( $source_paths );
|
145 |
+
$size_original = $images_stats[0]['original_size'];
|
146 |
+
$size_optimized = $images_stats[0]['avif_size'] ?: $images_stats[0]['webp_size'];
|
147 |
+
if ( ! $size_original ) {
|
148 |
+
return null;
|
149 |
+
}
|
150 |
+
|
151 |
+
$webp_source_size = [];
|
152 |
+
$webp_output_size = [];
|
153 |
+
$avif_source_size = [];
|
154 |
+
$avif_output_size = [];
|
155 |
+
|
156 |
+
foreach ( $images_stats as $images_stat ) {
|
157 |
+
if ( $images_stat['original_size'] === null ) {
|
158 |
+
continue;
|
159 |
+
}
|
160 |
+
|
161 |
+
if ( $images_stat['webp_size'] !== null ) {
|
162 |
+
$webp_source_size[] = (int) $images_stat['original_size'];
|
163 |
+
$webp_output_size[] = $images_stat['webp_size'];
|
164 |
+
}
|
165 |
+
if ( $images_stat['avif_size'] !== null ) {
|
166 |
+
$avif_source_size[] = (int) $images_stat['original_size'];
|
167 |
+
$avif_output_size[] = $images_stat['avif_size'];
|
168 |
+
}
|
169 |
+
}
|
170 |
+
|
171 |
+
$rows = [
|
172 |
+
sprintf(
|
173 |
+
/* translators: %s: file size */
|
174 |
+
__( 'Original file size: %s', 'webp-converter-for-media' ),
|
175 |
+
sprintf( '<strong>%s</strong>', size_format( $size_original ) )
|
176 |
+
),
|
177 |
+
sprintf(
|
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 ),
|
200 |
+
esc_attr( PageIntegration::get_settings_page_url() ),
|
201 |
+
__( 'in the PRO', 'webp-converter-for-media' )
|
202 |
+
)
|
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 |
+
}
|
213 |
+
|
214 |
+
return $rows;
|
215 |
+
}
|
216 |
+
|
217 |
+
/**
|
218 |
+
* @param string[] $source_paths .
|
219 |
+
*
|
220 |
+
* @return mixed[] {
|
221 |
+
* @type int|null $original_size .
|
222 |
+
* @type int|null $webp_size .
|
223 |
+
* @type int|null $avif_size .
|
224 |
+
* }
|
225 |
+
*/
|
226 |
+
private function get_images_stats( array $source_paths ): array {
|
227 |
+
$items = [];
|
228 |
+
foreach ( $source_paths as $source_path ) {
|
229 |
+
$output_path_webp = $this->output_path->get_path( $source_path, false, WebpFormat::FORMAT_EXTENSION );
|
230 |
+
$output_path_avif = $this->output_path->get_path( $source_path, false, AvifFormat::FORMAT_EXTENSION );
|
231 |
+
|
232 |
+
$filesize_original = ( file_exists( $source_path ) ) ? ( filesize( $source_path ) ?: null ) : null;
|
233 |
+
$filesize_webp = ( $output_path_webp )
|
234 |
+
? ( ( file_exists( $output_path_webp ) ) ? ( filesize( $output_path_webp ) ?: null ) : null )
|
235 |
+
: null;
|
236 |
+
$filesize_avif = ( $output_path_avif )
|
237 |
+
? ( ( file_exists( $output_path_avif ) ) ? ( filesize( $output_path_avif ) ?: null ) : null )
|
238 |
+
: null;
|
239 |
+
|
240 |
+
$items[] = [
|
241 |
+
'original_size' => $filesize_original,
|
242 |
+
'webp_size' => $filesize_webp,
|
243 |
+
'avif_size' => $filesize_avif,
|
244 |
+
];
|
245 |
+
}
|
246 |
+
|
247 |
+
return $items;
|
248 |
+
}
|
249 |
+
|
250 |
+
/**
|
251 |
+
* @param int|int[] $source_size .
|
252 |
+
* @param int|int[] $output_size .
|
253 |
+
*
|
254 |
+
* @return string
|
255 |
+
*/
|
256 |
+
private function get_percent_value( $source_size, $output_size ): string {
|
257 |
+
$source_size = ( is_array( $source_size ) ) ? array_sum( $source_size ) : $source_size;
|
258 |
+
$output_size = ( is_array( $output_size ) ) ? array_sum( $output_size ) : $output_size;
|
259 |
+
|
260 |
+
$output_percent = ( $output_size ) ? ( 100 - round( $output_size / $source_size * 100 ) ) : 0;
|
261 |
+
return ( $output_percent >= 0 )
|
262 |
+
? sprintf( '-%s%%', $output_percent )
|
263 |
+
: sprintf( '+%s%%', abs( $output_percent ) );
|
264 |
+
}
|
265 |
+
}
|
src/Settings/Option/ExtraFeaturesOption.php
CHANGED
@@ -83,7 +83,7 @@ class ExtraFeaturesOption extends OptionAbstract {
|
|
83 |
*/
|
84 |
public function get_disabled_values( array $settings ): array {
|
85 |
$values = [];
|
86 |
-
if ( ( $settings[ ConversionMethodOption::OPTION_NAME ] ??
|
87 |
$values[] = self::OPTION_VALUE_KEEP_METADATA;
|
88 |
}
|
89 |
return $values;
|
@@ -112,7 +112,6 @@ class ExtraFeaturesOption extends OptionAbstract {
|
|
112 |
public function get_default_value( array $settings = null ): array {
|
113 |
return [
|
114 |
self::OPTION_VALUE_ONLY_SMALLER,
|
115 |
-
self::OPTION_VALUE_DEBUG_ENABLED,
|
116 |
];
|
117 |
}
|
118 |
}
|
83 |
*/
|
84 |
public function get_disabled_values( array $settings ): array {
|
85 |
$values = [];
|
86 |
+
if ( ( $settings[ ConversionMethodOption::OPTION_NAME ] ?? GdMethod::METHOD_NAME ) === GdMethod::METHOD_NAME ) {
|
87 |
$values[] = self::OPTION_VALUE_KEEP_METADATA;
|
88 |
}
|
89 |
return $values;
|
112 |
public function get_default_value( array $settings = null ): array {
|
113 |
return [
|
114 |
self::OPTION_VALUE_ONLY_SMALLER,
|
|
|
115 |
];
|
116 |
}
|
117 |
}
|
src/Settings/Option/MediaStatsOption.php
ADDED
@@ -0,0 +1,72 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
namespace WebpConverter\Settings\Option;
|
4 |
+
|
5 |
+
/**
|
6 |
+
* {@inheritdoc}
|
7 |
+
*/
|
8 |
+
class MediaStatsOption extends OptionAbstract {
|
9 |
+
|
10 |
+
const OPTION_NAME = 'media_stats';
|
11 |
+
|
12 |
+
/**
|
13 |
+
* {@inheritdoc}
|
14 |
+
*/
|
15 |
+
public function get_name(): string {
|
16 |
+
return self::OPTION_NAME;
|
17 |
+
}
|
18 |
+
|
19 |
+
/**
|
20 |
+
* {@inheritdoc}
|
21 |
+
*/
|
22 |
+
public function get_form_name(): string {
|
23 |
+
return OptionAbstract::FORM_TYPE_ADVANCED;
|
24 |
+
}
|
25 |
+
|
26 |
+
/**
|
27 |
+
* {@inheritdoc}
|
28 |
+
*/
|
29 |
+
public function get_type(): string {
|
30 |
+
return OptionAbstract::OPTION_TYPE_TOGGLE;
|
31 |
+
}
|
32 |
+
|
33 |
+
/**
|
34 |
+
* {@inheritdoc}
|
35 |
+
*/
|
36 |
+
public function get_label(): string {
|
37 |
+
return __( 'Optimization statistics', 'webp-converter-for-media' );
|
38 |
+
}
|
39 |
+
|
40 |
+
/**
|
41 |
+
* {@inheritdoc}
|
42 |
+
*/
|
43 |
+
public function get_info(): string {
|
44 |
+
return sprintf(
|
45 |
+
/* translators: %1$s: open anchor tag, %2$s: close anchor tag */
|
46 |
+
__( 'Show statistics in %1$sMedia Library%2$s', 'webp-converter-for-media' ),
|
47 |
+
'<a href="' . admin_url( 'upload.php?mode=list' ) . '">',
|
48 |
+
'</a>'
|
49 |
+
);
|
50 |
+
}
|
51 |
+
|
52 |
+
/**
|
53 |
+
* {@inheritdoc}
|
54 |
+
*/
|
55 |
+
public function get_available_values( array $settings ) {
|
56 |
+
return null;
|
57 |
+
}
|
58 |
+
|
59 |
+
/**
|
60 |
+
* {@inheritdoc}
|
61 |
+
*/
|
62 |
+
public function get_valid_value( $current_value, array $available_values = null, array $disabled_values = null ) {
|
63 |
+
return ( $current_value === 'yes' ) ? 'yes' : '';
|
64 |
+
}
|
65 |
+
|
66 |
+
/**
|
67 |
+
* {@inheritdoc}
|
68 |
+
*/
|
69 |
+
public function get_default_value( array $settings = null ): string {
|
70 |
+
return 'yes';
|
71 |
+
}
|
72 |
+
}
|
src/Settings/Option/OptionsAggregator.php
CHANGED
@@ -32,6 +32,7 @@ class OptionsAggregator {
|
|
32 |
$this->set_option( $conversion_method );
|
33 |
$this->set_option( new LoaderTypeOption() );
|
34 |
$this->set_option( new ExtraFeaturesOption() );
|
|
|
35 |
}
|
36 |
|
37 |
/**
|
32 |
$this->set_option( $conversion_method );
|
33 |
$this->set_option( new LoaderTypeOption() );
|
34 |
$this->set_option( new ExtraFeaturesOption() );
|
35 |
+
$this->set_option( new MediaStatsOption() );
|
36 |
}
|
37 |
|
38 |
/**
|
src/Settings/Page/BulkOptimizationPage.php
ADDED
@@ -0,0 +1,55 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
|
4 |
+
namespace WebpConverter\Settings\Page;
|
5 |
+
|
6 |
+
/**
|
7 |
+
* {@inheritdoc}
|
8 |
+
*/
|
9 |
+
class BulkOptimizationPage extends GeneralSettingsPage {
|
10 |
+
|
11 |
+
/**
|
12 |
+
* {@inheritdoc}
|
13 |
+
*/
|
14 |
+
public function get_slug() {
|
15 |
+
return null;
|
16 |
+
}
|
17 |
+
|
18 |
+
/**
|
19 |
+
* {@inheritdoc}
|
20 |
+
*/
|
21 |
+
public function get_menu_parent(): string {
|
22 |
+
return PageIntegration::UPLOAD_MENU_PAGE;
|
23 |
+
}
|
24 |
+
|
25 |
+
/**
|
26 |
+
* {@inheritdoc}
|
27 |
+
*/
|
28 |
+
public function get_menu_url() {
|
29 |
+
if ( ( $_GET['page'] ?? '' ) !== PageIntegration::UPLOAD_MENU_PAGE ) { // phpcs:ignore WordPress.Security
|
30 |
+
return null;
|
31 |
+
}
|
32 |
+
|
33 |
+
return admin_url( 'upload.php?page=' . PageIntegration::UPLOAD_MENU_PAGE );
|
34 |
+
}
|
35 |
+
|
36 |
+
/**
|
37 |
+
* {@inheritdoc}
|
38 |
+
*/
|
39 |
+
public function get_label(): string {
|
40 |
+
return __( 'Bulk Optimization', 'webp-converter-for-media' );
|
41 |
+
}
|
42 |
+
|
43 |
+
/**
|
44 |
+
* {@inheritdoc}
|
45 |
+
*/
|
46 |
+
public function get_template_vars(): array {
|
47 |
+
return array_merge(
|
48 |
+
parent::get_template_vars(),
|
49 |
+
[
|
50 |
+
'form_options' => null,
|
51 |
+
'form_input_value' => null,
|
52 |
+
]
|
53 |
+
);
|
54 |
+
}
|
55 |
+
}
|
src/Settings/Page/PageAbstract.php
CHANGED
@@ -8,11 +8,16 @@ namespace WebpConverter\Settings\Page;
|
|
8 |
abstract class PageAbstract implements PageInterface {
|
9 |
|
10 |
/**
|
11 |
-
*
|
12 |
-
*
|
13 |
-
* @return bool Is view active?
|
14 |
*/
|
15 |
-
public function
|
16 |
-
return
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
17 |
}
|
18 |
}
|
8 |
abstract class PageAbstract implements PageInterface {
|
9 |
|
10 |
/**
|
11 |
+
* {@inheritdoc}
|
|
|
|
|
12 |
*/
|
13 |
+
public function get_menu_parent(): string {
|
14 |
+
return PageIntegration::SETTINGS_MENU_PAGE;
|
15 |
+
}
|
16 |
+
|
17 |
+
/**
|
18 |
+
* {@inheritdoc}
|
19 |
+
*/
|
20 |
+
public function get_menu_url() {
|
21 |
+
return PageIntegration::get_settings_page_url( $this->get_slug() );
|
22 |
}
|
23 |
}
|
src/Settings/Page/PageIntegration.php
CHANGED
@@ -7,14 +7,14 @@ use WebpConverter\Notice\NoticeIntegration;
|
|
7 |
use WebpConverter\Notice\WelcomeNotice;
|
8 |
use WebpConverter\PluginInfo;
|
9 |
use WebpConverter\Service\ViewLoader;
|
10 |
-
use WebpConverter\Settings\AdminAssets;
|
11 |
|
12 |
/**
|
13 |
* Adds plugin settings page in admin panel.
|
14 |
*/
|
15 |
class PageIntegration implements HookableInterface {
|
16 |
|
17 |
-
const
|
|
|
18 |
|
19 |
/**
|
20 |
* @var PluginInfo
|
@@ -68,9 +68,9 @@ class PageIntegration implements HookableInterface {
|
|
68 |
*/
|
69 |
public static function get_settings_page_url( string $action = null ): string {
|
70 |
if ( ! is_multisite() ) {
|
71 |
-
$page_url =
|
72 |
} else {
|
73 |
-
$page_url = network_admin_url( 'settings.php?page=' . self::
|
74 |
}
|
75 |
|
76 |
if ( $action !== null ) {
|
@@ -89,7 +89,8 @@ class PageIntegration implements HookableInterface {
|
|
89 |
if ( is_multisite() ) {
|
90 |
return;
|
91 |
}
|
92 |
-
$this->add_settings_page( 'options-general.php' );
|
|
|
93 |
}
|
94 |
|
95 |
/**
|
@@ -99,57 +100,60 @@ class PageIntegration implements HookableInterface {
|
|
99 |
* @internal
|
100 |
*/
|
101 |
public function add_settings_page_for_network() {
|
102 |
-
$this->add_settings_page( 'settings.php' );
|
103 |
}
|
104 |
|
105 |
/**
|
106 |
* Creates plugin settings page in WordPress Admin Dashboard.
|
107 |
*
|
108 |
-
* @param string $
|
|
|
109 |
*
|
110 |
* @return void
|
111 |
*/
|
112 |
-
private function add_settings_page( string $menu_page ) {
|
113 |
$page = add_submenu_page(
|
114 |
-
$
|
115 |
'Converter for Media',
|
116 |
'Converter for Media',
|
117 |
'manage_options',
|
118 |
-
|
119 |
-
[ $this, '
|
120 |
);
|
121 |
add_action( 'load-' . $page, [ $this, 'load_scripts_for_page' ] );
|
122 |
}
|
123 |
|
124 |
/**
|
125 |
-
* Loads selected view on plugin settings page.
|
126 |
-
*
|
127 |
* @return void
|
128 |
* @internal
|
129 |
*/
|
130 |
-
public function
|
131 |
-
$
|
|
|
|
|
132 |
foreach ( $this->pages as $page ) {
|
133 |
-
if ( $page->get_slug()
|
134 |
-
|
135 |
-
$page->get_template_path(),
|
136 |
-
array_merge(
|
137 |
-
$page->get_template_vars(),
|
138 |
-
[
|
139 |
-
'menu_items' => array_map(
|
140 |
-
function ( PageInterface $settings_page ) use ( $current_tab_name ) {
|
141 |
-
return [
|
142 |
-
'url' => self::get_settings_page_url( $settings_page->get_slug() ),
|
143 |
-
'title' => $settings_page->get_label(),
|
144 |
-
'is_active' => ( $settings_page->get_slug() === $current_tab_name ),
|
145 |
-
];
|
146 |
-
},
|
147 |
-
$this->pages
|
148 |
-
),
|
149 |
-
]
|
150 |
-
)
|
151 |
-
);
|
152 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
153 |
}
|
154 |
}
|
155 |
|
@@ -161,6 +165,5 @@ class PageIntegration implements HookableInterface {
|
|
161 |
*/
|
162 |
public function load_scripts_for_page() {
|
163 |
( new NoticeIntegration( $this->plugin_info, new WelcomeNotice() ) )->set_disable_value();
|
164 |
-
( new AdminAssets( $this->plugin_info ) )->init_hooks();
|
165 |
}
|
166 |
}
|
7 |
use WebpConverter\Notice\WelcomeNotice;
|
8 |
use WebpConverter\PluginInfo;
|
9 |
use WebpConverter\Service\ViewLoader;
|
|
|
10 |
|
11 |
/**
|
12 |
* Adds plugin settings page in admin panel.
|
13 |
*/
|
14 |
class PageIntegration implements HookableInterface {
|
15 |
|
16 |
+
const SETTINGS_MENU_PAGE = 'webpc_admin_page';
|
17 |
+
const UPLOAD_MENU_PAGE = 'webpc_optimization_page';
|
18 |
|
19 |
/**
|
20 |
* @var PluginInfo
|
68 |
*/
|
69 |
public static function get_settings_page_url( string $action = null ): string {
|
70 |
if ( ! is_multisite() ) {
|
71 |
+
$page_url = admin_url( 'options-general.php?page=' . self::SETTINGS_MENU_PAGE );
|
72 |
} else {
|
73 |
+
$page_url = network_admin_url( 'settings.php?page=' . self::SETTINGS_MENU_PAGE );
|
74 |
}
|
75 |
|
76 |
if ( $action !== null ) {
|
89 |
if ( is_multisite() ) {
|
90 |
return;
|
91 |
}
|
92 |
+
$this->add_settings_page( 'options-general.php', self::SETTINGS_MENU_PAGE );
|
93 |
+
$this->add_settings_page( 'upload.php', self::UPLOAD_MENU_PAGE );
|
94 |
}
|
95 |
|
96 |
/**
|
100 |
* @internal
|
101 |
*/
|
102 |
public function add_settings_page_for_network() {
|
103 |
+
$this->add_settings_page( 'settings.php', self::SETTINGS_MENU_PAGE );
|
104 |
}
|
105 |
|
106 |
/**
|
107 |
* Creates plugin settings page in WordPress Admin Dashboard.
|
108 |
*
|
109 |
+
* @param string $parent_page Parent menu page.
|
110 |
+
* @param string $menu_page .
|
111 |
*
|
112 |
* @return void
|
113 |
*/
|
114 |
+
private function add_settings_page( string $parent_page, string $menu_page ) {
|
115 |
$page = add_submenu_page(
|
116 |
+
$parent_page,
|
117 |
'Converter for Media',
|
118 |
'Converter for Media',
|
119 |
'manage_options',
|
120 |
+
$menu_page,
|
121 |
+
[ $this, 'load_plugin_page' ]
|
122 |
);
|
123 |
add_action( 'load-' . $page, [ $this, 'load_scripts_for_page' ] );
|
124 |
}
|
125 |
|
126 |
/**
|
|
|
|
|
127 |
* @return void
|
128 |
* @internal
|
129 |
*/
|
130 |
+
public function load_plugin_page() {
|
131 |
+
$page_name = $_GET['page'] ?? null; // phpcs:ignore WordPress.Security
|
132 |
+
$tab_name = $_GET['action'] ?? null; // phpcs:ignore WordPress.Security
|
133 |
+
|
134 |
foreach ( $this->pages as $page ) {
|
135 |
+
if ( ( $page->get_menu_parent() !== $page_name ) || ( $page->get_slug() !== $tab_name ) ) {
|
136 |
+
continue;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
137 |
}
|
138 |
+
|
139 |
+
$this->view_loader->load_view(
|
140 |
+
$page->get_template_path(),
|
141 |
+
array_merge(
|
142 |
+
$page->get_template_vars(),
|
143 |
+
[
|
144 |
+
'menu_items' => array_map(
|
145 |
+
function ( PageInterface $settings_page ) use ( $page ) {
|
146 |
+
return [
|
147 |
+
'url' => $settings_page->get_menu_url(),
|
148 |
+
'title' => $settings_page->get_label(),
|
149 |
+
'is_active' => ( $settings_page === $page ),
|
150 |
+
];
|
151 |
+
},
|
152 |
+
$this->pages
|
153 |
+
),
|
154 |
+
]
|
155 |
+
)
|
156 |
+
);
|
157 |
}
|
158 |
}
|
159 |
|
165 |
*/
|
166 |
public function load_scripts_for_page() {
|
167 |
( new NoticeIntegration( $this->plugin_info, new WelcomeNotice() ) )->set_disable_value();
|
|
|
168 |
}
|
169 |
}
|
src/Settings/Page/PageInterface.php
CHANGED
@@ -12,6 +12,16 @@ interface PageInterface {
|
|
12 |
*/
|
13 |
public function get_slug();
|
14 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
15 |
/**
|
16 |
* @return string
|
17 |
*/
|
12 |
*/
|
13 |
public function get_slug();
|
14 |
|
15 |
+
/**
|
16 |
+
* @return string
|
17 |
+
*/
|
18 |
+
public function get_menu_parent(): string;
|
19 |
+
|
20 |
+
/**
|
21 |
+
* @return string|null
|
22 |
+
*/
|
23 |
+
public function get_menu_url();
|
24 |
+
|
25 |
/**
|
26 |
* @return string
|
27 |
*/
|
src/WebpConverter.php
CHANGED
@@ -36,7 +36,7 @@ class WebpConverter {
|
|
36 |
( new Conversion\SkipExcludedPaths() )->init_hooks();
|
37 |
( new Cron\CronEventGenerator( $plugin_data, $token_repository ) )->init_hooks();
|
38 |
( new Cron\CronSchedulesGenerator() )->init_hooks();
|
39 |
-
( new Cron\CronStatusViewer(
|
40 |
( new ErrorDetectorAggregator( $plugin_info, $plugin_data ) )->init_hooks();
|
41 |
( new Notice\NoticeIntegration( $plugin_info, new Notice\WelcomeNotice() ) )->init_hooks();
|
42 |
( new Notice\NoticeIntegration( $plugin_info, new Notice\ThanksNotice() ) )->init_hooks();
|
@@ -55,9 +55,11 @@ class WebpConverter {
|
|
55 |
->set_page_integration( new Page\GeneralSettingsPage( $plugin_info, $plugin_data, $token_repository ) )
|
56 |
->set_page_integration( new Page\AdvancedSettingsPage( $plugin_info, $plugin_data, $token_repository ) )
|
57 |
->set_page_integration( new Page\DebugPage( $plugin_info, $plugin_data ) )
|
|
|
58 |
->init_hooks();
|
59 |
( new Service\BackupExcluder() )->init_hooks();
|
60 |
( new Service\DeactivationModalGenerator( $plugin_info, $plugin_data ) )->load_modal();
|
|
|
61 |
( new Service\WpCliManager( $plugin_data, $token_repository ) )->init_hooks();
|
62 |
( new Settings\AdminAssets( $plugin_info ) )->init_hooks();
|
63 |
}
|
36 |
( new Conversion\SkipExcludedPaths() )->init_hooks();
|
37 |
( new Cron\CronEventGenerator( $plugin_data, $token_repository ) )->init_hooks();
|
38 |
( new Cron\CronSchedulesGenerator() )->init_hooks();
|
39 |
+
( new Cron\CronStatusViewer() )->init_hooks();
|
40 |
( new ErrorDetectorAggregator( $plugin_info, $plugin_data ) )->init_hooks();
|
41 |
( new Notice\NoticeIntegration( $plugin_info, new Notice\WelcomeNotice() ) )->init_hooks();
|
42 |
( new Notice\NoticeIntegration( $plugin_info, new Notice\ThanksNotice() ) )->init_hooks();
|
55 |
->set_page_integration( new Page\GeneralSettingsPage( $plugin_info, $plugin_data, $token_repository ) )
|
56 |
->set_page_integration( new Page\AdvancedSettingsPage( $plugin_info, $plugin_data, $token_repository ) )
|
57 |
->set_page_integration( new Page\DebugPage( $plugin_info, $plugin_data ) )
|
58 |
+
->set_page_integration( new Page\BulkOptimizationPage( $plugin_info, $plugin_data, $token_repository ) )
|
59 |
->init_hooks();
|
60 |
( new Service\BackupExcluder() )->init_hooks();
|
61 |
( new Service\DeactivationModalGenerator( $plugin_info, $plugin_data ) )->load_modal();
|
62 |
+
( new Service\MediaStatusViewer( $plugin_data, $token_repository ) )->init_hooks();
|
63 |
( new Service\WpCliManager( $plugin_data, $token_repository ) )->init_hooks();
|
64 |
( new Settings\AdminAssets( $plugin_info ) )->init_hooks();
|
65 |
}
|
templates/components/widgets/menu.php
CHANGED
@@ -12,12 +12,14 @@
|
|
12 |
<div class="webpcMenu__wrapper">
|
13 |
<div class="webpcMenu__items">
|
14 |
<?php foreach ( $menu_items as $menu_item ) : ?>
|
15 |
-
|
16 |
-
<
|
17 |
-
|
18 |
-
|
19 |
-
|
20 |
-
|
|
|
|
|
21 |
<?php endforeach; ?>
|
22 |
</div>
|
23 |
</div>
|
12 |
<div class="webpcMenu__wrapper">
|
13 |
<div class="webpcMenu__items">
|
14 |
<?php foreach ( $menu_items as $menu_item ) : ?>
|
15 |
+
<?php if ( $menu_item['url'] !== null ) : ?>
|
16 |
+
<div class="webpcMenu__item">
|
17 |
+
<a href="<?php echo esc_attr( $menu_item['url'] ); ?>"
|
18 |
+
class="webpcMenu__itemLink <?php echo ( $menu_item['is_active'] ) ? 'webpcMenu__itemLink--active' : ''; ?>">
|
19 |
+
<?php echo esc_attr( $menu_item['title'] ); ?>
|
20 |
+
</a>
|
21 |
+
</div>
|
22 |
+
<?php endif; ?>
|
23 |
<?php endforeach; ?>
|
24 |
</div>
|
25 |
</div>
|
templates/views/settings.php
CHANGED
@@ -2,23 +2,23 @@
|
|
2 |
/**
|
3 |
* Main tab of plugin settings page.
|
4 |
*
|
5 |
-
* @var string
|
6 |
-
* @var string[][]
|
7 |
-
* @var string[][]
|
8 |
-
* @var string[]
|
9 |
-
* @var mixed[]
|
10 |
-
* @var mixed[]
|
11 |
-
* @var string
|
12 |
-
* @var string
|
13 |
-
* @var string
|
14 |
-
* @var string
|
15 |
-
* @var string
|
16 |
-
* @var bool
|
17 |
-
* @var string
|
18 |
-
* @var string|null
|
19 |
-
* @var string|null
|
20 |
-
* @var string
|
21 |
-
* @var string[][]
|
22 |
*
|
23 |
* @package Converter for Media
|
24 |
*/
|
@@ -46,7 +46,9 @@
|
|
46 |
<?php
|
47 |
require_once dirname( __DIR__ ) . '/components/widgets/errors.php';
|
48 |
require_once dirname( __DIR__ ) . '/components/widgets/menu.php';
|
49 |
-
|
|
|
|
|
50 |
require_once dirname( __DIR__ ) . '/components/widgets/regenerate.php';
|
51 |
?>
|
52 |
</li>
|
2 |
/**
|
3 |
* Main tab of plugin settings page.
|
4 |
*
|
5 |
+
* @var string $logo_url Plugin logo.
|
6 |
+
* @var string[][] $menu_items Tabs on plugin settings page.
|
7 |
+
* @var string[][] $errors_messages Arrays with array of paragraphs.
|
8 |
+
* @var string[] $errors_codes List of server configuration errors.
|
9 |
+
* @var mixed[]|null $form_options Settings options in main container.
|
10 |
+
* @var mixed[] $form_sidebar_options Settings options in sidebar.
|
11 |
+
* @var string $form_input_name Name of hidden field with form ID.
|
12 |
+
* @var string|null $form_input_value ID of settings form in main container.
|
13 |
+
* @var string $form_sidebar_input_value ID of settings form in sidebar.
|
14 |
+
* @var string $nonce_input_name Name of hidden field with WordPress Nonce value.
|
15 |
+
* @var string $nonce_input_value WordPress Nonce value.
|
16 |
+
* @var bool $token_valid_status Status of PRO version.
|
17 |
+
* @var string $api_calculate_url URL of REST API endpoint.
|
18 |
+
* @var string|null $api_paths_url URL of REST API endpoint.
|
19 |
+
* @var string|null $api_regenerate_url URL of REST API endpoint.
|
20 |
+
* @var string $url_debug_page URL of debug tag in settings page.
|
21 |
+
* @var string[][] $output_formats Data about output formats for regeneration.
|
22 |
*
|
23 |
* @package Converter for Media
|
24 |
*/
|
46 |
<?php
|
47 |
require_once dirname( __DIR__ ) . '/components/widgets/errors.php';
|
48 |
require_once dirname( __DIR__ ) . '/components/widgets/menu.php';
|
49 |
+
if ( ( $form_options !== null ) && ( $form_input_value !== null ) ) {
|
50 |
+
require_once dirname( __DIR__ ) . '/components/widgets/options.php';
|
51 |
+
}
|
52 |
require_once dirname( __DIR__ ) . '/components/widgets/regenerate.php';
|
53 |
?>
|
54 |
</li>
|
vendor/composer/autoload_classmap.php
CHANGED
@@ -149,6 +149,7 @@ return array(
|
|
149 |
'WebpConverter\\Service\\BackupExcluder' => $baseDir . '/src/Service/BackupExcluder.php',
|
150 |
'WebpConverter\\Service\\DeactivationModalGenerator' => $baseDir . '/src/Service/DeactivationModalGenerator.php',
|
151 |
'WebpConverter\\Service\\FileLoader' => $baseDir . '/src/Service/FileLoader.php',
|
|
|
152 |
'WebpConverter\\Service\\NonceManager' => $baseDir . '/src/Service/NonceManager.php',
|
153 |
'WebpConverter\\Service\\OptionsAccessManager' => $baseDir . '/src/Service/OptionsAccessManager.php',
|
154 |
'WebpConverter\\Service\\PathsGenerator' => $baseDir . '/src/Service/PathsGenerator.php',
|
@@ -165,6 +166,7 @@ return array(
|
|
165 |
'WebpConverter\\Settings\\Option\\ImageResizeOption' => $baseDir . '/src/Settings/Option/ImageResizeOption.php',
|
166 |
'WebpConverter\\Settings\\Option\\ImagesQualityOption' => $baseDir . '/src/Settings/Option/ImagesQualityOption.php',
|
167 |
'WebpConverter\\Settings\\Option\\LoaderTypeOption' => $baseDir . '/src/Settings/Option/LoaderTypeOption.php',
|
|
|
168 |
'WebpConverter\\Settings\\Option\\OptionAbstract' => $baseDir . '/src/Settings/Option/OptionAbstract.php',
|
169 |
'WebpConverter\\Settings\\Option\\OptionIntegration' => $baseDir . '/src/Settings/Option/OptionIntegration.php',
|
170 |
'WebpConverter\\Settings\\Option\\OptionInterface' => $baseDir . '/src/Settings/Option/OptionInterface.php',
|
@@ -173,6 +175,7 @@ return array(
|
|
173 |
'WebpConverter\\Settings\\Option\\SupportedDirectoriesOption' => $baseDir . '/src/Settings/Option/SupportedDirectoriesOption.php',
|
174 |
'WebpConverter\\Settings\\Option\\SupportedExtensionsOption' => $baseDir . '/src/Settings/Option/SupportedExtensionsOption.php',
|
175 |
'WebpConverter\\Settings\\Page\\AdvancedSettingsPage' => $baseDir . '/src/Settings/Page/AdvancedSettingsPage.php',
|
|
|
176 |
'WebpConverter\\Settings\\Page\\DebugPage' => $baseDir . '/src/Settings/Page/DebugPage.php',
|
177 |
'WebpConverter\\Settings\\Page\\GeneralSettingsPage' => $baseDir . '/src/Settings/Page/GeneralSettingsPage.php',
|
178 |
'WebpConverter\\Settings\\Page\\PageAbstract' => $baseDir . '/src/Settings/Page/PageAbstract.php',
|
149 |
'WebpConverter\\Service\\BackupExcluder' => $baseDir . '/src/Service/BackupExcluder.php',
|
150 |
'WebpConverter\\Service\\DeactivationModalGenerator' => $baseDir . '/src/Service/DeactivationModalGenerator.php',
|
151 |
'WebpConverter\\Service\\FileLoader' => $baseDir . '/src/Service/FileLoader.php',
|
152 |
+
'WebpConverter\\Service\\MediaStatusViewer' => $baseDir . '/src/Service/MediaStatusViewer.php',
|
153 |
'WebpConverter\\Service\\NonceManager' => $baseDir . '/src/Service/NonceManager.php',
|
154 |
'WebpConverter\\Service\\OptionsAccessManager' => $baseDir . '/src/Service/OptionsAccessManager.php',
|
155 |
'WebpConverter\\Service\\PathsGenerator' => $baseDir . '/src/Service/PathsGenerator.php',
|
166 |
'WebpConverter\\Settings\\Option\\ImageResizeOption' => $baseDir . '/src/Settings/Option/ImageResizeOption.php',
|
167 |
'WebpConverter\\Settings\\Option\\ImagesQualityOption' => $baseDir . '/src/Settings/Option/ImagesQualityOption.php',
|
168 |
'WebpConverter\\Settings\\Option\\LoaderTypeOption' => $baseDir . '/src/Settings/Option/LoaderTypeOption.php',
|
169 |
+
'WebpConverter\\Settings\\Option\\MediaStatsOption' => $baseDir . '/src/Settings/Option/MediaStatsOption.php',
|
170 |
'WebpConverter\\Settings\\Option\\OptionAbstract' => $baseDir . '/src/Settings/Option/OptionAbstract.php',
|
171 |
'WebpConverter\\Settings\\Option\\OptionIntegration' => $baseDir . '/src/Settings/Option/OptionIntegration.php',
|
172 |
'WebpConverter\\Settings\\Option\\OptionInterface' => $baseDir . '/src/Settings/Option/OptionInterface.php',
|
175 |
'WebpConverter\\Settings\\Option\\SupportedDirectoriesOption' => $baseDir . '/src/Settings/Option/SupportedDirectoriesOption.php',
|
176 |
'WebpConverter\\Settings\\Option\\SupportedExtensionsOption' => $baseDir . '/src/Settings/Option/SupportedExtensionsOption.php',
|
177 |
'WebpConverter\\Settings\\Page\\AdvancedSettingsPage' => $baseDir . '/src/Settings/Page/AdvancedSettingsPage.php',
|
178 |
+
'WebpConverter\\Settings\\Page\\BulkOptimizationPage' => $baseDir . '/src/Settings/Page/BulkOptimizationPage.php',
|
179 |
'WebpConverter\\Settings\\Page\\DebugPage' => $baseDir . '/src/Settings/Page/DebugPage.php',
|
180 |
'WebpConverter\\Settings\\Page\\GeneralSettingsPage' => $baseDir . '/src/Settings/Page/GeneralSettingsPage.php',
|
181 |
'WebpConverter\\Settings\\Page\\PageAbstract' => $baseDir . '/src/Settings/Page/PageAbstract.php',
|
vendor/composer/autoload_static.php
CHANGED
@@ -164,6 +164,7 @@ class ComposerStaticInit5dda79ecb8a6ed3558675f4c77c86e5a
|
|
164 |
'WebpConverter\\Service\\BackupExcluder' => __DIR__ . '/../..' . '/src/Service/BackupExcluder.php',
|
165 |
'WebpConverter\\Service\\DeactivationModalGenerator' => __DIR__ . '/../..' . '/src/Service/DeactivationModalGenerator.php',
|
166 |
'WebpConverter\\Service\\FileLoader' => __DIR__ . '/../..' . '/src/Service/FileLoader.php',
|
|
|
167 |
'WebpConverter\\Service\\NonceManager' => __DIR__ . '/../..' . '/src/Service/NonceManager.php',
|
168 |
'WebpConverter\\Service\\OptionsAccessManager' => __DIR__ . '/../..' . '/src/Service/OptionsAccessManager.php',
|
169 |
'WebpConverter\\Service\\PathsGenerator' => __DIR__ . '/../..' . '/src/Service/PathsGenerator.php',
|
@@ -180,6 +181,7 @@ class ComposerStaticInit5dda79ecb8a6ed3558675f4c77c86e5a
|
|
180 |
'WebpConverter\\Settings\\Option\\ImageResizeOption' => __DIR__ . '/../..' . '/src/Settings/Option/ImageResizeOption.php',
|
181 |
'WebpConverter\\Settings\\Option\\ImagesQualityOption' => __DIR__ . '/../..' . '/src/Settings/Option/ImagesQualityOption.php',
|
182 |
'WebpConverter\\Settings\\Option\\LoaderTypeOption' => __DIR__ . '/../..' . '/src/Settings/Option/LoaderTypeOption.php',
|
|
|
183 |
'WebpConverter\\Settings\\Option\\OptionAbstract' => __DIR__ . '/../..' . '/src/Settings/Option/OptionAbstract.php',
|
184 |
'WebpConverter\\Settings\\Option\\OptionIntegration' => __DIR__ . '/../..' . '/src/Settings/Option/OptionIntegration.php',
|
185 |
'WebpConverter\\Settings\\Option\\OptionInterface' => __DIR__ . '/../..' . '/src/Settings/Option/OptionInterface.php',
|
@@ -188,6 +190,7 @@ class ComposerStaticInit5dda79ecb8a6ed3558675f4c77c86e5a
|
|
188 |
'WebpConverter\\Settings\\Option\\SupportedDirectoriesOption' => __DIR__ . '/../..' . '/src/Settings/Option/SupportedDirectoriesOption.php',
|
189 |
'WebpConverter\\Settings\\Option\\SupportedExtensionsOption' => __DIR__ . '/../..' . '/src/Settings/Option/SupportedExtensionsOption.php',
|
190 |
'WebpConverter\\Settings\\Page\\AdvancedSettingsPage' => __DIR__ . '/../..' . '/src/Settings/Page/AdvancedSettingsPage.php',
|
|
|
191 |
'WebpConverter\\Settings\\Page\\DebugPage' => __DIR__ . '/../..' . '/src/Settings/Page/DebugPage.php',
|
192 |
'WebpConverter\\Settings\\Page\\GeneralSettingsPage' => __DIR__ . '/../..' . '/src/Settings/Page/GeneralSettingsPage.php',
|
193 |
'WebpConverter\\Settings\\Page\\PageAbstract' => __DIR__ . '/../..' . '/src/Settings/Page/PageAbstract.php',
|
164 |
'WebpConverter\\Service\\BackupExcluder' => __DIR__ . '/../..' . '/src/Service/BackupExcluder.php',
|
165 |
'WebpConverter\\Service\\DeactivationModalGenerator' => __DIR__ . '/../..' . '/src/Service/DeactivationModalGenerator.php',
|
166 |
'WebpConverter\\Service\\FileLoader' => __DIR__ . '/../..' . '/src/Service/FileLoader.php',
|
167 |
+
'WebpConverter\\Service\\MediaStatusViewer' => __DIR__ . '/../..' . '/src/Service/MediaStatusViewer.php',
|
168 |
'WebpConverter\\Service\\NonceManager' => __DIR__ . '/../..' . '/src/Service/NonceManager.php',
|
169 |
'WebpConverter\\Service\\OptionsAccessManager' => __DIR__ . '/../..' . '/src/Service/OptionsAccessManager.php',
|
170 |
'WebpConverter\\Service\\PathsGenerator' => __DIR__ . '/../..' . '/src/Service/PathsGenerator.php',
|
181 |
'WebpConverter\\Settings\\Option\\ImageResizeOption' => __DIR__ . '/../..' . '/src/Settings/Option/ImageResizeOption.php',
|
182 |
'WebpConverter\\Settings\\Option\\ImagesQualityOption' => __DIR__ . '/../..' . '/src/Settings/Option/ImagesQualityOption.php',
|
183 |
'WebpConverter\\Settings\\Option\\LoaderTypeOption' => __DIR__ . '/../..' . '/src/Settings/Option/LoaderTypeOption.php',
|
184 |
+
'WebpConverter\\Settings\\Option\\MediaStatsOption' => __DIR__ . '/../..' . '/src/Settings/Option/MediaStatsOption.php',
|
185 |
'WebpConverter\\Settings\\Option\\OptionAbstract' => __DIR__ . '/../..' . '/src/Settings/Option/OptionAbstract.php',
|
186 |
'WebpConverter\\Settings\\Option\\OptionIntegration' => __DIR__ . '/../..' . '/src/Settings/Option/OptionIntegration.php',
|
187 |
'WebpConverter\\Settings\\Option\\OptionInterface' => __DIR__ . '/../..' . '/src/Settings/Option/OptionInterface.php',
|
190 |
'WebpConverter\\Settings\\Option\\SupportedDirectoriesOption' => __DIR__ . '/../..' . '/src/Settings/Option/SupportedDirectoriesOption.php',
|
191 |
'WebpConverter\\Settings\\Option\\SupportedExtensionsOption' => __DIR__ . '/../..' . '/src/Settings/Option/SupportedExtensionsOption.php',
|
192 |
'WebpConverter\\Settings\\Page\\AdvancedSettingsPage' => __DIR__ . '/../..' . '/src/Settings/Page/AdvancedSettingsPage.php',
|
193 |
+
'WebpConverter\\Settings\\Page\\BulkOptimizationPage' => __DIR__ . '/../..' . '/src/Settings/Page/BulkOptimizationPage.php',
|
194 |
'WebpConverter\\Settings\\Page\\DebugPage' => __DIR__ . '/../..' . '/src/Settings/Page/DebugPage.php',
|
195 |
'WebpConverter\\Settings\\Page\\GeneralSettingsPage' => __DIR__ . '/../..' . '/src/Settings/Page/GeneralSettingsPage.php',
|
196 |
'WebpConverter\\Settings\\Page\\PageAbstract' => __DIR__ . '/../..' . '/src/Settings/Page/PageAbstract.php',
|
vendor/composer/installed.php
CHANGED
@@ -5,7 +5,7 @@
|
|
5 |
'type' => 'library',
|
6 |
'install_path' => __DIR__ . '/../../',
|
7 |
'aliases' => array(),
|
8 |
-
'reference' => '
|
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' => '
|
20 |
'dev_requirement' => false,
|
21 |
),
|
22 |
'matt-plugins/deactivation-modal' => array(
|
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 |
'type' => 'library',
|
17 |
'install_path' => __DIR__ . '/../../',
|
18 |
'aliases' => array(),
|
19 |
+
'reference' => '68e903d3e477409047c6ea1a5484f8d8a3bc718e',
|
20 |
'dev_requirement' => false,
|
21 |
),
|
22 |
'matt-plugins/deactivation-modal' => array(
|
webp-converter-for-media.php
CHANGED
@@ -3,7 +3,7 @@
|
|
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.0
|
7 |
* Author: Mateusz Gbiorczyk - Optimize Images by convert AVIF & WebP
|
8 |
* Author URI: https://mattplugins.com/
|
9 |
* Text Domain: webp-converter-for-media
|
@@ -13,5 +13,5 @@
|
|
13 |
require_once __DIR__ . '/vendor/autoload.php';
|
14 |
|
15 |
new WebpConverter\WebpConverter(
|
16 |
-
new WebpConverter\PluginInfo( __FILE__, '5.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.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
|
13 |
require_once __DIR__ . '/vendor/autoload.php';
|
14 |
|
15 |
new WebpConverter\WebpConverter(
|
16 |
+
new WebpConverter\PluginInfo( __FILE__, '5.1.0' )
|
17 |
);
|