Changeset 3439148
- Timestamp:
- 01/14/2026 04:59:20 AM (5 weeks ago)
- Location:
- easy-critical-css
- Files:
-
- 326 added
- 18 edited
-
tags/1.4.6 (added)
-
tags/1.4.6/LICENSE (added)
-
tags/1.4.6/REFERENCE_DOCS (added)
-
tags/1.4.6/REFERENCE_DOCS/added-features (added)
-
tags/1.4.6/REFERENCE_DOCS/plugin (added)
-
tags/1.4.6/REFERENCE_DOCS/server (added)
-
tags/1.4.6/assets (added)
-
tags/1.4.6/assets/admin.css (added)
-
tags/1.4.6/assets/admin.js (added)
-
tags/1.4.6/build (added)
-
tags/1.4.6/build/index.asset.php (added)
-
tags/1.4.6/build/index.js (added)
-
tags/1.4.6/composer.json (added)
-
tags/1.4.6/easy-critical-css.php (added)
-
tags/1.4.6/inc (added)
-
tags/1.4.6/inc/class-admin-settings.php (added)
-
tags/1.4.6/inc/class-api-request-handler.php (added)
-
tags/1.4.6/inc/class-api-service.php (added)
-
tags/1.4.6/inc/class-compatibility-cache.php (added)
-
tags/1.4.6/inc/class-compatibility-cloudflare.php (added)
-
tags/1.4.6/inc/class-compatibility-ewww.php (added)
-
tags/1.4.6/inc/class-compatibility-perfmatters.php (added)
-
tags/1.4.6/inc/class-compatibility-trellis.php (added)
-
tags/1.4.6/inc/class-compatibility-woocommerce.php (added)
-
tags/1.4.6/inc/class-compatibility-wp-rocket.php (added)
-
tags/1.4.6/inc/class-critical-css-injector.php (added)
-
tags/1.4.6/inc/class-critical-css-regenerate.php (added)
-
tags/1.4.6/inc/class-critical-css-server.php (added)
-
tags/1.4.6/inc/class-critical-css-status.php (added)
-
tags/1.4.6/inc/class-critical-css.php (added)
-
tags/1.4.6/inc/class-database.php (added)
-
tags/1.4.6/inc/class-debug.php (added)
-
tags/1.4.6/inc/class-delete-handler.php (added)
-
tags/1.4.6/inc/class-gutenberg.php (added)
-
tags/1.4.6/inc/class-helpers.php (added)
-
tags/1.4.6/inc/class-individual-settings.php (added)
-
tags/1.4.6/inc/class-notification.php (added)
-
tags/1.4.6/inc/class-plugin.php (added)
-
tags/1.4.6/inc/class-reset-handler.php (added)
-
tags/1.4.6/inc/class-rest-api.php (added)
-
tags/1.4.6/inc/class-settings.php (added)
-
tags/1.4.6/inc/class-timed-option.php (added)
-
tags/1.4.6/inc/class-uninstall-handler.php (added)
-
tags/1.4.6/inc/compatibility (added)
-
tags/1.4.6/inc/compatibility/class-compatibility-add-to-any.php (added)
-
tags/1.4.6/inc/compatibility/class-compatibility-cache.php (added)
-
tags/1.4.6/inc/compatibility/class-compatibility-cloudflare.php (added)
-
tags/1.4.6/inc/compatibility/class-compatibility-ewww.php (added)
-
tags/1.4.6/inc/compatibility/class-compatibility-jetpack-boost.php (added)
-
tags/1.4.6/inc/compatibility/class-compatibility-perfmatters.php (added)
-
tags/1.4.6/inc/compatibility/class-compatibility-trellis.php (added)
-
tags/1.4.6/inc/compatibility/class-compatibility-woocommerce.php (added)
-
tags/1.4.6/inc/compatibility/class-compatibility-wp-rocket.php (added)
-
tags/1.4.6/inc/compatibility/class-compatibility.php (added)
-
tags/1.4.6/inc/load-freemius.php (added)
-
tags/1.4.6/package.json (added)
-
tags/1.4.6/readme.txt (added)
-
tags/1.4.6/src (added)
-
tags/1.4.6/src/components (added)
-
tags/1.4.6/src/components/generateButton.tsx (added)
-
tags/1.4.6/src/components/settingsField.tsx (added)
-
tags/1.4.6/src/components/settingsPanel.tsx (added)
-
tags/1.4.6/src/components/statusIndicator.tsx (added)
-
tags/1.4.6/src/hooks (added)
-
tags/1.4.6/src/hooks/useEffectiveSettings.ts (added)
-
tags/1.4.6/src/hooks/usePostSaving.ts (added)
-
tags/1.4.6/src/hooks/useSettings.ts (added)
-
tags/1.4.6/src/hooks/useSettingsVisibility.ts (added)
-
tags/1.4.6/src/hooks/useStatus.ts (added)
-
tags/1.4.6/src/index.tsx (added)
-
tags/1.4.6/src/types (added)
-
tags/1.4.6/src/types/types.ts (added)
-
tags/1.4.6/src/types/wordpress.d.ts (added)
-
tags/1.4.6/vendor (added)
-
tags/1.4.6/vendor/autoload.php (added)
-
tags/1.4.6/vendor/composer (added)
-
tags/1.4.6/vendor/composer/ClassLoader.php (added)
-
tags/1.4.6/vendor/composer/InstalledVersions.php (added)
-
tags/1.4.6/vendor/composer/LICENSE (added)
-
tags/1.4.6/vendor/composer/autoload_classmap.php (added)
-
tags/1.4.6/vendor/composer/autoload_files.php (added)
-
tags/1.4.6/vendor/composer/autoload_namespaces.php (added)
-
tags/1.4.6/vendor/composer/autoload_psr4.php (added)
-
tags/1.4.6/vendor/composer/autoload_real.php (added)
-
tags/1.4.6/vendor/composer/autoload_static.php (added)
-
tags/1.4.6/vendor/composer/installed.json (added)
-
tags/1.4.6/vendor/composer/installed.php (added)
-
tags/1.4.6/vendor/composer/platform_check.php (added)
-
tags/1.4.6/vendor/freemius (added)
-
tags/1.4.6/vendor/freemius/wordpress-sdk (added)
-
tags/1.4.6/vendor/freemius/wordpress-sdk/LICENSE.txt (added)
-
tags/1.4.6/vendor/freemius/wordpress-sdk/assets (added)
-
tags/1.4.6/vendor/freemius/wordpress-sdk/assets/css (added)
-
tags/1.4.6/vendor/freemius/wordpress-sdk/assets/css/admin (added)
-
tags/1.4.6/vendor/freemius/wordpress-sdk/assets/css/admin/account.css (added)
-
tags/1.4.6/vendor/freemius/wordpress-sdk/assets/css/admin/add-ons.css (added)
-
tags/1.4.6/vendor/freemius/wordpress-sdk/assets/css/admin/affiliation.css (added)
-
tags/1.4.6/vendor/freemius/wordpress-sdk/assets/css/admin/checkout.css (added)
-
tags/1.4.6/vendor/freemius/wordpress-sdk/assets/css/admin/clone-resolution.css (added)
-
tags/1.4.6/vendor/freemius/wordpress-sdk/assets/css/admin/common.css (added)
-
tags/1.4.6/vendor/freemius/wordpress-sdk/assets/css/admin/connect.css (added)
-
tags/1.4.6/vendor/freemius/wordpress-sdk/assets/css/admin/debug.css (added)
-
tags/1.4.6/vendor/freemius/wordpress-sdk/assets/css/admin/dialog-boxes.css (added)
-
tags/1.4.6/vendor/freemius/wordpress-sdk/assets/css/admin/gdpr-optin-notice.css (added)
-
tags/1.4.6/vendor/freemius/wordpress-sdk/assets/css/admin/index.php (added)
-
tags/1.4.6/vendor/freemius/wordpress-sdk/assets/css/admin/optout.css (added)
-
tags/1.4.6/vendor/freemius/wordpress-sdk/assets/css/admin/plugins.css (added)
-
tags/1.4.6/vendor/freemius/wordpress-sdk/assets/css/customizer.css (added)
-
tags/1.4.6/vendor/freemius/wordpress-sdk/assets/css/index.php (added)
-
tags/1.4.6/vendor/freemius/wordpress-sdk/assets/img (added)
-
tags/1.4.6/vendor/freemius/wordpress-sdk/assets/img/index.php (added)
-
tags/1.4.6/vendor/freemius/wordpress-sdk/assets/img/plugin-icon.png (added)
-
tags/1.4.6/vendor/freemius/wordpress-sdk/assets/img/theme-icon.png (added)
-
tags/1.4.6/vendor/freemius/wordpress-sdk/assets/index.php (added)
-
tags/1.4.6/vendor/freemius/wordpress-sdk/assets/js (added)
-
tags/1.4.6/vendor/freemius/wordpress-sdk/assets/js/index.php (added)
-
tags/1.4.6/vendor/freemius/wordpress-sdk/assets/js/jquery.form.js (added)
-
tags/1.4.6/vendor/freemius/wordpress-sdk/assets/js/nojquery.ba-postmessage.js (added)
-
tags/1.4.6/vendor/freemius/wordpress-sdk/assets/js/postmessage.js (added)
-
tags/1.4.6/vendor/freemius/wordpress-sdk/assets/js/pricing (added)
-
tags/1.4.6/vendor/freemius/wordpress-sdk/assets/js/pricing/14fb1bd5b7c41648488b06147f50a0dc.svg (added)
-
tags/1.4.6/vendor/freemius/wordpress-sdk/assets/js/pricing/178afa6030e76635dbe835e111d2c507.png (added)
-
tags/1.4.6/vendor/freemius/wordpress-sdk/assets/js/pricing/27b5a722a5553d9de0170325267fccec.png (added)
-
tags/1.4.6/vendor/freemius/wordpress-sdk/assets/js/pricing/4375c4a3ddc6f637c2ab9a2d7220f91e.png (added)
-
tags/1.4.6/vendor/freemius/wordpress-sdk/assets/js/pricing/45da596e2b512ffc3bb638baaf0fdc4e.png (added)
-
tags/1.4.6/vendor/freemius/wordpress-sdk/assets/js/pricing/a34e046aee1702a5690679750a7f4d0f.svg (added)
-
tags/1.4.6/vendor/freemius/wordpress-sdk/assets/js/pricing/b09d0b38b627c2fa564d050f79f2f064.svg (added)
-
tags/1.4.6/vendor/freemius/wordpress-sdk/assets/js/pricing/c03f665db27af43971565560adfba594.png (added)
-
tags/1.4.6/vendor/freemius/wordpress-sdk/assets/js/pricing/cb5fc4f6ec7ada72e986f6e7dde365bf.png (added)
-
tags/1.4.6/vendor/freemius/wordpress-sdk/assets/js/pricing/d65812c447b4523b42d59018e1c0bb53.png (added)
-
tags/1.4.6/vendor/freemius/wordpress-sdk/assets/js/pricing/f3aac72a8e63997d6bb888f816457e9b.png (added)
-
tags/1.4.6/vendor/freemius/wordpress-sdk/assets/js/pricing/fde48e4609a6ddc11d639fc2421f2afd.png (added)
-
tags/1.4.6/vendor/freemius/wordpress-sdk/assets/js/pricing/freemius-pricing.js (added)
-
tags/1.4.6/vendor/freemius/wordpress-sdk/assets/js/pricing/freemius-pricing.js.LICENSE.txt (added)
-
tags/1.4.6/vendor/freemius/wordpress-sdk/composer.json (added)
-
tags/1.4.6/vendor/freemius/wordpress-sdk/config.php (added)
-
tags/1.4.6/vendor/freemius/wordpress-sdk/includes (added)
-
tags/1.4.6/vendor/freemius/wordpress-sdk/includes/class-freemius-abstract.php (added)
-
tags/1.4.6/vendor/freemius/wordpress-sdk/includes/class-freemius.php (added)
-
tags/1.4.6/vendor/freemius/wordpress-sdk/includes/class-fs-admin-notices.php (added)
-
tags/1.4.6/vendor/freemius/wordpress-sdk/includes/class-fs-api.php (added)
-
tags/1.4.6/vendor/freemius/wordpress-sdk/includes/class-fs-garbage-collector.php (added)
-
tags/1.4.6/vendor/freemius/wordpress-sdk/includes/class-fs-hook-snapshot.php (added)
-
tags/1.4.6/vendor/freemius/wordpress-sdk/includes/class-fs-lock.php (added)
-
tags/1.4.6/vendor/freemius/wordpress-sdk/includes/class-fs-logger.php (added)
-
tags/1.4.6/vendor/freemius/wordpress-sdk/includes/class-fs-options.php (added)
-
tags/1.4.6/vendor/freemius/wordpress-sdk/includes/class-fs-plugin-updater.php (added)
-
tags/1.4.6/vendor/freemius/wordpress-sdk/includes/class-fs-security.php (added)
-
tags/1.4.6/vendor/freemius/wordpress-sdk/includes/class-fs-storage.php (added)
-
tags/1.4.6/vendor/freemius/wordpress-sdk/includes/class-fs-user-lock.php (added)
-
tags/1.4.6/vendor/freemius/wordpress-sdk/includes/customizer (added)
-
tags/1.4.6/vendor/freemius/wordpress-sdk/includes/customizer/class-fs-customizer-support-section.php (added)
-
tags/1.4.6/vendor/freemius/wordpress-sdk/includes/customizer/class-fs-customizer-upsell-control.php (added)
-
tags/1.4.6/vendor/freemius/wordpress-sdk/includes/customizer/index.php (added)
-
tags/1.4.6/vendor/freemius/wordpress-sdk/includes/debug (added)
-
tags/1.4.6/vendor/freemius/wordpress-sdk/includes/debug/class-fs-debug-bar-panel.php (added)
-
tags/1.4.6/vendor/freemius/wordpress-sdk/includes/debug/debug-bar-start.php (added)
-
tags/1.4.6/vendor/freemius/wordpress-sdk/includes/debug/index.php (added)
-
tags/1.4.6/vendor/freemius/wordpress-sdk/includes/entities (added)
-
tags/1.4.6/vendor/freemius/wordpress-sdk/includes/entities/class-fs-affiliate-terms.php (added)
-
tags/1.4.6/vendor/freemius/wordpress-sdk/includes/entities/class-fs-affiliate.php (added)
-
tags/1.4.6/vendor/freemius/wordpress-sdk/includes/entities/class-fs-billing.php (added)
-
tags/1.4.6/vendor/freemius/wordpress-sdk/includes/entities/class-fs-entity.php (added)
-
tags/1.4.6/vendor/freemius/wordpress-sdk/includes/entities/class-fs-payment.php (added)
-
tags/1.4.6/vendor/freemius/wordpress-sdk/includes/entities/class-fs-plugin-info.php (added)
-
tags/1.4.6/vendor/freemius/wordpress-sdk/includes/entities/class-fs-plugin-license.php (added)
-
tags/1.4.6/vendor/freemius/wordpress-sdk/includes/entities/class-fs-plugin-plan.php (added)
-
tags/1.4.6/vendor/freemius/wordpress-sdk/includes/entities/class-fs-plugin-tag.php (added)
-
tags/1.4.6/vendor/freemius/wordpress-sdk/includes/entities/class-fs-plugin.php (added)
-
tags/1.4.6/vendor/freemius/wordpress-sdk/includes/entities/class-fs-pricing.php (added)
-
tags/1.4.6/vendor/freemius/wordpress-sdk/includes/entities/class-fs-scope-entity.php (added)
-
tags/1.4.6/vendor/freemius/wordpress-sdk/includes/entities/class-fs-site.php (added)
-
tags/1.4.6/vendor/freemius/wordpress-sdk/includes/entities/class-fs-subscription.php (added)
-
tags/1.4.6/vendor/freemius/wordpress-sdk/includes/entities/class-fs-user.php (added)
-
tags/1.4.6/vendor/freemius/wordpress-sdk/includes/entities/index.php (added)
-
tags/1.4.6/vendor/freemius/wordpress-sdk/includes/fs-core-functions.php (added)
-
tags/1.4.6/vendor/freemius/wordpress-sdk/includes/fs-essential-functions.php (added)
-
tags/1.4.6/vendor/freemius/wordpress-sdk/includes/fs-html-escaping-functions.php (added)
-
tags/1.4.6/vendor/freemius/wordpress-sdk/includes/fs-plugin-info-dialog.php (added)
-
tags/1.4.6/vendor/freemius/wordpress-sdk/includes/index.php (added)
-
tags/1.4.6/vendor/freemius/wordpress-sdk/includes/l10n.php (added)
-
tags/1.4.6/vendor/freemius/wordpress-sdk/includes/managers (added)
-
tags/1.4.6/vendor/freemius/wordpress-sdk/includes/managers/class-fs-admin-menu-manager.php (added)
-
tags/1.4.6/vendor/freemius/wordpress-sdk/includes/managers/class-fs-admin-notice-manager.php (added)
-
tags/1.4.6/vendor/freemius/wordpress-sdk/includes/managers/class-fs-cache-manager.php (added)
-
tags/1.4.6/vendor/freemius/wordpress-sdk/includes/managers/class-fs-checkout-manager.php (added)
-
tags/1.4.6/vendor/freemius/wordpress-sdk/includes/managers/class-fs-clone-manager.php (added)
-
tags/1.4.6/vendor/freemius/wordpress-sdk/includes/managers/class-fs-contact-form-manager.php (added)
-
tags/1.4.6/vendor/freemius/wordpress-sdk/includes/managers/class-fs-debug-manager.php (added)
-
tags/1.4.6/vendor/freemius/wordpress-sdk/includes/managers/class-fs-gdpr-manager.php (added)
-
tags/1.4.6/vendor/freemius/wordpress-sdk/includes/managers/class-fs-key-value-storage.php (added)
-
tags/1.4.6/vendor/freemius/wordpress-sdk/includes/managers/class-fs-license-manager.php (added)
-
tags/1.4.6/vendor/freemius/wordpress-sdk/includes/managers/class-fs-option-manager.php (added)
-
tags/1.4.6/vendor/freemius/wordpress-sdk/includes/managers/class-fs-permission-manager.php (added)
-
tags/1.4.6/vendor/freemius/wordpress-sdk/includes/managers/class-fs-plan-manager.php (added)
-
tags/1.4.6/vendor/freemius/wordpress-sdk/includes/managers/class-fs-plugin-manager.php (added)
-
tags/1.4.6/vendor/freemius/wordpress-sdk/includes/managers/index.php (added)
-
tags/1.4.6/vendor/freemius/wordpress-sdk/includes/sdk (added)
-
tags/1.4.6/vendor/freemius/wordpress-sdk/includes/sdk/Exceptions (added)
-
tags/1.4.6/vendor/freemius/wordpress-sdk/includes/sdk/Exceptions/ArgumentNotExistException.php (added)
-
tags/1.4.6/vendor/freemius/wordpress-sdk/includes/sdk/Exceptions/EmptyArgumentException.php (added)
-
tags/1.4.6/vendor/freemius/wordpress-sdk/includes/sdk/Exceptions/Exception.php (added)
-
tags/1.4.6/vendor/freemius/wordpress-sdk/includes/sdk/Exceptions/InvalidArgumentException.php (added)
-
tags/1.4.6/vendor/freemius/wordpress-sdk/includes/sdk/Exceptions/OAuthException.php (added)
-
tags/1.4.6/vendor/freemius/wordpress-sdk/includes/sdk/Exceptions/index.php (added)
-
tags/1.4.6/vendor/freemius/wordpress-sdk/includes/sdk/FreemiusBase.php (added)
-
tags/1.4.6/vendor/freemius/wordpress-sdk/includes/sdk/FreemiusWordPress.php (added)
-
tags/1.4.6/vendor/freemius/wordpress-sdk/includes/sdk/LICENSE.txt (added)
-
tags/1.4.6/vendor/freemius/wordpress-sdk/includes/sdk/index.php (added)
-
tags/1.4.6/vendor/freemius/wordpress-sdk/includes/supplements (added)
-
tags/1.4.6/vendor/freemius/wordpress-sdk/includes/supplements/fs-essential-functions-1.1.7.1.php (added)
-
tags/1.4.6/vendor/freemius/wordpress-sdk/includes/supplements/fs-essential-functions-2.2.1.php (added)
-
tags/1.4.6/vendor/freemius/wordpress-sdk/includes/supplements/fs-migration-2.5.1.php (added)
-
tags/1.4.6/vendor/freemius/wordpress-sdk/includes/supplements/index.php (added)
-
tags/1.4.6/vendor/freemius/wordpress-sdk/index.php (added)
-
tags/1.4.6/vendor/freemius/wordpress-sdk/languages (added)
-
tags/1.4.6/vendor/freemius/wordpress-sdk/languages/freemius-cs_CZ.mo (added)
-
tags/1.4.6/vendor/freemius/wordpress-sdk/languages/freemius-da_DK.mo (added)
-
tags/1.4.6/vendor/freemius/wordpress-sdk/languages/freemius-de_DE.mo (added)
-
tags/1.4.6/vendor/freemius/wordpress-sdk/languages/freemius-es_ES.mo (added)
-
tags/1.4.6/vendor/freemius/wordpress-sdk/languages/freemius-fr_FR.mo (added)
-
tags/1.4.6/vendor/freemius/wordpress-sdk/languages/freemius-he_IL.mo (added)
-
tags/1.4.6/vendor/freemius/wordpress-sdk/languages/freemius-hu_HU.mo (added)
-
tags/1.4.6/vendor/freemius/wordpress-sdk/languages/freemius-it_IT.mo (added)
-
tags/1.4.6/vendor/freemius/wordpress-sdk/languages/freemius-ja.mo (added)
-
tags/1.4.6/vendor/freemius/wordpress-sdk/languages/freemius-nl_NL.mo (added)
-
tags/1.4.6/vendor/freemius/wordpress-sdk/languages/freemius-ru_RU.mo (added)
-
tags/1.4.6/vendor/freemius/wordpress-sdk/languages/freemius-ta.mo (added)
-
tags/1.4.6/vendor/freemius/wordpress-sdk/languages/freemius-zh_CN.mo (added)
-
tags/1.4.6/vendor/freemius/wordpress-sdk/languages/freemius.pot (added)
-
tags/1.4.6/vendor/freemius/wordpress-sdk/languages/index.php (added)
-
tags/1.4.6/vendor/freemius/wordpress-sdk/require.php (added)
-
tags/1.4.6/vendor/freemius/wordpress-sdk/start.php (added)
-
tags/1.4.6/vendor/freemius/wordpress-sdk/templates (added)
-
tags/1.4.6/vendor/freemius/wordpress-sdk/templates/account (added)
-
tags/1.4.6/vendor/freemius/wordpress-sdk/templates/account.php (added)
-
tags/1.4.6/vendor/freemius/wordpress-sdk/templates/account/billing.php (added)
-
tags/1.4.6/vendor/freemius/wordpress-sdk/templates/account/index.php (added)
-
tags/1.4.6/vendor/freemius/wordpress-sdk/templates/account/partials (added)
-
tags/1.4.6/vendor/freemius/wordpress-sdk/templates/account/partials/activate-license-button.php (added)
-
tags/1.4.6/vendor/freemius/wordpress-sdk/templates/account/partials/addon.php (added)
-
tags/1.4.6/vendor/freemius/wordpress-sdk/templates/account/partials/deactivate-license-button.php (added)
-
tags/1.4.6/vendor/freemius/wordpress-sdk/templates/account/partials/disconnect-button.php (added)
-
tags/1.4.6/vendor/freemius/wordpress-sdk/templates/account/partials/index.php (added)
-
tags/1.4.6/vendor/freemius/wordpress-sdk/templates/account/partials/site.php (added)
-
tags/1.4.6/vendor/freemius/wordpress-sdk/templates/account/payments.php (added)
-
tags/1.4.6/vendor/freemius/wordpress-sdk/templates/add-ons.php (added)
-
tags/1.4.6/vendor/freemius/wordpress-sdk/templates/add-trial-to-pricing.php (added)
-
tags/1.4.6/vendor/freemius/wordpress-sdk/templates/admin-notice.php (added)
-
tags/1.4.6/vendor/freemius/wordpress-sdk/templates/ajax-loader.php (added)
-
tags/1.4.6/vendor/freemius/wordpress-sdk/templates/api-connectivity-message-js.php (added)
-
tags/1.4.6/vendor/freemius/wordpress-sdk/templates/auto-installation.php (added)
-
tags/1.4.6/vendor/freemius/wordpress-sdk/templates/checkout (added)
-
tags/1.4.6/vendor/freemius/wordpress-sdk/templates/checkout.php (added)
-
tags/1.4.6/vendor/freemius/wordpress-sdk/templates/checkout/frame.php (added)
-
tags/1.4.6/vendor/freemius/wordpress-sdk/templates/checkout/process-redirect.php (added)
-
tags/1.4.6/vendor/freemius/wordpress-sdk/templates/checkout/redirect.php (added)
-
tags/1.4.6/vendor/freemius/wordpress-sdk/templates/clone-resolution-js.php (added)
-
tags/1.4.6/vendor/freemius/wordpress-sdk/templates/connect (added)
-
tags/1.4.6/vendor/freemius/wordpress-sdk/templates/connect.php (added)
-
tags/1.4.6/vendor/freemius/wordpress-sdk/templates/connect/index.php (added)
-
tags/1.4.6/vendor/freemius/wordpress-sdk/templates/connect/permission.php (added)
-
tags/1.4.6/vendor/freemius/wordpress-sdk/templates/connect/permissions-group.php (added)
-
tags/1.4.6/vendor/freemius/wordpress-sdk/templates/contact.php (added)
-
tags/1.4.6/vendor/freemius/wordpress-sdk/templates/debug (added)
-
tags/1.4.6/vendor/freemius/wordpress-sdk/templates/debug.php (added)
-
tags/1.4.6/vendor/freemius/wordpress-sdk/templates/debug/api-calls.php (added)
-
tags/1.4.6/vendor/freemius/wordpress-sdk/templates/debug/index.php (added)
-
tags/1.4.6/vendor/freemius/wordpress-sdk/templates/debug/logger.php (added)
-
tags/1.4.6/vendor/freemius/wordpress-sdk/templates/debug/plugins-themes-sync.php (added)
-
tags/1.4.6/vendor/freemius/wordpress-sdk/templates/debug/scheduled-crons.php (added)
-
tags/1.4.6/vendor/freemius/wordpress-sdk/templates/email.php (added)
-
tags/1.4.6/vendor/freemius/wordpress-sdk/templates/forms (added)
-
tags/1.4.6/vendor/freemius/wordpress-sdk/templates/forms/affiliation.php (added)
-
tags/1.4.6/vendor/freemius/wordpress-sdk/templates/forms/data-debug-mode.php (added)
-
tags/1.4.6/vendor/freemius/wordpress-sdk/templates/forms/deactivation (added)
-
tags/1.4.6/vendor/freemius/wordpress-sdk/templates/forms/deactivation/contact.php (added)
-
tags/1.4.6/vendor/freemius/wordpress-sdk/templates/forms/deactivation/form.php (added)
-
tags/1.4.6/vendor/freemius/wordpress-sdk/templates/forms/deactivation/index.php (added)
-
tags/1.4.6/vendor/freemius/wordpress-sdk/templates/forms/deactivation/retry-skip.php (added)
-
tags/1.4.6/vendor/freemius/wordpress-sdk/templates/forms/email-address-update.php (added)
-
tags/1.4.6/vendor/freemius/wordpress-sdk/templates/forms/index.php (added)
-
tags/1.4.6/vendor/freemius/wordpress-sdk/templates/forms/license-activation.php (added)
-
tags/1.4.6/vendor/freemius/wordpress-sdk/templates/forms/optout.php (added)
-
tags/1.4.6/vendor/freemius/wordpress-sdk/templates/forms/premium-versions-upgrade-handler.php (added)
-
tags/1.4.6/vendor/freemius/wordpress-sdk/templates/forms/premium-versions-upgrade-metadata.php (added)
-
tags/1.4.6/vendor/freemius/wordpress-sdk/templates/forms/resend-key.php (added)
-
tags/1.4.6/vendor/freemius/wordpress-sdk/templates/forms/subscription-cancellation.php (added)
-
tags/1.4.6/vendor/freemius/wordpress-sdk/templates/forms/trial-start.php (added)
-
tags/1.4.6/vendor/freemius/wordpress-sdk/templates/forms/user-change.php (added)
-
tags/1.4.6/vendor/freemius/wordpress-sdk/templates/gdpr-optin-js.php (added)
-
tags/1.4.6/vendor/freemius/wordpress-sdk/templates/index.php (added)
-
tags/1.4.6/vendor/freemius/wordpress-sdk/templates/js (added)
-
tags/1.4.6/vendor/freemius/wordpress-sdk/templates/js/index.php (added)
-
tags/1.4.6/vendor/freemius/wordpress-sdk/templates/js/jquery.content-change.php (added)
-
tags/1.4.6/vendor/freemius/wordpress-sdk/templates/js/open-license-activation.php (added)
-
tags/1.4.6/vendor/freemius/wordpress-sdk/templates/js/permissions.php (added)
-
tags/1.4.6/vendor/freemius/wordpress-sdk/templates/js/style-premium-theme.php (added)
-
tags/1.4.6/vendor/freemius/wordpress-sdk/templates/partials (added)
-
tags/1.4.6/vendor/freemius/wordpress-sdk/templates/partials/index.php (added)
-
tags/1.4.6/vendor/freemius/wordpress-sdk/templates/partials/network-activation.php (added)
-
tags/1.4.6/vendor/freemius/wordpress-sdk/templates/plugin-icon.php (added)
-
tags/1.4.6/vendor/freemius/wordpress-sdk/templates/plugin-info (added)
-
tags/1.4.6/vendor/freemius/wordpress-sdk/templates/plugin-info/description.php (added)
-
tags/1.4.6/vendor/freemius/wordpress-sdk/templates/plugin-info/features.php (added)
-
tags/1.4.6/vendor/freemius/wordpress-sdk/templates/plugin-info/index.php (added)
-
tags/1.4.6/vendor/freemius/wordpress-sdk/templates/plugin-info/screenshots.php (added)
-
tags/1.4.6/vendor/freemius/wordpress-sdk/templates/pricing.php (added)
-
tags/1.4.6/vendor/freemius/wordpress-sdk/templates/secure-https-header.php (added)
-
tags/1.4.6/vendor/freemius/wordpress-sdk/templates/sticky-admin-notice-js.php (added)
-
tags/1.4.6/vendor/freemius/wordpress-sdk/templates/tabs-capture-js.php (added)
-
tags/1.4.6/vendor/freemius/wordpress-sdk/templates/tabs.php (added)
-
trunk/REFERENCE_DOCS/added-features (added)
-
trunk/REFERENCE_DOCS/plugin (added)
-
trunk/REFERENCE_DOCS/server (added)
-
trunk/composer.json (modified) (1 diff)
-
trunk/easy-critical-css.php (modified) (1 diff)
-
trunk/inc/class-admin-settings.php (modified) (12 diffs)
-
trunk/inc/class-api-service.php (modified) (4 diffs)
-
trunk/inc/class-database.php (modified) (13 diffs)
-
trunk/inc/class-helpers.php (modified) (7 diffs)
-
trunk/inc/class-notification.php (modified) (4 diffs)
-
trunk/inc/class-plugin.php (modified) (1 diff)
-
trunk/inc/class-reset-handler.php (modified) (1 diff)
-
trunk/inc/class-rest-api.php (modified) (11 diffs)
-
trunk/inc/class-settings.php (modified) (1 diff)
-
trunk/inc/class-timed-option.php (modified) (1 diff)
-
trunk/inc/class-uninstall-handler.php (modified) (1 diff)
-
trunk/inc/compatibility (added)
-
trunk/inc/compatibility/class-compatibility-add-to-any.php (added)
-
trunk/inc/compatibility/class-compatibility-cache.php (added)
-
trunk/inc/compatibility/class-compatibility-cloudflare.php (added)
-
trunk/inc/compatibility/class-compatibility-ewww.php (added)
-
trunk/inc/compatibility/class-compatibility-jetpack-boost.php (added)
-
trunk/inc/compatibility/class-compatibility-perfmatters.php (added)
-
trunk/inc/compatibility/class-compatibility-trellis.php (added)
-
trunk/inc/compatibility/class-compatibility-woocommerce.php (added)
-
trunk/inc/compatibility/class-compatibility-wp-rocket.php (added)
-
trunk/inc/compatibility/class-compatibility.php (added)
-
trunk/inc/load-freemius.php (modified) (1 diff)
-
trunk/readme.txt (modified) (3 diffs)
-
trunk/vendor/composer/autoload_classmap.php (modified) (2 diffs)
-
trunk/vendor/composer/autoload_static.php (modified) (2 diffs)
-
trunk/vendor/composer/installed.php (modified) (2 diffs)
Legend:
- Unmodified
- Added
- Removed
-
easy-critical-css/trunk/composer.json
r3395875 r3439148 20 20 "autoload": { 21 21 "classmap": [ 22 "inc/" 22 "inc/", 23 "inc/compatibility/" 23 24 ] 24 25 }, -
easy-critical-css/trunk/easy-critical-css.php
r3429798 r3439148 2 2 /** 3 3 * Plugin Name: Easy Critical CSS 4 * Description: Easily inject Critical CSS and Secondary CSS (with unused styles removed) to improve site speed and performance.5 * Version: 1.4. 54 * Description: Easily inject Critical CSS and Secondary CSS (with unused CSS styles removed) to improve site speed and performance. 5 * Version: 1.4.6 6 6 * Requires at least: 6.2 7 7 * Tested up to: 6.8 -
easy-critical-css/trunk/inc/class-admin-settings.php
r3402049 r3439148 222 222 $status = Helpers::get_auto_mode_status(); 223 223 $all_ok = $status['all_ok']; 224 224 225 225 $status_color = $all_ok ? '#1e7e34' : '#b12331'; 226 226 $status_icon = $all_ok ? '✓' : '✗'; … … 327 327 $getting_started_link = sprintf( 328 328 '<p style="margin:1.5em 0;"><a href="%s" target="_blank" rel="noopener noreferrer">%s</a></p>', 329 'https://criticalcss.net/docs/ ',329 'https://criticalcss.net/docs/?utm_source=easy-critical-css-plugin&utm_medium=admin-documentation&utm_campaign=v' . Plugin::get_plugin_version(), 330 330 esc_html__( 'Need help getting started? View the Easy Critical CSS guides.', 'easy-critical-css' ) 331 331 ); … … 334 334 // translators: %s is a link to the API site. 335 335 __( 'Auto mode sends page data to an external API at %s and requires an API key.', 'easy-critical-css' ), 336 '<a href="https://criticalcss.net/ " target="_blank" rel="noopener noreferrer">CriticalCSS.net</a>'336 '<a href="https://criticalcss.net/?utm_source=easy-critical-css-plugin&utm_medium=admin-main&utm_campaign=v' . Plugin::get_plugin_version() . '" target="_blank" rel="noopener noreferrer">CriticalCSS.net</a>' 337 337 ); 338 338 … … 353 353 esc_html__( 'Add your API key', 'easy-critical-css' ) 354 354 ); 355 356 355 357 356 // Free/manual path. 358 357 $critical_css_mode_warn .= sprintf( 359 '<p>%1$s <a href="https://criticalcss.net/#free-generator " target="_blank" rel="noopener noreferrer">%2$s</a> %3$s</p>',358 '<p>%1$s <a href="https://criticalcss.net/#free-generator?utm_source=easy-critical-css-plugin&utm_medium=free-generator&utm_campaign=v' . Plugin::get_plugin_version() . '" target="_blank" rel="noopener noreferrer">%2$s</a> %3$s</p>', 360 359 esc_html__( 'Staying in free Manual mode? You can generate CSS manually at', 'easy-critical-css' ), 361 360 'CriticalCSS.net', … … 368 367 369 368 public static function get_exclude_css_strings() { 370 $label_auto = __( 'Exclude CSS Files from Critical CSS', 'easy-critical-css' );369 $label_auto = __( 'Exclude CSS Files from Critical CSS', 'easy-critical-css' ); 371 370 $label_manual = __( 'Always Loaded CSS Files', 'easy-critical-css' ); 372 371 373 $desc_auto = __( 'Enter the CSS file URLs or partial matches that should be excluded from Critical CSS generation.', 'easy-critical-css' );372 $desc_auto = __( 'Enter the CSS file URLs or partial matches that should be excluded from Critical CSS generation.', 'easy-critical-css' ); 374 373 $desc_manual = __( 'Enter the CSS file URLs or partial matches that should always be loaded (not inlined) when using Manual mode.', 'easy-critical-css' ); 375 374 … … 382 381 383 382 return [ 384 'label_auto' => $label_auto,383 'label_auto' => $label_auto, 385 384 'label_manual' => $label_manual, 386 'desc_auto' => $desc_auto . $common,387 'desc_manual' => $desc_manual . $common,385 'desc_auto' => $desc_auto . $common, 386 'desc_manual' => $desc_manual . $common, 388 387 ]; 389 388 } … … 422 421 ], 423 422 'auto_mode_status' => [ 424 'label' => '',425 'type' => 'status-indicator',426 'value_type' => 'string',427 'desc' => '',428 'basic' => true,429 'hidden' => true, // Don't register as a real setting423 'label' => '', 424 'type' => 'status-indicator', 425 'value_type' => 'string', 426 'desc' => '', 427 'basic' => true, 428 'hidden' => true, // Don't register as a real setting 430 429 ], 431 430 'secondary_css_behavior' => [ … … 484 483 'value_type' => 'boolean', 485 484 'options' => [ 486 'label' => __( 'Ignore stylesheets from external domains when generating Critical CSS.', 'easy-critical-css' ),485 'label' => __( 'Ignore stylesheets loaded from external domains when generating Critical CSS.', 'easy-critical-css' ), 487 486 ], 488 'desc' => __( 'By default, external stylesheets (hosted on other domains) are ignored when generating Critical CSS. This avoids potential issues with dynamically loaded styles. Uncheck this box if you want to allow stylesheets from external domains (e.g., CDN-hosted styles) to be included in Critical CSSgeneration.', 'easy-critical-css' ),487 'desc' => __( 'By default, external stylesheets (hosted on other domains) are ignored during Critical CSS generation. This prevents third-party and CDN-hosted styles from being inlined into Critical CSS. Uncheck this option only if you explicitly need stylesheets from external domains to be included during generation.', 'easy-critical-css' ), 489 488 'default_value' => 1, 490 489 'default_label' => __( 'Checked', 'easy-critical-css' ), 491 'warning' => __( 'Warning: Unchecking this may cause issues with ad scripts or dynamically loaded styles.', 'easy-critical-css' ),490 'warning' => __( 'Warning: Unchecking this can break ad layouts, third-party scripts, or styles that load dynamically. Unchecking this setting is strongly discouraged on monetized sites unless you fully understand the impact.', 'easy-critical-css' ), 492 491 493 492 ], … … 542 541 'type' => 'text', 543 542 'value_type' => 'string', 544 'desc' => __( 'Cloudflare account email for API access. If the CLOUDFLARE_EMAIL constant is defined, this field is disabled and the value is hidden for privacy.', 'easy-critical-css' ) . '<br><strong><a href="https://criticalcss.net/docs/cloudflare-setup/ " target="_blank" rel="noopener noreferrer">' . __( 'View Cloudflare Setup Guide', 'easy-critical-css' ) . '</a></strong>',543 'desc' => __( 'Cloudflare account email for API access. If the CLOUDFLARE_EMAIL constant is defined, this field is disabled and the value is hidden for privacy.', 'easy-critical-css' ) . '<br><strong><a href="https://criticalcss.net/docs/cloudflare-setup/?utm_source=easy-critical-css-plugin&utm_medium=admin-setup-guide&utm_campaign=v' . Plugin::get_plugin_version() . '" target="_blank" rel="noopener noreferrer">' . __( 'View Cloudflare Setup Guide', 'easy-critical-css' ) . '</a></strong>', 545 544 ], 546 545 'cloudflare_api_key' => [ … … 692 691 $settings = self::get_settings_schema(); 693 692 foreach ( $settings as $key => $setting ) { 694 $is_basic = isset( $setting['basic'] ) && $setting['basic'];693 $is_basic = isset( $setting['basic'] ) && $setting['basic']; 695 694 $is_hidden = isset( $setting['hidden'] ) && $setting['hidden']; 696 $section = $is_basic ? 'easy-critical-css-basic-section' : 'easy-critical-css-advanced-section';695 $section = $is_basic ? 'easy-critical-css-basic-section' : 'easy-critical-css-advanced-section'; 697 696 698 697 add_settings_field( … … 772 771 'easyCriticalCss', 773 772 [ 774 'restUrl' => esc_url_raw( rest_url( 'easy-critical-css/v1/' ) ),775 'nonce' => wp_create_nonce( 'wp_rest' ),776 'excludeLabelAuto' => $exclude_strings['label_auto'],773 'restUrl' => esc_url_raw( rest_url( 'easy-critical-css/v1/' ) ), 774 'nonce' => wp_create_nonce( 'wp_rest' ), 775 'excludeLabelAuto' => $exclude_strings['label_auto'], 777 776 'excludeLabelManual' => $exclude_strings['label_manual'], 778 'excludeDescAuto' => $exclude_strings['desc_auto'],779 'excludeDescManual' => $exclude_strings['desc_manual'],777 'excludeDescAuto' => $exclude_strings['desc_auto'], 778 'excludeDescManual' => $exclude_strings['desc_manual'], 780 779 ] 781 );780 ); 782 781 783 782 wp_enqueue_style( … … 805 804 806 805 // Clear cached transients related to site environment checks. 807 Timed Option::delete_all();806 Timed_Option::delete_all(); 808 807 } 809 808 } -
easy-critical-css/trunk/inc/class-api-service.php
r3429798 r3439148 17 17 public static function test_receive_endpoint() { 18 18 // Check transient for cached result. 19 $cached = Timed Option::get( 'is_rest_api_reachable' );19 $cached = Timed_Option::get( 'is_rest_api_reachable' ); 20 20 if ( $cached !== false ) { 21 21 return (bool) $cached; … … 26 26 27 27 // Store the nonce in a transient for verification (5 minute expiry for the test). 28 Timed Option::set( 'receive_test_nonce', $nonce, 5 * MINUTE_IN_SECONDS );28 Timed_Option::set( 'receive_test_nonce', $nonce, 5 * MINUTE_IN_SECONDS ); 29 29 30 30 $api_url = self::get_api_url(); 31 $body = [31 $body = [ 32 32 'siteUrl' => esc_url_raw( home_url() ), 33 33 'nonce' => $nonce, … … 44 44 45 45 if ( is_wp_error( $response ) ) { 46 Timed Option::set( 'is_rest_api_reachable', '0', 6 * HOUR_IN_SECONDS );46 Timed_Option::set( 'is_rest_api_reachable', '0', 6 * HOUR_IN_SECONDS ); 47 47 48 48 return false; … … 55 55 56 56 // Cache the result for 6 hours. 57 Timed Option::set( 'is_rest_api_reachable', $success ? '1' : '0', 6 * HOUR_IN_SECONDS );57 Timed_Option::set( 'is_rest_api_reachable', $success ? '1' : '0', 6 * HOUR_IN_SECONDS ); 58 58 59 59 return $success; -
easy-critical-css/trunk/inc/class-database.php
r3429798 r3439148 147 147 Debug::ecc_log( 148 148 [ 149 'step' => 'db_pick_by_hash',150 'post_id' => $post_id,151 'pick_id' => $by_hash['id'],152 'url_hash' => $expected_hash,153 'reason' => 'matched_permalink_hash'149 'step' => 'db_pick_by_hash', 150 'post_id' => $post_id, 151 'pick_id' => $by_hash['id'], 152 'url_hash' => $expected_hash, 153 'reason' => 'matched_permalink_hash', 154 154 ] 155 155 ); … … 177 177 Debug::ecc_log( 178 178 [ 179 'step' => 'db_pick_best_row',180 'post_id' => $post_id,181 'pick_id' => $row['id'],182 'url_hash' => isset( $row['url_hash'] ) ? $row['url_hash'] : null,183 'status' => isset( $row['processing_status'] ) ? $row['processing_status'] : null,179 'step' => 'db_pick_best_row', 180 'post_id' => $post_id, 181 'pick_id' => $row['id'], 182 'url_hash' => isset( $row['url_hash'] ) ? $row['url_hash'] : null, 183 'status' => isset( $row['processing_status'] ) ? $row['processing_status'] : null, 184 184 'generated_time' => isset( $row['generated_time'] ) ? $row['generated_time'] : null, 185 185 ] … … 229 229 } elseif ( ! empty( $sanitized_data['page_url'] ) ) { 230 230 $where['page_url'] = $sanitized_data['page_url']; 231 $existing_row = self::get_row_by_url( $sanitized_data['page_url'] );231 $existing_row = self::get_row_by_url( $sanitized_data['page_url'] ); 232 232 } 233 233 … … 373 373 374 374 if ( empty( $post_id ) ) { 375 return [ 'action' => 'none', 'reason' => 'missing_post_id' ]; 375 return [ 376 'action' => 'none', 377 'reason' => 'missing_post_id', 378 ]; 376 379 } 377 380 … … 383 386 384 387 if ( ! is_array( $rows ) || count( $rows ) <= 1 ) { 385 return [ 'action' => 'none', 'reason' => 'no_duplicates', 'rows' => $rows ]; 388 return [ 389 'action' => 'none', 390 'reason' => 'no_duplicates', 391 'rows' => $rows, 392 ]; 386 393 } 387 394 … … 412 419 // 3) Fallback: choose best by processing_status, generated_time, id. 413 420 if ( empty( $canonical ) ) { 414 $best = null;421 $best = null; 415 422 $priority = [ 'completed', 'pending', 'unprocessed', 'failed', 'expired' ]; 416 423 foreach ( $rows as $r ) { … … 453 460 454 461 if ( empty( $canonical ) ) { 455 return [ 'action' => 'error', 'reason' => 'could_not_pick_canonical' ]; 462 return [ 463 'action' => 'error', 464 'reason' => 'could_not_pick_canonical', 465 ]; 456 466 } 457 467 … … 509 519 510 520 // processing_status: prefer higher priority status. 511 $priority = [ 'completed' => 5, 'pending' => 4, 'unprocessed' => 3, 'failed' => 2, 'expired' => 1 ]; 512 $cur_pr = isset( $merged['processing_status'] ) ? $merged['processing_status'] : 'unprocessed'; 513 $oth_pr = isset( $r['processing_status'] ) ? $r['processing_status'] : 'unprocessed'; 521 $priority = [ 522 'completed' => 5, 523 'pending' => 4, 524 'unprocessed' => 3, 525 'failed' => 2, 526 'expired' => 1, 527 ]; 528 $cur_pr = isset( $merged['processing_status'] ) ? $merged['processing_status'] : 'unprocessed'; 529 $oth_pr = isset( $r['processing_status'] ) ? $r['processing_status'] : 'unprocessed'; 514 530 if ( isset( $priority[ $oth_pr ] ) && isset( $priority[ $cur_pr ] ) && $priority[ $oth_pr ] > $priority[ $cur_pr ] ) { 515 531 $merged['processing_status'] = $oth_pr; … … 518 534 519 535 // Prepare sanitized data for DB write. 520 $write_data = [];536 $write_data = []; 521 537 $allowed_cols = [ 'page_url', 'url_hash', 'post_id', 'requested_time', 'generated_time', 'critical_css', 'remaining_css', 'secondary_css', 'size_savings', 'handshake', 'processing_status', 'settings', 'last_error' ]; 522 538 foreach ( $allowed_cols as $c ) { … … 527 543 528 544 // Dry-run: return plan with what we'd do. 529 $duplicate_ids = array_map( function ( $r ) use ( $canonical_id ) { 530 return (int) $r['id']; 531 }, array_filter( $rows, function ( $r ) use ( $canonical_id ) { 532 return (int) $r['id'] !== $canonical_id; 533 } ) ); 545 $duplicate_ids = array_map( 546 function ( $r ) use ( $canonical_id ) { 547 return (int) $r['id']; 548 }, 549 array_filter( 550 $rows, 551 function ( $r ) use ( $canonical_id ) { 552 return (int) $r['id'] !== $canonical_id; 553 } 554 ) 555 ); 534 556 535 557 $plan = [ 536 'action' => $dry_run ? 'dry_run' : 'apply',537 'post_id' => (int) $post_id,538 'canonical_id' => $canonical_id,539 'canonical_hash' => $canonical_hash,540 'merged' => $write_data,541 'delete_ids' => $duplicate_ids,542 'rows' => $rows,558 'action' => $dry_run ? 'dry_run' : 'apply', 559 'post_id' => (int) $post_id, 560 'canonical_id' => $canonical_id, 561 'canonical_hash' => $canonical_hash, 562 'merged' => $write_data, 563 'delete_ids' => $duplicate_ids, 564 'rows' => $rows, 543 565 ]; 544 566 … … 556 578 if ( $updated === false ) { 557 579 $wpdb->query( 'ROLLBACK' ); 558 return [ 'action' => 'error', 'reason' => 'update_failed' ]; 580 return [ 581 'action' => 'error', 582 'reason' => 'update_failed', 583 ]; 559 584 } 560 585 … … 564 589 if ( $del_ok === false ) { 565 590 $wpdb->query( 'ROLLBACK' ); 566 return [ 'action' => 'error', 'reason' => 'delete_failed', 'id' => $del_id ]; 591 return [ 592 'action' => 'error', 593 'reason' => 'delete_failed', 594 'id' => $del_id, 595 ]; 567 596 } 568 597 } … … 576 605 Critical_CSS::clear_cache( $post_id ); 577 606 578 return [ 'action' => 'applied', 'plan' => $plan ]; 607 return [ 608 'action' => 'applied', 609 'plan' => $plan, 610 ]; 579 611 } 580 612 } -
easy-critical-css/trunk/inc/class-helpers.php
r3429798 r3439148 186 186 public static function is_local_site( $host, $debug = false ) { 187 187 // Check transient. 188 $cached = Timed Option::get( 'is_local_site' );188 $cached = Timed_Option::get( 'is_local_site' ); 189 189 if ( ! $debug && $cached !== false ) { 190 190 return (bool) $cached; … … 237 237 // We need to store both true and false values as a transient, but only if no debug. 238 238 if ( ! $debug ) { 239 Timed Option::set( 'is_local_site', $is_local ? '1' : '0', 6 * HOUR_IN_SECONDS );239 Timed_Option::set( 'is_local_site', $is_local ? '1' : '0', 6 * HOUR_IN_SECONDS ); 240 240 } else { 241 241 // Give more info if debug. … … 250 250 public static function get_auto_mode_status( $force_refresh = false ) { 251 251 // Check transient. 252 $cached = Timed Option::get( 'auto_mode_status' );252 $cached = Timed_Option::get( 'auto_mode_status' ); 253 253 if ( ! $force_refresh && $cached !== false ) { 254 254 return $cached; … … 264 264 // Only run full status check if there's an active API key. 265 265 if ( empty( easy_cc_fs()->has_active_valid_license() ) ) { 266 Timed Option::set( 'auto_mode_status', $status, 6 * HOUR_IN_SECONDS );266 Timed_Option::set( 'auto_mode_status', $status, 6 * HOUR_IN_SECONDS ); 267 267 268 268 return $status; 269 269 } 270 270 271 $status['active_key'] = true;271 $status['active_key'] = true; 272 272 $status['rest_api_ok'] = API_Service::test_receive_endpoint(); 273 273 … … 275 275 $status['all_ok'] = $status['active_key'] && $status['local_ok'] && $status['rest_api_ok']; 276 276 277 Timed Option::set( 'auto_mode_status', $status, 6 * HOUR_IN_SECONDS );277 Timed_Option::set( 'auto_mode_status', $status, 6 * HOUR_IN_SECONDS ); 278 278 279 279 return $status; … … 282 282 public static function is_rest_api_reachable( $debug = false ) { 283 283 // Check transient. 284 $cached = Timed Option::get( 'is_rest_api_reachable' );284 $cached = Timed_Option::get( 'is_rest_api_reachable' ); 285 285 if ( ! $debug && $cached !== false ) { 286 286 return (bool) $cached; … … 292 292 // We need to store both true and false values as a transient, but only if no debug. 293 293 if ( ! $debug ) { 294 Timed Option::set( 'is_rest_api_reachable', $is_reachable ? '1' : '0', 6 * HOUR_IN_SECONDS );294 Timed_Option::set( 'is_rest_api_reachable', $is_reachable ? '1' : '0', 6 * HOUR_IN_SECONDS ); 295 295 } else { 296 296 // Give more info if debug. -
easy-critical-css/trunk/inc/class-notification.php
r3429798 r3439148 21 21 22 22 // Has the notification been dismissed? 23 $notif_dismissed = Timed Option::get( 'auto_mode_setup_notif' );23 $notif_dismissed = Timed_Option::get( 'auto_mode_setup_notif' ); 24 24 if ( $notif_dismissed !== false ) { 25 25 return false; … … 64 64 return; 65 65 } 66 66 67 67 if ( ! self::should_show_notice() ) { 68 68 return; … … 77 77 ); 78 78 79 wp_localize_script( 'easy-critical-css-admin', 'eccSubscriptionNotice', [ 80 'restUrl' => esc_url_raw( rest_url( 'easy-critical-css/v1/' ) ), 81 'nonce' => wp_create_nonce( 'wp_rest' ), 82 'plugin' => [ 83 'name' => 'Easy Critical CSS', 84 'version' => Plugin::get_plugin_version(), 85 ], 86 ] ); 79 wp_localize_script( 80 'easy-critical-css-admin', 81 'eccSubscriptionNotice', 82 [ 83 'restUrl' => esc_url_raw( rest_url( 'easy-critical-css/v1/' ) ), 84 'nonce' => wp_create_nonce( 'wp_rest' ), 85 'plugin' => [ 86 'name' => 'Easy Critical CSS', 87 'version' => Plugin::get_plugin_version(), 88 ], 89 ] 90 ); 87 91 } 88 92 … … 93 97 94 98 $settings_url = admin_url( 'options-general.php?page=easy-critical-css-settings' ); 95 $docs_url = 'https://criticalcss.net/docs ';99 $docs_url = 'https://criticalcss.net/docs?utm_source=easy-critical-css-plugin&utm_medium=notification&utm_campaign=v' . Plugin::get_plugin_version(); 96 100 $plugin_name = 'Easy Critical CSS'; 97 101 $plugin_ver = Plugin::get_plugin_version(); -
easy-critical-css/trunk/inc/class-plugin.php
r3429798 r3439148 10 10 private static $instance = null; 11 11 12 private static $plugin_version = '1.4. 5';12 private static $plugin_version = '1.4.6'; 13 13 14 14 private static $db_version = '2'; -
easy-critical-css/trunk/inc/class-reset-handler.php
r3402049 r3439148 55 55 56 56 // Remove transients. 57 Timed Option::delete_all();57 Timed_Option::delete_all(); 58 58 59 59 // Remove old transients. -
easy-critical-css/trunk/inc/class-rest-api.php
r3429798 r3439148 216 216 'permission_callback' => function () { 217 217 return current_user_can( 'manage_options' ); 218 } 218 }, 219 219 ] 220 220 ); … … 571 571 572 572 if ( empty( $resolved_post_id ) ) { 573 Debug::ecc_log( [ 'step' => 'receive_dedupe_skipped', 'reason' => 'no_post_id', 'hash' => $params['hash'] ] ); 573 Debug::ecc_log( 574 [ 575 'step' => 'receive_dedupe_skipped', 576 'reason' => 'no_post_id', 577 'hash' => $params['hash'], 578 ] 579 ); 574 580 } else { 575 581 global $wpdb; … … 580 586 if ( (int) $count > 1 ) { 581 587 $dedupe_result = Database::dedupe_post_rows( $resolved_post_id, $handshake, false ); 582 Debug::ecc_log( [ 'step' => 'receive_dedupe_apply', 'result' => $dedupe_result ] ); 588 Debug::ecc_log( 589 [ 590 'step' => 'receive_dedupe_apply', 591 'result' => $dedupe_result, 592 ] 593 ); 583 594 } else { 584 Debug::ecc_log( [ 'step' => 'receive_dedupe_skipped', 'reason' => 'no_duplicates', 'post_id' => $resolved_post_id ] ); 595 Debug::ecc_log( 596 [ 597 'step' => 'receive_dedupe_skipped', 598 'reason' => 'no_duplicates', 599 'post_id' => $resolved_post_id, 600 ] 601 ); 585 602 } 586 603 } … … 588 605 // Mark REST API reachability as successful so we don't trigger repeated 589 606 // remote tests immediately after receiving CSS. Cache for 6 hours. 590 Timed Option::set( 'is_rest_api_reachable', '1', 6 * HOUR_IN_SECONDS );607 Timed_Option::set( 'is_rest_api_reachable', '1', 6 * HOUR_IN_SECONDS ); 591 608 592 609 /** … … 675 692 ] 676 693 ); 694 } 695 696 /** 697 * Extracts and validates a nonce from request headers or params. 698 * 699 * @param WP_REST_Request $request 700 * 701 * @return boolean|WP_Error True if valid, WP_Error if invalid or missing. 702 */ 703 private static function validate_nonce( WP_REST_Request $request ) { 704 $nonce = $request->get_header( 'X-WP-Nonce' ); 705 if ( empty( $nonce ) ) { 706 $nonce = $request->get_param( '_wpnonce' ); 707 } 708 709 if ( ! $nonce || ! wp_verify_nonce( $nonce, 'wp_rest' ) ) { 710 return new WP_Error( 711 'invalid_nonce', 712 __( 'Invalid security token.', 'easy-critical-css' ), 713 [ 'status' => 403 ] 714 ); 715 } 716 717 return true; 677 718 } 678 719 … … 837 878 } 838 879 839 $stored_nonce = Timed Option::get( 'receive_test_nonce' );880 $stored_nonce = Timed_Option::get( 'receive_test_nonce' ); 840 881 if ( ! $stored_nonce || $stored_nonce !== $nonce ) { 841 882 return new WP_Error( … … 847 888 848 889 // Success, clean it up. 849 Timed Option::delete( 'receive_test_nonce' );890 Timed_Option::delete( 'receive_test_nonce' ); 850 891 851 892 return rest_ensure_response( [ 'success' => true ] ); … … 853 894 854 895 public static function refresh_auto_mode_status( WP_REST_Request $request ) { 855 $nonce = $request->get_header( 'X-WP-Nonce' ) ?: $request->get_param( '_wpnonce' ); 856 if ( ! $nonce || ! wp_verify_nonce( $nonce, 'wp_rest' ) ) { 857 return new WP_Error( 858 'invalid_nonce', 859 __( 'Invalid security token.', 'easy-critical-css' ), 860 [ 'status' => 403 ] 861 ); 896 $nonce = self::validate_nonce( $request ); 897 if ( is_wp_error( $nonce ) ) { 898 return $nonce; 862 899 } 863 900 … … 878 915 879 916 public static function dismiss_notification( WP_REST_Request $request ) { 880 $nonce = $request->get_header( 'X-WP-Nonce' ) ?: $request->get_param( '_wpnonce' ); 881 if ( ! $nonce || ! wp_verify_nonce( $nonce, 'wp_rest' ) ) { 882 return new WP_Error( 883 'invalid_nonce', 884 __( 'Invalid security token.', 'easy-critical-css' ), 885 [ 'status' => 403 ] 886 ); 917 $nonce = self::validate_nonce( $request ); 918 if ( is_wp_error( $nonce ) ) { 919 return $nonce; 887 920 } 888 921 889 922 // Dismiss for a year to avoid nagging. 890 Timed Option::set( 'auto_mode_setup_notif', time(), YEAR_IN_SECONDS );923 Timed_Option::set( 'auto_mode_setup_notif', time(), YEAR_IN_SECONDS ); 891 924 892 925 return rest_ensure_response( [ 'success' => true ] ); … … 894 927 895 928 public static function activate_auto_generation( WP_REST_Request $request ) { 896 $nonce = $request->get_header( 'X-WP-Nonce' ) ?: $request->get_param( '_wpnonce' ); 897 if ( ! $nonce || ! wp_verify_nonce( $nonce, 'wp_rest' ) ) { 898 return new WP_Error( 899 'invalid_nonce', 900 __( 'Invalid security token.', 'easy-critical-css' ), 901 [ 'status' => 403 ] 902 ); 929 $nonce = self::validate_nonce( $request ); 930 if ( is_wp_error( $nonce ) ) { 931 return $nonce; 903 932 } 904 933 … … 906 935 907 936 // Dismiss notification for a day to avoid immediate nagging. 908 Timed Option::set( 'auto_mode_setup_notif', time(), DAY_IN_SECONDS );937 Timed_Option::set( 'auto_mode_setup_notif', time(), DAY_IN_SECONDS ); 909 938 910 939 return rest_ensure_response( [ 'success' => true ] ); -
easy-critical-css/trunk/inc/class-settings.php
r3401089 r3439148 48 48 // If Perfmatters conflicting CSS settings are active, Critical is paused 49 49 if ( Compatibility_Perfmatters::has_conflicting_css_settings() ) { 50 return false; 51 } 52 53 // If Jetpack Boost is installed, Critical is paused 54 if ( Compatibility_Jetpack_Boost::is_jetpack_boost_installed() ) { 50 55 return false; 51 56 } -
easy-critical-css/trunk/inc/class-timed-option.php
r3429798 r3439148 7 7 } 8 8 9 class Timed Option {9 class Timed_Option { 10 10 const TIMED_OPTION_PREFIX = 'easy_cc_timed_'; 11 11 -
easy-critical-css/trunk/inc/class-uninstall-handler.php
r3429798 r3439148 26 26 global $wpdb; 27 27 $table_name = $wpdb->prefix . 'easy_critical_css'; 28 $wpdb->query( "DROP TABLE IF EXISTS ". esc_sql( $table_name ) ); // phpcs:ignore WordPress.DB.DirectDatabaseQuery -- Dropping plugin table during uninstall requires direct database query.28 $wpdb->query( 'DROP TABLE IF EXISTS ' . esc_sql( $table_name ) ); // phpcs:ignore WordPress.DB.DirectDatabaseQuery -- Dropping plugin table during uninstall requires direct database query. 29 29 30 30 // Delete any static files. -
easy-critical-css/trunk/inc/load-freemius.php
r3402049 r3439148 58 58 59 59 // Clear auto_mode_status cache when license changes. 60 easy_cc_fs()->add_action( 'after_license_change', [ __NAMESPACE__ . '\Timed Option', 'delete_all' ] );61 easy_cc_fs()->add_action( 'after_license_activation', [ __NAMESPACE__ . '\Timed Option', 'delete_all' ] );62 easy_cc_fs()->add_action( 'after_license_deactivation', [ __NAMESPACE__ . '\Timed Option', 'delete_all' ] );60 easy_cc_fs()->add_action( 'after_license_change', [ __NAMESPACE__ . '\Timed_Option', 'delete_all' ] ); 61 easy_cc_fs()->add_action( 'after_license_activation', [ __NAMESPACE__ . '\Timed_Option', 'delete_all' ] ); 62 easy_cc_fs()->add_action( 'after_license_deactivation', [ __NAMESPACE__ . '\Timed_Option', 'delete_all' ] ); 63 63 64 64 // Signal that SDK was initiated. -
easy-critical-css/trunk/readme.txt
r3429798 r3439148 6 6 Tested up to: 6.9 7 7 Requires PHP: 7.4 8 Stable tag: 1.4. 58 Stable tag: 1.4.6 9 9 License: GPLv2 or later 10 10 License URI: https://www.gnu.org/licenses/gpl-2.0.html 11 11 12 Easily inject Critical CSS and Secondary CSS (with unused styles removed) to improve site speed and performance.12 Easily inject Critical CSS and Secondary CSS (with unused CSS styles removed) to improve site speed and performance. 13 13 14 14 == Description == … … 102 102 == Changelog == 103 103 104 = 1.4.6 = 105 - OPTIMIZATION: Improve performance of compatibility functionality 106 - COMPATIBILITY: Adds Jetpack Boost compatibility 107 - COMPATIBILITY: Adds AddToAny compatibility 108 104 109 = 1.4.5 = 105 110 - OPTIMIZATION: Adds dismissible notification prompting users with active licenses to activate auto-generation … … 191 196 == Upgrade Notice == 192 197 198 = 1.4.6 = 199 * This update provides compatibility improvements. 200 193 201 = 1.4.5 = 194 202 * This update includes bug fixes and improves code quality. -
easy-critical-css/trunk/vendor/composer/autoload_classmap.php
r3429798 r3439148 11 11 'EasyCriticalCSS\\API_Service' => $baseDir . '/inc/class-api-service.php', 12 12 'EasyCriticalCSS\\Admin_Settings' => $baseDir . '/inc/class-admin-settings.php', 13 'EasyCriticalCSS\\Compatibility_Cache' => $baseDir . '/inc/class-compatibility-cache.php', 14 'EasyCriticalCSS\\Compatibility_Cloudflare' => $baseDir . '/inc/class-compatibility-cloudflare.php', 15 'EasyCriticalCSS\\Compatibility_EWWW' => $baseDir . '/inc/class-compatibility-ewww.php', 16 'EasyCriticalCSS\\Compatibility_Perfmatters' => $baseDir . '/inc/class-compatibility-perfmatters.php', 17 'EasyCriticalCSS\\Compatibility_Trellis' => $baseDir . '/inc/class-compatibility-trellis.php', 18 'EasyCriticalCSS\\Compatibility_WP_Rocket' => $baseDir . '/inc/class-compatibility-wp-rocket.php', 19 'EasyCriticalCSS\\Compatibility_WooCommerce' => $baseDir . '/inc/class-compatibility-woocommerce.php', 13 'EasyCriticalCSS\\Compatibility' => $baseDir . '/inc/compatibility/class-compatibility.php', 14 'EasyCriticalCSS\\Compatibility_Add_To_Any' => $baseDir . '/inc/compatibility/class-compatibility-add-to-any.php', 15 'EasyCriticalCSS\\Compatibility_Cache' => $baseDir . '/inc/compatibility/class-compatibility-cache.php', 16 'EasyCriticalCSS\\Compatibility_Cloudflare' => $baseDir . '/inc/compatibility/class-compatibility-cloudflare.php', 17 'EasyCriticalCSS\\Compatibility_EWWW' => $baseDir . '/inc/compatibility/class-compatibility-ewww.php', 18 'EasyCriticalCSS\\Compatibility_Jetpack_Boost' => $baseDir . '/inc/compatibility/class-compatibility-jetpack-boost.php', 19 'EasyCriticalCSS\\Compatibility_Perfmatters' => $baseDir . '/inc/compatibility/class-compatibility-perfmatters.php', 20 'EasyCriticalCSS\\Compatibility_Trellis' => $baseDir . '/inc/compatibility/class-compatibility-trellis.php', 21 'EasyCriticalCSS\\Compatibility_WP_Rocket' => $baseDir . '/inc/compatibility/class-compatibility-wp-rocket.php', 22 'EasyCriticalCSS\\Compatibility_WooCommerce' => $baseDir . '/inc/compatibility/class-compatibility-woocommerce.php', 20 23 'EasyCriticalCSS\\Critical_CSS' => $baseDir . '/inc/class-critical-css.php', 21 24 'EasyCriticalCSS\\Critical_CSS_Injector' => $baseDir . '/inc/class-critical-css-injector.php', … … 34 37 'EasyCriticalCSS\\Reset_Handler' => $baseDir . '/inc/class-reset-handler.php', 35 38 'EasyCriticalCSS\\Settings' => $baseDir . '/inc/class-settings.php', 36 'EasyCriticalCSS\\Timed Option' => $baseDir . '/inc/class-timed-option.php',39 'EasyCriticalCSS\\Timed_Option' => $baseDir . '/inc/class-timed-option.php', 37 40 'EasyCriticalCSS\\Uninstall_Handler' => $baseDir . '/inc/class-uninstall-handler.php', 38 41 ); -
easy-critical-css/trunk/vendor/composer/autoload_static.php
r3429798 r3439148 16 16 'EasyCriticalCSS\\API_Service' => __DIR__ . '/../..' . '/inc/class-api-service.php', 17 17 'EasyCriticalCSS\\Admin_Settings' => __DIR__ . '/../..' . '/inc/class-admin-settings.php', 18 'EasyCriticalCSS\\Compatibility_Cache' => __DIR__ . '/../..' . '/inc/class-compatibility-cache.php', 19 'EasyCriticalCSS\\Compatibility_Cloudflare' => __DIR__ . '/../..' . '/inc/class-compatibility-cloudflare.php', 20 'EasyCriticalCSS\\Compatibility_EWWW' => __DIR__ . '/../..' . '/inc/class-compatibility-ewww.php', 21 'EasyCriticalCSS\\Compatibility_Perfmatters' => __DIR__ . '/../..' . '/inc/class-compatibility-perfmatters.php', 22 'EasyCriticalCSS\\Compatibility_Trellis' => __DIR__ . '/../..' . '/inc/class-compatibility-trellis.php', 23 'EasyCriticalCSS\\Compatibility_WP_Rocket' => __DIR__ . '/../..' . '/inc/class-compatibility-wp-rocket.php', 24 'EasyCriticalCSS\\Compatibility_WooCommerce' => __DIR__ . '/../..' . '/inc/class-compatibility-woocommerce.php', 18 'EasyCriticalCSS\\Compatibility' => __DIR__ . '/../..' . '/inc/compatibility/class-compatibility.php', 19 'EasyCriticalCSS\\Compatibility_Add_To_Any' => __DIR__ . '/../..' . '/inc/compatibility/class-compatibility-add-to-any.php', 20 'EasyCriticalCSS\\Compatibility_Cache' => __DIR__ . '/../..' . '/inc/compatibility/class-compatibility-cache.php', 21 'EasyCriticalCSS\\Compatibility_Cloudflare' => __DIR__ . '/../..' . '/inc/compatibility/class-compatibility-cloudflare.php', 22 'EasyCriticalCSS\\Compatibility_EWWW' => __DIR__ . '/../..' . '/inc/compatibility/class-compatibility-ewww.php', 23 'EasyCriticalCSS\\Compatibility_Jetpack_Boost' => __DIR__ . '/../..' . '/inc/compatibility/class-compatibility-jetpack-boost.php', 24 'EasyCriticalCSS\\Compatibility_Perfmatters' => __DIR__ . '/../..' . '/inc/compatibility/class-compatibility-perfmatters.php', 25 'EasyCriticalCSS\\Compatibility_Trellis' => __DIR__ . '/../..' . '/inc/compatibility/class-compatibility-trellis.php', 26 'EasyCriticalCSS\\Compatibility_WP_Rocket' => __DIR__ . '/../..' . '/inc/compatibility/class-compatibility-wp-rocket.php', 27 'EasyCriticalCSS\\Compatibility_WooCommerce' => __DIR__ . '/../..' . '/inc/compatibility/class-compatibility-woocommerce.php', 25 28 'EasyCriticalCSS\\Critical_CSS' => __DIR__ . '/../..' . '/inc/class-critical-css.php', 26 29 'EasyCriticalCSS\\Critical_CSS_Injector' => __DIR__ . '/../..' . '/inc/class-critical-css-injector.php', … … 39 42 'EasyCriticalCSS\\Reset_Handler' => __DIR__ . '/../..' . '/inc/class-reset-handler.php', 40 43 'EasyCriticalCSS\\Settings' => __DIR__ . '/../..' . '/inc/class-settings.php', 41 'EasyCriticalCSS\\Timed Option' => __DIR__ . '/../..' . '/inc/class-timed-option.php',44 'EasyCriticalCSS\\Timed_Option' => __DIR__ . '/../..' . '/inc/class-timed-option.php', 42 45 'EasyCriticalCSS\\Uninstall_Handler' => __DIR__ . '/../..' . '/inc/class-uninstall-handler.php', 43 46 ); -
easy-critical-css/trunk/vendor/composer/installed.php
r3429798 r3439148 4 4 'pretty_version' => 'dev-main', 5 5 'version' => 'dev-main', 6 'reference' => ' c8ce21f4f3bcf284c9a6b55f62219e608f3888e9',6 'reference' => '3b2bb5029610be84e005e35a02f50051e6763adc', 7 7 'type' => 'wordpress-plugin', 8 8 'install_path' => __DIR__ . '/../../', … … 23 23 'pretty_version' => 'dev-main', 24 24 'version' => 'dev-main', 25 'reference' => ' c8ce21f4f3bcf284c9a6b55f62219e608f3888e9',25 'reference' => '3b2bb5029610be84e005e35a02f50051e6763adc', 26 26 'type' => 'wordpress-plugin', 27 27 'install_path' => __DIR__ . '/../../',
Note: See TracChangeset
for help on using the changeset viewer.