Changeset 3726224
- Timestamp:
- 10/03/2026 12:04:00 PM (3 weeks ago)
- Location:
- misticease
- Files:
-
- 295 added
- 11 edited
-
tags/1.3.3 (added)
-
tags/1.3.3/LICENSE.txt (added)
-
tags/1.3.3/changelog-misticease.txt (added)
-
tags/1.3.3/inc (added)
-
tags/1.3.3/inc/app (added)
-
tags/1.3.3/inc/app/css (added)
-
tags/1.3.3/inc/app/css/index.php (added)
-
tags/1.3.3/inc/app/css/misticease-admin.css (added)
-
tags/1.3.3/inc/app/css/misticease.css (added)
-
tags/1.3.3/inc/app/img (added)
-
tags/1.3.3/inc/app/img/01_Image.jpg (added)
-
tags/1.3.3/inc/app/img/02_Image.jpg (added)
-
tags/1.3.3/inc/app/img/03_Image.jpg (added)
-
tags/1.3.3/inc/app/img/04_Image.jpg (added)
-
tags/1.3.3/inc/app/img/close.png (added)
-
tags/1.3.3/inc/app/img/drag-handle.png (added)
-
tags/1.3.3/inc/app/img/icon.png (added)
-
tags/1.3.3/inc/app/img/index.php (added)
-
tags/1.3.3/inc/app/img/pin.png (added)
-
tags/1.3.3/inc/app/img/play.png (added)
-
tags/1.3.3/inc/app/img/vimeo-placeholder.jpg (added)
-
tags/1.3.3/inc/app/index.php (added)
-
tags/1.3.3/inc/app/js (added)
-
tags/1.3.3/inc/app/js/index.php (added)
-
tags/1.3.3/inc/app/js/misticease-hd-thumb-prefetch.js (added)
-
tags/1.3.3/inc/app/js/misticease-sml-parser.js (added)
-
tags/1.3.3/inc/app/js/misticease-window-manager.js (added)
-
tags/1.3.3/inc/app/js/misticease.js (added)
-
tags/1.3.3/inc/app/misticease-admin.php (added)
-
tags/1.3.3/inc/app/misticease-cache.php (added)
-
tags/1.3.3/inc/app/misticease-frontend.php (added)
-
tags/1.3.3/inc/app/misticease-network.php (added)
-
tags/1.3.3/inc/app/misticease-options.php (added)
-
tags/1.3.3/inc/app/misticease-render.php (added)
-
tags/1.3.3/inc/app/misticease-thumbnails.php (added)
-
tags/1.3.3/inc/app/ug (added)
-
tags/1.3.3/inc/app/ug/index.php (added)
-
tags/1.3.3/inc/app/ug/misticease-ug-tab.css (added)
-
tags/1.3.3/inc/app/ug/misticease-ug-tab.php (added)
-
tags/1.3.3/inc/bootstrap.php (added)
-
tags/1.3.3/inc/index.php (added)
-
tags/1.3.3/inc/setup (added)
-
tags/1.3.3/inc/setup/index.php (added)
-
tags/1.3.3/inc/setup/misticease_setup.php (added)
-
tags/1.3.3/index.php (added)
-
tags/1.3.3/languages (added)
-
tags/1.3.3/languages/index.php (added)
-
tags/1.3.3/languages/misticease-de_DE.mo (added)
-
tags/1.3.3/languages/misticease-de_DE.po (added)
-
tags/1.3.3/languages/misticease-de_DE_formal.mo (added)
-
tags/1.3.3/languages/misticease-de_DE_formal.po (added)
-
tags/1.3.3/languages/misticease-es_ES.mo (added)
-
tags/1.3.3/languages/misticease-es_ES.po (added)
-
tags/1.3.3/languages/misticease-fr_FR.mo (added)
-
tags/1.3.3/languages/misticease-fr_FR.po (added)
-
tags/1.3.3/languages/misticease-it_IT.mo (added)
-
tags/1.3.3/languages/misticease-it_IT.po (added)
-
tags/1.3.3/languages/misticease-ja.mo (added)
-
tags/1.3.3/languages/misticease-ja.po (added)
-
tags/1.3.3/languages/misticease-nl_NL.mo (added)
-
tags/1.3.3/languages/misticease-nl_NL.po (added)
-
tags/1.3.3/languages/misticease-pt_BR.mo (added)
-
tags/1.3.3/languages/misticease-pt_BR.po (added)
-
tags/1.3.3/languages/misticease-pt_PT.mo (added)
-
tags/1.3.3/languages/misticease-pt_PT.po (added)
-
tags/1.3.3/languages/misticease.pot (added)
-
tags/1.3.3/misticease.php (added)
-
tags/1.3.3/readme.txt (added)
-
tags/1.3.3/uninstall.php (added)
-
tags/1.3.3/vendor (added)
-
tags/1.3.3/vendor/freemius (added)
-
tags/1.3.3/vendor/freemius/LICENSE.txt (added)
-
tags/1.3.3/vendor/freemius/README.md (added)
-
tags/1.3.3/vendor/freemius/assets (added)
-
tags/1.3.3/vendor/freemius/assets/css (added)
-
tags/1.3.3/vendor/freemius/assets/css/admin (added)
-
tags/1.3.3/vendor/freemius/assets/css/admin/account.css (added)
-
tags/1.3.3/vendor/freemius/assets/css/admin/add-ons.css (added)
-
tags/1.3.3/vendor/freemius/assets/css/admin/affiliation.css (added)
-
tags/1.3.3/vendor/freemius/assets/css/admin/checkout.css (added)
-
tags/1.3.3/vendor/freemius/assets/css/admin/clone-resolution.css (added)
-
tags/1.3.3/vendor/freemius/assets/css/admin/common.css (added)
-
tags/1.3.3/vendor/freemius/assets/css/admin/connect.css (added)
-
tags/1.3.3/vendor/freemius/assets/css/admin/debug.css (added)
-
tags/1.3.3/vendor/freemius/assets/css/admin/dialog-boxes.css (added)
-
tags/1.3.3/vendor/freemius/assets/css/admin/gdpr-optin-notice.css (added)
-
tags/1.3.3/vendor/freemius/assets/css/admin/index.php (added)
-
tags/1.3.3/vendor/freemius/assets/css/admin/optout.css (added)
-
tags/1.3.3/vendor/freemius/assets/css/admin/plugins.css (added)
-
tags/1.3.3/vendor/freemius/assets/css/customizer.css (added)
-
tags/1.3.3/vendor/freemius/assets/css/index.php (added)
-
tags/1.3.3/vendor/freemius/assets/img (added)
-
tags/1.3.3/vendor/freemius/assets/img/index.php (added)
-
tags/1.3.3/vendor/freemius/assets/img/plugin-icon.png (added)
-
tags/1.3.3/vendor/freemius/assets/img/theme-icon.png (added)
-
tags/1.3.3/vendor/freemius/assets/index.php (added)
-
tags/1.3.3/vendor/freemius/assets/js (added)
-
tags/1.3.3/vendor/freemius/assets/js/index.php (added)
-
tags/1.3.3/vendor/freemius/assets/js/jquery.form.js (added)
-
tags/1.3.3/vendor/freemius/assets/js/nojquery.ba-postmessage.js (added)
-
tags/1.3.3/vendor/freemius/assets/js/postmessage.js (added)
-
tags/1.3.3/vendor/freemius/assets/js/pricing (added)
-
tags/1.3.3/vendor/freemius/assets/js/pricing/14fb1bd5b7c41648488b06147f50a0dc.svg (added)
-
tags/1.3.3/vendor/freemius/assets/js/pricing/178afa6030e76635dbe835e111d2c507.png (added)
-
tags/1.3.3/vendor/freemius/assets/js/pricing/27b5a722a5553d9de0170325267fccec.png (added)
-
tags/1.3.3/vendor/freemius/assets/js/pricing/4375c4a3ddc6f637c2ab9a2d7220f91e.png (added)
-
tags/1.3.3/vendor/freemius/assets/js/pricing/45da596e2b512ffc3bb638baaf0fdc4e.png (added)
-
tags/1.3.3/vendor/freemius/assets/js/pricing/a34e046aee1702a5690679750a7f4d0f.svg (added)
-
tags/1.3.3/vendor/freemius/assets/js/pricing/b09d0b38b627c2fa564d050f79f2f064.svg (added)
-
tags/1.3.3/vendor/freemius/assets/js/pricing/c03f665db27af43971565560adfba594.png (added)
-
tags/1.3.3/vendor/freemius/assets/js/pricing/cb5fc4f6ec7ada72e986f6e7dde365bf.png (added)
-
tags/1.3.3/vendor/freemius/assets/js/pricing/d65812c447b4523b42d59018e1c0bb53.png (added)
-
tags/1.3.3/vendor/freemius/assets/js/pricing/f3aac72a8e63997d6bb888f816457e9b.png (added)
-
tags/1.3.3/vendor/freemius/assets/js/pricing/fde48e4609a6ddc11d639fc2421f2afd.png (added)
-
tags/1.3.3/vendor/freemius/assets/js/pricing/freemius-pricing.js (added)
-
tags/1.3.3/vendor/freemius/assets/js/pricing/freemius-pricing.js.LICENSE.txt (added)
-
tags/1.3.3/vendor/freemius/composer.json (added)
-
tags/1.3.3/vendor/freemius/config.php (added)
-
tags/1.3.3/vendor/freemius/includes (added)
-
tags/1.3.3/vendor/freemius/includes/class-freemius-abstract.php (added)
-
tags/1.3.3/vendor/freemius/includes/class-freemius.php (added)
-
tags/1.3.3/vendor/freemius/includes/class-fs-admin-notices.php (added)
-
tags/1.3.3/vendor/freemius/includes/class-fs-api.php (added)
-
tags/1.3.3/vendor/freemius/includes/class-fs-garbage-collector.php (added)
-
tags/1.3.3/vendor/freemius/includes/class-fs-hook-snapshot.php (added)
-
tags/1.3.3/vendor/freemius/includes/class-fs-lock.php (added)
-
tags/1.3.3/vendor/freemius/includes/class-fs-logger.php (added)
-
tags/1.3.3/vendor/freemius/includes/class-fs-options.php (added)
-
tags/1.3.3/vendor/freemius/includes/class-fs-plugin-updater.php (added)
-
tags/1.3.3/vendor/freemius/includes/class-fs-security.php (added)
-
tags/1.3.3/vendor/freemius/includes/class-fs-storage.php (added)
-
tags/1.3.3/vendor/freemius/includes/class-fs-user-lock.php (added)
-
tags/1.3.3/vendor/freemius/includes/customizer (added)
-
tags/1.3.3/vendor/freemius/includes/customizer/class-fs-customizer-support-section.php (added)
-
tags/1.3.3/vendor/freemius/includes/customizer/class-fs-customizer-upsell-control.php (added)
-
tags/1.3.3/vendor/freemius/includes/customizer/index.php (added)
-
tags/1.3.3/vendor/freemius/includes/debug (added)
-
tags/1.3.3/vendor/freemius/includes/debug/class-fs-debug-bar-panel.php (added)
-
tags/1.3.3/vendor/freemius/includes/debug/debug-bar-start.php (added)
-
tags/1.3.3/vendor/freemius/includes/debug/index.php (added)
-
tags/1.3.3/vendor/freemius/includes/entities (added)
-
tags/1.3.3/vendor/freemius/includes/entities/class-fs-affiliate-terms.php (added)
-
tags/1.3.3/vendor/freemius/includes/entities/class-fs-affiliate.php (added)
-
tags/1.3.3/vendor/freemius/includes/entities/class-fs-billing.php (added)
-
tags/1.3.3/vendor/freemius/includes/entities/class-fs-entity.php (added)
-
tags/1.3.3/vendor/freemius/includes/entities/class-fs-payment.php (added)
-
tags/1.3.3/vendor/freemius/includes/entities/class-fs-plugin-info.php (added)
-
tags/1.3.3/vendor/freemius/includes/entities/class-fs-plugin-license.php (added)
-
tags/1.3.3/vendor/freemius/includes/entities/class-fs-plugin-plan.php (added)
-
tags/1.3.3/vendor/freemius/includes/entities/class-fs-plugin-tag.php (added)
-
tags/1.3.3/vendor/freemius/includes/entities/class-fs-plugin.php (added)
-
tags/1.3.3/vendor/freemius/includes/entities/class-fs-pricing.php (added)
-
tags/1.3.3/vendor/freemius/includes/entities/class-fs-scope-entity.php (added)
-
tags/1.3.3/vendor/freemius/includes/entities/class-fs-site.php (added)
-
tags/1.3.3/vendor/freemius/includes/entities/class-fs-subscription.php (added)
-
tags/1.3.3/vendor/freemius/includes/entities/class-fs-user.php (added)
-
tags/1.3.3/vendor/freemius/includes/entities/index.php (added)
-
tags/1.3.3/vendor/freemius/includes/fs-core-functions.php (added)
-
tags/1.3.3/vendor/freemius/includes/fs-essential-functions.php (added)
-
tags/1.3.3/vendor/freemius/includes/fs-html-escaping-functions.php (added)
-
tags/1.3.3/vendor/freemius/includes/fs-plugin-info-dialog.php (added)
-
tags/1.3.3/vendor/freemius/includes/index.php (added)
-
tags/1.3.3/vendor/freemius/includes/l10n.php (added)
-
tags/1.3.3/vendor/freemius/includes/managers (added)
-
tags/1.3.3/vendor/freemius/includes/managers/class-fs-admin-menu-manager.php (added)
-
tags/1.3.3/vendor/freemius/includes/managers/class-fs-admin-notice-manager.php (added)
-
tags/1.3.3/vendor/freemius/includes/managers/class-fs-cache-manager.php (added)
-
tags/1.3.3/vendor/freemius/includes/managers/class-fs-checkout-manager.php (added)
-
tags/1.3.3/vendor/freemius/includes/managers/class-fs-clone-manager.php (added)
-
tags/1.3.3/vendor/freemius/includes/managers/class-fs-contact-form-manager.php (added)
-
tags/1.3.3/vendor/freemius/includes/managers/class-fs-debug-manager.php (added)
-
tags/1.3.3/vendor/freemius/includes/managers/class-fs-gdpr-manager.php (added)
-
tags/1.3.3/vendor/freemius/includes/managers/class-fs-key-value-storage.php (added)
-
tags/1.3.3/vendor/freemius/includes/managers/class-fs-license-manager.php (added)
-
tags/1.3.3/vendor/freemius/includes/managers/class-fs-option-manager.php (added)
-
tags/1.3.3/vendor/freemius/includes/managers/class-fs-permission-manager.php (added)
-
tags/1.3.3/vendor/freemius/includes/managers/class-fs-plan-manager.php (added)
-
tags/1.3.3/vendor/freemius/includes/managers/class-fs-plugin-manager.php (added)
-
tags/1.3.3/vendor/freemius/includes/managers/index.php (added)
-
tags/1.3.3/vendor/freemius/includes/sdk (added)
-
tags/1.3.3/vendor/freemius/includes/sdk/Exceptions (added)
-
tags/1.3.3/vendor/freemius/includes/sdk/Exceptions/ArgumentNotExistException.php (added)
-
tags/1.3.3/vendor/freemius/includes/sdk/Exceptions/EmptyArgumentException.php (added)
-
tags/1.3.3/vendor/freemius/includes/sdk/Exceptions/Exception.php (added)
-
tags/1.3.3/vendor/freemius/includes/sdk/Exceptions/InvalidArgumentException.php (added)
-
tags/1.3.3/vendor/freemius/includes/sdk/Exceptions/OAuthException.php (added)
-
tags/1.3.3/vendor/freemius/includes/sdk/Exceptions/index.php (added)
-
tags/1.3.3/vendor/freemius/includes/sdk/FreemiusBase.php (added)
-
tags/1.3.3/vendor/freemius/includes/sdk/FreemiusWordPress.php (added)
-
tags/1.3.3/vendor/freemius/includes/sdk/LICENSE.txt (added)
-
tags/1.3.3/vendor/freemius/includes/sdk/index.php (added)
-
tags/1.3.3/vendor/freemius/includes/supplements (added)
-
tags/1.3.3/vendor/freemius/includes/supplements/fs-essential-functions-1.1.7.1.php (added)
-
tags/1.3.3/vendor/freemius/includes/supplements/fs-essential-functions-2.2.1.php (added)
-
tags/1.3.3/vendor/freemius/includes/supplements/fs-migration-2.5.1.php (added)
-
tags/1.3.3/vendor/freemius/includes/supplements/index.php (added)
-
tags/1.3.3/vendor/freemius/index.php (added)
-
tags/1.3.3/vendor/freemius/languages (added)
-
tags/1.3.3/vendor/freemius/languages/freemius-cs_CZ.mo (added)
-
tags/1.3.3/vendor/freemius/languages/freemius-da_DK.mo (added)
-
tags/1.3.3/vendor/freemius/languages/freemius-de_DE.mo (added)
-
tags/1.3.3/vendor/freemius/languages/freemius-es_ES.mo (added)
-
tags/1.3.3/vendor/freemius/languages/freemius-fr_FR.mo (added)
-
tags/1.3.3/vendor/freemius/languages/freemius-he_IL.mo (added)
-
tags/1.3.3/vendor/freemius/languages/freemius-hu_HU.mo (added)
-
tags/1.3.3/vendor/freemius/languages/freemius-it_IT.mo (added)
-
tags/1.3.3/vendor/freemius/languages/freemius-ja.mo (added)
-
tags/1.3.3/vendor/freemius/languages/freemius-nl_NL.mo (added)
-
tags/1.3.3/vendor/freemius/languages/freemius-ru_RU.mo (added)
-
tags/1.3.3/vendor/freemius/languages/freemius-ta.mo (added)
-
tags/1.3.3/vendor/freemius/languages/freemius-zh_CN.mo (added)
-
tags/1.3.3/vendor/freemius/languages/freemius.pot (added)
-
tags/1.3.3/vendor/freemius/languages/index.php (added)
-
tags/1.3.3/vendor/freemius/require.php (added)
-
tags/1.3.3/vendor/freemius/start.php (added)
-
tags/1.3.3/vendor/freemius/templates (added)
-
tags/1.3.3/vendor/freemius/templates/account (added)
-
tags/1.3.3/vendor/freemius/templates/account.php (added)
-
tags/1.3.3/vendor/freemius/templates/account/billing.php (added)
-
tags/1.3.3/vendor/freemius/templates/account/index.php (added)
-
tags/1.3.3/vendor/freemius/templates/account/partials (added)
-
tags/1.3.3/vendor/freemius/templates/account/partials/activate-license-button.php (added)
-
tags/1.3.3/vendor/freemius/templates/account/partials/addon.php (added)
-
tags/1.3.3/vendor/freemius/templates/account/partials/deactivate-license-button.php (added)
-
tags/1.3.3/vendor/freemius/templates/account/partials/disconnect-button.php (added)
-
tags/1.3.3/vendor/freemius/templates/account/partials/index.php (added)
-
tags/1.3.3/vendor/freemius/templates/account/partials/site.php (added)
-
tags/1.3.3/vendor/freemius/templates/account/payments.php (added)
-
tags/1.3.3/vendor/freemius/templates/add-ons.php (added)
-
tags/1.3.3/vendor/freemius/templates/add-trial-to-pricing.php (added)
-
tags/1.3.3/vendor/freemius/templates/admin-notice.php (added)
-
tags/1.3.3/vendor/freemius/templates/ajax-loader.php (added)
-
tags/1.3.3/vendor/freemius/templates/api-connectivity-message-js.php (added)
-
tags/1.3.3/vendor/freemius/templates/auto-installation.php (added)
-
tags/1.3.3/vendor/freemius/templates/checkout (added)
-
tags/1.3.3/vendor/freemius/templates/checkout.php (added)
-
tags/1.3.3/vendor/freemius/templates/checkout/frame.php (added)
-
tags/1.3.3/vendor/freemius/templates/checkout/process-redirect.php (added)
-
tags/1.3.3/vendor/freemius/templates/checkout/redirect.php (added)
-
tags/1.3.3/vendor/freemius/templates/clone-resolution-js.php (added)
-
tags/1.3.3/vendor/freemius/templates/connect (added)
-
tags/1.3.3/vendor/freemius/templates/connect.php (added)
-
tags/1.3.3/vendor/freemius/templates/connect/index.php (added)
-
tags/1.3.3/vendor/freemius/templates/connect/permission.php (added)
-
tags/1.3.3/vendor/freemius/templates/connect/permissions-group.php (added)
-
tags/1.3.3/vendor/freemius/templates/contact.php (added)
-
tags/1.3.3/vendor/freemius/templates/debug (added)
-
tags/1.3.3/vendor/freemius/templates/debug.php (added)
-
tags/1.3.3/vendor/freemius/templates/debug/api-calls.php (added)
-
tags/1.3.3/vendor/freemius/templates/debug/index.php (added)
-
tags/1.3.3/vendor/freemius/templates/debug/logger.php (added)
-
tags/1.3.3/vendor/freemius/templates/debug/plugins-themes-sync.php (added)
-
tags/1.3.3/vendor/freemius/templates/debug/scheduled-crons.php (added)
-
tags/1.3.3/vendor/freemius/templates/email.php (added)
-
tags/1.3.3/vendor/freemius/templates/forms (added)
-
tags/1.3.3/vendor/freemius/templates/forms/affiliation.php (added)
-
tags/1.3.3/vendor/freemius/templates/forms/data-debug-mode.php (added)
-
tags/1.3.3/vendor/freemius/templates/forms/deactivation (added)
-
tags/1.3.3/vendor/freemius/templates/forms/deactivation/contact.php (added)
-
tags/1.3.3/vendor/freemius/templates/forms/deactivation/form.php (added)
-
tags/1.3.3/vendor/freemius/templates/forms/deactivation/index.php (added)
-
tags/1.3.3/vendor/freemius/templates/forms/deactivation/retry-skip.php (added)
-
tags/1.3.3/vendor/freemius/templates/forms/email-address-update.php (added)
-
tags/1.3.3/vendor/freemius/templates/forms/index.php (added)
-
tags/1.3.3/vendor/freemius/templates/forms/license-activation.php (added)
-
tags/1.3.3/vendor/freemius/templates/forms/optout.php (added)
-
tags/1.3.3/vendor/freemius/templates/forms/premium-versions-upgrade-handler.php (added)
-
tags/1.3.3/vendor/freemius/templates/forms/premium-versions-upgrade-metadata.php (added)
-
tags/1.3.3/vendor/freemius/templates/forms/resend-key.php (added)
-
tags/1.3.3/vendor/freemius/templates/forms/subscription-cancellation.php (added)
-
tags/1.3.3/vendor/freemius/templates/forms/trial-start.php (added)
-
tags/1.3.3/vendor/freemius/templates/forms/user-change.php (added)
-
tags/1.3.3/vendor/freemius/templates/gdpr-optin-js.php (added)
-
tags/1.3.3/vendor/freemius/templates/index.php (added)
-
tags/1.3.3/vendor/freemius/templates/js (added)
-
tags/1.3.3/vendor/freemius/templates/js/index.php (added)
-
tags/1.3.3/vendor/freemius/templates/js/jquery.content-change.php (added)
-
tags/1.3.3/vendor/freemius/templates/js/open-license-activation.php (added)
-
tags/1.3.3/vendor/freemius/templates/js/permissions.php (added)
-
tags/1.3.3/vendor/freemius/templates/js/style-premium-theme.php (added)
-
tags/1.3.3/vendor/freemius/templates/partials (added)
-
tags/1.3.3/vendor/freemius/templates/partials/index.php (added)
-
tags/1.3.3/vendor/freemius/templates/partials/network-activation.php (added)
-
tags/1.3.3/vendor/freemius/templates/plugin-icon.php (added)
-
tags/1.3.3/vendor/freemius/templates/plugin-info (added)
-
tags/1.3.3/vendor/freemius/templates/plugin-info/description.php (added)
-
tags/1.3.3/vendor/freemius/templates/plugin-info/features.php (added)
-
tags/1.3.3/vendor/freemius/templates/plugin-info/index.php (added)
-
tags/1.3.3/vendor/freemius/templates/plugin-info/screenshots.php (added)
-
tags/1.3.3/vendor/freemius/templates/pricing.php (added)
-
tags/1.3.3/vendor/freemius/templates/secure-https-header.php (added)
-
tags/1.3.3/vendor/freemius/templates/sticky-admin-notice-js.php (added)
-
tags/1.3.3/vendor/freemius/templates/tabs-capture-js.php (added)
-
tags/1.3.3/vendor/freemius/templates/tabs.php (added)
-
tags/1.3.3/vendor/index.php (added)
-
trunk/changelog-misticease.txt (modified) (1 diff)
-
trunk/inc/app/css/misticease.css (modified) (2 diffs)
-
trunk/inc/app/js/misticease-sml-parser.js (modified) (8 diffs)
-
trunk/inc/app/js/misticease.js (modified) (9 diffs)
-
trunk/inc/app/misticease-cache.php (modified) (1 diff)
-
trunk/inc/app/misticease-frontend.php (modified) (4 diffs)
-
trunk/inc/app/misticease-render.php (modified) (12 diffs)
-
trunk/inc/app/misticease-thumbnails.php (modified) (5 diffs)
-
trunk/inc/bootstrap.php (modified) (2 diffs)
-
trunk/misticease.php (modified) (2 diffs)
-
trunk/readme.txt (modified) (3 diffs)
Legend:
- Unmodified
- Added
- Removed
-
misticease/trunk/changelog-misticease.txt
r3707712 r3726224 1 = 1.3.2 = 2 3 * Added what the plugin does to the plugin name. 4 * Characters such as `. , ! ? )` directly after a URL are no longer treated as the end of the URL. When they follow with no space, mark the end with `///`. 5 * Fixed image URLs with a double extension (for example, `photo.jpg.webp`) being cut off partway. 6 7 = 1.3.1 = 8 9 * Minor bug fixes and stability improvements. 10 1 11 = 1.3.0 = 2 12 -
misticease/trunk/inc/app/css/misticease.css
r3652182 r3726224 18 18 height: auto; 19 19 object-fit: cover; 20 } 21 22 .misticease-thumbnail--shorts { 23 width: min(100%, 47.8125vh); 24 aspect-ratio: 9 / 16; 25 } 26 27 .misticease-thumbnail--shorts > img { 28 position: absolute; 29 inset: 0; 30 height: 100%; 31 margin: 0; 32 object-position: center; 20 33 } 21 34 … … 179 192 border: none; 180 193 background: #000; 194 } 195 196 .misticease-popup-content--shorts iframe { 197 aspect-ratio: 9 / 16; 198 flex-shrink: 0; 199 } 200 201 .misticease-popup-content--shorts .misticease-popup-caption { 202 flex-shrink: 0; 203 overflow-y: auto; 204 overflow-wrap: anywhere; 181 205 } 182 206 -
misticease/trunk/inc/app/js/misticease-sml-parser.js
r3707712 r3726224 103 103 // Protect the complete /label/ before interpreting any control-like suffix. 104 104 // Keep the existing reverse control order, including directly joined controls. 105 var suffix = s.match(/(?: \/([^\/<>'"\n\r]+)\/((?:(?:ttl[ \u3000][^\/<>'"\n\r]+|t\d{1,4}|p\d{1,4}|r\d{1,4}|np|n)\/)*)|(?:^|[^A-Za-z0-9_])((?:(?:ttl[ \u3000][^\/<>'"\n\r]+|t\d{1,4}|p\d{1,4}|r\d{1,4}|np|n)\/)+))$/i);105 var suffix = s.match(/(?:(?:^|[\s\u00A0\u3000])\/([^\/<>'"\n\r]+)\/((?:(?:ttl[ \u3000][^\/<>'"\n\r]+|t\d{1,4}|p\d{1,4}|r\d{1,4}|np|n)\/)*)|(?:^|[^A-Za-z0-9_])((?:(?:ttl[ \u3000][^\/<>'"\n\r]+|t\d{1,4}|p\d{1,4}|r\d{1,4}|np|n)\/)+))$/i); 106 106 if (!suffix) return null; 107 107 108 108 var hasLabel = typeof suffix[1] !== 'undefined'; 109 109 var controls = hasLabel ? suffix[2] : suffix[3]; 110 var preserved = s.slice(0, suffix.index + (hasLabel ? 0: suffix[0].length - controls.length));110 var preserved = s.slice(0, suffix.index + (hasLabel ? suffix[0].indexOf('/') : suffix[0].length - controls.length)); 111 111 s = controls; 112 112 … … 185 185 } 186 186 187 function setThumbImageSize(img, width, videoRatio ) {187 function setThumbImageSize(img, width, videoRatio, isShorts) { 188 188 if (!img || !width) return; 189 189 var height = null; 190 190 191 191 if (videoRatio) { 192 height = Math.max(1, Math.round(width * 9 / 16));192 height = Math.max(1, Math.round(width * (isShorts ? 16 / 9 : 9 / 16))); 193 193 } else { 194 194 var currentWidth = parseInt(img.getAttribute('width') || '', 10); … … 206 206 img.style.width = '100%'; 207 207 img.style.maxWidth = width + 'px'; 208 img.style.height = 'auto';208 img.style.height = isShorts ? '100%' : 'auto'; 209 209 } 210 210 } … … 214 214 215 215 if (spec.popupWidth) { 216 try { el.setAttribute('data-popup-width', String(spec.popupWidth)); } catch (_e) {} 216 try { 217 el.setAttribute('data-popup-width', String(spec.popupWidth)); 218 el.removeAttribute('data-popup-height'); 219 } catch (_e) {} 217 220 } 218 221 … … 223 226 if (spec.thumbWidth && el.classList && el.classList.contains('misticease-thumbnail')) { 224 227 el.style.maxWidth = spec.thumbWidth + 'px'; 225 setThumbImageSize(firstImage(el), spec.thumbWidth, true); 228 var isShorts = el.getAttribute('data-video-type') === 'youtube' && el.getAttribute('data-video-shorts') === '1'; 229 setThumbImageSize(firstImage(el), spec.thumbWidth, true, isShorts); 226 230 } else if (spec.thumbWidth && !(spec.label || spec.textLink)) { 227 231 setThumbImageSize(firstImage(el), spec.thumbWidth, false); … … 272 276 a.textContent = spec.label || defaultLinkText(el); 273 277 274 var attrs = ['data-video-id', 'data-video-type', 'data- popup-width', 'data-misticease-title'];278 var attrs = ['data-video-id', 'data-video-type', 'data-video-shorts', 'data-popup-width', 'data-popup-height', 'data-misticease-title']; 275 279 for (var i = 0; i < attrs.length; i++) { 276 280 var v = el.getAttribute(attrs[i]); … … 278 282 } 279 283 280 if (spec.popupWidth) a.setAttribute('data-popup-width', String(spec.popupWidth)); 284 if (spec.popupWidth) { 285 a.setAttribute('data-popup-width', String(spec.popupWidth)); 286 a.removeAttribute('data-popup-height'); 287 } 281 288 if (spec.title) a.setAttribute('data-misticease-title', spec.title); 282 289 … … 438 445 var prefix = match[1] || ''; 439 446 var url = match[2] || ''; 447 if (prefix.charAt(0) === '/' && match.index > 0 && !/[\s\u00A0\u3000]/.test(text.charAt(match.index - 1))) { 448 continue; 449 } 440 450 var spec = parsePrefix(prefix); 441 451 -
misticease/trunk/inc/app/js/misticease.js
r3707712 r3726224 74 74 } 75 75 76 function getClampedPopupWidth(widthPx ) {76 function getClampedPopupWidth(widthPx, isShorts) { 77 77 var viewportWidth = Math.max(document.documentElement.clientWidth, window.innerWidth || 0); 78 78 var viewportHeight = Math.max(document.documentElement.clientHeight, window.innerHeight || 0); 79 80 if (isShorts) { 81 var shortsMaxWidth = Math.max(1, Math.min(viewportWidth - 48, (viewportHeight - 48 - 20) * (9 / 16) + 40)); 82 return (!widthPx || widthPx < 1) ? shortsMaxWidth : Math.min(widthPx, shortsMaxWidth); 83 } 79 84 80 85 var sideMargin = 48; … … 98 103 } 99 104 100 function fitVideoPopupToViewport(popup, iframe, requestedWidthPx) { 105 function fitVideoPopupToViewport(popup, iframe, requestedWidthPx, isShorts, requestedHeightPx) { 106 if (isShorts) { 107 var shortsViewportHeight = Math.max(document.documentElement.clientHeight, window.innerHeight || 0); 108 var shortsStyle = window.getComputedStyle(popup); 109 var shortsPaddingX = (parseFloat(shortsStyle.paddingLeft) || 0) + (parseFloat(shortsStyle.paddingRight) || 0) + 110 (parseFloat(shortsStyle.borderLeftWidth) || 0) + (parseFloat(shortsStyle.borderRightWidth) || 0); 111 var shortsPaddingY = (parseFloat(shortsStyle.paddingTop) || 0) + (parseFloat(shortsStyle.paddingBottom) || 0) + 112 (parseFloat(shortsStyle.borderTopWidth) || 0) + (parseFloat(shortsStyle.borderBottomWidth) || 0); 113 var shortsMaxHeight = Math.max(1, Math.min(shortsViewportHeight - 48, shortsViewportHeight * 0.9)); 114 if (requestedHeightPx > 0) shortsMaxHeight = Math.min(shortsMaxHeight, requestedHeightPx); 115 var shortsWidth = Math.max(1, getClampedPopupWidth(requestedHeightPx > 0 ? 0 : requestedWidthPx, true) - shortsPaddingX); 116 var shortsCaption = popup.querySelector('.misticease-popup-caption'); 117 if (shortsCaption) shortsCaption.style.maxHeight = Math.max(1, shortsMaxHeight * 0.25) + 'px'; 118 119 for (var shortsPass = 0; shortsPass < 3; shortsPass++) { 120 popup.style.maxWidth = (shortsWidth + shortsPaddingX) + 'px'; 121 popup.style.width = (shortsWidth + shortsPaddingX) + 'px'; 122 var shortsCaptionHeight = shortsCaption ? shortsCaption.offsetHeight : 0; 123 var shortsAvailableHeight = Math.max(1, shortsMaxHeight - shortsPaddingY - shortsCaptionHeight); 124 shortsWidth = Math.min(shortsWidth, shortsAvailableHeight * (9 / 16)); 125 } 126 if (shortsCaption) shortsCaption.style.maxHeight = shortsCaptionHeight + 'px'; 127 popup.style.maxWidth = (shortsWidth + shortsPaddingX) + 'px'; 128 popup.style.width = (shortsWidth + shortsPaddingX) + 'px'; 129 iframe.style.height = (shortsWidth * 16 / 9) + 'px'; 130 return; 131 } 132 101 133 var viewportHeight = Math.max(document.documentElement.clientHeight, window.innerHeight || 0); 102 134 var popupPaddingX = 40; // 20px left + 20px right … … 211 243 } 212 244 213 function createVideoWindow(url, widthPx, popupTitle ) {245 function createVideoWindow(url, widthPx, popupTitle, isShorts, requestedHeightPx) { 214 246 var popup = document.createElement('div'); 215 247 popup.className = 'misticease-popup-content'; 248 if (isShorts) popup.className += ' misticease-popup-content--shorts'; 216 249 popup.setAttribute('role', 'dialog'); 217 250 popup.setAttribute('aria-modal', 'true'); 218 251 219 var clampedWidth = getClampedPopupWidth(widthPx );252 var clampedWidth = getClampedPopupWidth(widthPx, isShorts); 220 253 popup.style.maxWidth = clampedWidth + 'px'; 221 254 popup.style.width = clampedWidth + 'px'; … … 247 280 248 281 function fit() { 249 fitVideoPopupToViewport(popup, iframe, widthPx );282 fitVideoPopupToViewport(popup, iframe, widthPx, isShorts, requestedHeightPx); 250 283 } 251 284 … … 271 304 } 272 305 273 function openVideoPopup(url, widthPx, popupTitle ) {306 function openVideoPopup(url, widthPx, popupTitle, isShorts, requestedHeightPx) { 274 307 if (mgr && typeof mgr.requestOpen === 'function') { 275 308 mgr.requestOpen({ … … 278 311 floatingControls: true, 279 312 create: function () { 280 return createVideoWindow(url, widthPx, popupTitle );313 return createVideoWindow(url, widthPx, popupTitle, isShorts, requestedHeightPx); 281 314 } 282 315 }); … … 298 331 var popup = document.createElement('div'); 299 332 popup.className = 'misticease-popup-content'; 300 301 var clampedWidth = getClampedPopupWidth(widthPx); 333 if (isShorts) popup.className += ' misticease-popup-content--shorts'; 334 335 var clampedWidth = getClampedPopupWidth(widthPx, isShorts); 302 336 popup.style.maxWidth = clampedWidth + 'px'; 303 337 popup.style.width = clampedWidth + 'px'; … … 332 366 333 367 function fit() { 334 fitVideoPopupToViewport(popup, iframe, widthPx );368 fitVideoPopupToViewport(popup, iframe, widthPx, isShorts, requestedHeightPx); 335 369 } 336 370 … … 1171 1205 var w = parseInt(trigger.getAttribute('data-popup-width') || '0', 10) || 0; 1172 1206 var popupTitle = trigger.getAttribute('data-misticease-title') || ''; 1173 openVideoPopup(url, w, popupTitle); 1207 var isShorts = type === 'youtube' && trigger.getAttribute('data-video-shorts') === '1'; 1208 var requestedHeight = isShorts ? (parseInt(trigger.getAttribute('data-popup-height') || '0', 10) || 0) : 0; 1209 openVideoPopup(url, w, popupTitle, isShorts, requestedHeight); 1174 1210 }, true); 1175 1211 -
misticease/trunk/inc/app/misticease-cache.php
r3652182 r3726224 92 92 $bytes = misticease_calc_dir_size_bytes( $dir ); 93 93 misticease_opts_update( [ 'used_cache_bytes' => (int) $bytes ] ); 94 set_transient( 'misticease_used_cache_bytes_t', (int) $bytes, 10 * MINUTE_IN_SECONDS );95 94 96 95 if ( is_multisite() && function_exists( 'update_metadata' ) ) { -
misticease/trunk/inc/app/misticease-frontend.php
r3652182 r3726224 12 12 return false; 13 13 } 14 if ( preg_match( '#(?:youtu\.be/|(?:(?:www|m)\.)?youtube\.com/(?:watch\?|shorts/|embed/|live/|v/)|(?:www\.)?youtube-nocookie\.com/embed/|(?:www\.)?vimeo\.com/|player\.vimeo\.com/video/|(?:www\.)?dailymotion\.com/(?:video|embed/video)/|dai\.ly/)#i', $content ) ) { 15 return true; 14 $content = (string) preg_replace( '#<!--.*?-->|<(pre|code|script|style|textarea|kbd|samp|var)\b[^>]*>.*?</\1\s*>#is', ' ', $content ); 15 $options = misticease_opts_get(); 16 $images_enabled = ! isset( $options['image_popup'] ) || 'on' === $options['image_popup']; 17 $cdn_hosts = $images_enabled ? misticease_cdn_hosts_effective() : []; 18 19 if ( preg_match_all( '#<[a-z][a-z0-9:-]*\b(?:[^>"\']|"[^"]*"|\'[^\']*\')*?\sclass\s*=\s*(["\'])(.*?)\1(?:[^>"\']|"[^"]*"|\'[^\']*\')*>#is', $content, $classes, PREG_SET_ORDER ) ) { 20 foreach ( $classes as $class ) { 21 if ( preg_match( '/(?:^|\s)misticease-(?:thumbnail|n-link)(?:\s|$)/', (string) $class[2] ) || ( $images_enabled && preg_match( '/(?:^|\s)misticease-img-popup(?:\s|$)/', (string) $class[2] ) ) ) { 22 return true; 23 } 24 } 16 25 } 17 if ( false !== stripos( $content, 'wp-image-' ) && false !== stripos( $content, '<a' ) ) { 18 return true; 26 27 if ( $images_enabled && preg_match_all( '#<a\b(?:[^>"\']|"[^"]*"|\'[^\']*\')*?\shref\s*=\s*(["\'])(.*?)\1(?:[^>"\']|"[^"]*"|\'[^\']*\')*>#is', $content, $anchors, PREG_SET_ORDER ) ) { 28 foreach ( $anchors as $anchor ) { 29 if ( misticease_is_supported_media_image_href( (string) $anchor[2], $cdn_hosts ) ) { 30 return true; 31 } 32 } 33 } 34 35 $content = misticease_convert_anchored_ncode( $content ); 36 $content = (string) preg_replace( '#<a\b[^>]*>.*?</a>#is', ' ', $content ); 37 $content = (string) preg_replace( '/(<!--.*?-->|<!\[CDATA\[.*?\]\]>|<[^>"\']*(?:"[^"]*"[^>"\']*|\'[^\']*\'[^>"\']*)*>)/s', ' ', $content ); 38 $content = wp_strip_all_tags( $content ); 39 40 if ( preg_match_all( misticease_video_service_candidate_pattern(), $content, $videos, PREG_SET_ORDER ) ) { 41 foreach ( $videos as $video ) { 42 [ $url ] = misticease_split_pasted_video_service_url( (string) $video['url'] ); 43 if ( misticease_is_supported_video_service_url( $url ) ) { 44 return true; 45 } 46 } 47 } 48 49 if ( $images_enabled && preg_match_all( misticease_direct_image_url_pattern(), $content, $images, PREG_SET_ORDER ) ) { 50 foreach ( $images as $image ) { 51 $spec = misticease_parse_slash_markup_prefix( (string) ( $image['prefix'] ?? '' ) ); 52 [ $url ] = misticease_split_pasted_direct_image_url( (string) $image['url'] ); 53 if ( ! empty( $spec['has_markup'] ) && ( ! empty( $spec['label'] ) || ! empty( $spec['thumb_width'] ) || ! empty( $spec['no_popup'] ) ) && misticease_is_supported_media_image_href( $url, $cdn_hosts ) ) { 54 return true; 55 } 56 } 19 57 } 20 58 return false; … … 25 63 return false; 26 64 } 27 if ( is_singular() ) {65 if ( wp_script_is( 'misticease', 'enqueued' ) ) { 28 66 return true; 29 67 } 30 68 global $wp_query; 31 69 if ( ! isset( $wp_query ) || ! isset( $wp_query->posts ) || ! is_array( $wp_query->posts ) ) { 32 return true;70 return false; 33 71 } 34 72 foreach ( $wp_query->posts as $post ) { … … 47 85 * ---------------------------------------------------------------------- */ 48 86 49 add_action( 50 'wp_enqueue_scripts', 51 static function (): void { 52 if ( ! misticease_should_enqueue_frontend_assets() ) { 87 function misticease_enqueue_frontend_assets( bool $force = false ): void { 88 if ( is_admin() || is_feed() || ( defined( 'REST_REQUEST' ) && REST_REQUEST ) || ( ! $force && ! misticease_should_enqueue_frontend_assets() ) ) { 89 return; 90 } 91 if ( wp_script_is( 'misticease-sml-parser', 'enqueued' ) ) { 53 92 return; 54 93 } … … 102 141 wp_enqueue_script( 'misticease' ); 103 142 wp_enqueue_script( 'misticease-sml-parser' ); 143 } 144 add_action( 'wp_enqueue_scripts', 'misticease_enqueue_frontend_assets', 20 ); 145 146 function misticease_enqueue_assets_for_rendered_content( string $content ): string { 147 if ( is_admin() || is_feed() || ( defined( 'REST_REQUEST' ) && REST_REQUEST ) || wp_script_is( 'misticease-sml-parser', 'enqueued' ) ) { 148 return $content; 149 } 150 if ( misticease_content_may_need_assets( $content ) ) { 151 misticease_enqueue_frontend_assets( true ); 152 } 153 return $content; 154 } 155 add_filter( 'the_content', 'misticease_enqueue_assets_for_rendered_content', PHP_INT_MAX ); 156 add_filter( 'render_block', 'misticease_enqueue_assets_for_rendered_content', PHP_INT_MAX ); 157 158 add_filter( 159 'pre_render_block', 160 static function ( $pre_render ) { 161 return is_string( $pre_render ) ? misticease_enqueue_assets_for_rendered_content( $pre_render ) : $pre_render; 104 162 }, 105 20163 PHP_INT_MAX 106 164 ); 165 166 add_action( 167 'wp_footer', 168 static function (): void { 169 if ( wp_style_is( 'misticease', 'enqueued' ) && ! wp_style_is( 'misticease', 'done' ) ) { 170 wp_print_styles( 'misticease' ); 171 } 172 }, 173 5 174 ); -
misticease/trunk/inc/app/misticease-render.php
r3725318 r3726224 14 14 function misticease_video_service_candidate_pattern(): string { 15 15 return '/(?<!["\'=]) 16 (?P<prefix>(?: \/[^\/<>"\'\n\r]+\/)?(?:(?:ttl[ \x{3000}][^\/<>"\'\n\r]+|t\d{1,4}|p\d{1,4}|r\d{1,4}|np|n)\/)*)?16 (?P<prefix>(?:(?<![^\s\x{00A0}\x{3000}])\/[^\/<>"\'\n\r]+\/)?(?:(?:ttl[ \x{3000}][^\/<>"\'\n\r]+|t\d{1,4}|p\d{1,4}|r\d{1,4}|np|n)\/)*)? 17 17 (?P<url>https?:\/\/(?:(?:(?:www|m)\.)?youtube\.com|(?:www\.)?youtube-nocookie\.com|youtu\.be|(?:www\.)?vimeo\.com|player\.vimeo\.com|(?:www\.)?dailymotion\.com|dai\.ly)(?:\/{3}|\/(?:(?!\/{3})[^\s<>"\' ])+(?:\/{3})?)) 18 18 /ixu'; … … 107 107 } 108 108 109 return '' === $video_id ? [] : [ 'type' => 'youtube', 'id' => $video_id ]; 109 if ( '' === $video_id ) { 110 return []; 111 } 112 113 $parsed = [ 'type' => 'youtube', 'id' => $video_id ]; 114 if ( preg_match( '/^(?:www\.|m\.)?youtube\.com$/', $host ) && preg_match( '~^/shorts/[A-Za-z0-9_-]{11}/?$~', $path ) ) { 115 $parsed['is_shorts'] = true; 116 } 117 118 return $parsed; 110 119 } 111 120 … … 195 204 $images_enabled = ! isset( $opts['image_popup'] ) || 'on' === $opts['image_popup']; 196 205 $pattern = '/(?P<prefix> 197 (?: \/[^\/<>"\'\n\r]+\/(?:(?:ttl[ \x{3000}][^\/<>"\'\n\r]+|t\d{1,4}|p\d{1,4}|r\d{1,4}|np|n)\/)*)206 (?:(?<![^\s\x{00A0}\x{3000}])\/[^\/<>"\'\n\r]+\/(?:(?:ttl[ \x{3000}][^\/<>"\'\n\r]+|t\d{1,4}|p\d{1,4}|r\d{1,4}|np|n)\/)*) 198 207 |(?:(?<![A-Za-z0-9_])(?:(?:ttl[ \x{3000}][^\/<>"\'\n\r]+|t\d{1,4}|p\d{1,4}|r\d{1,4}|np|n)\/)+) 199 208 )?<a\b[^>]*\bhref=(?P<quote>["\'])(?P<href>[^"\']+)(?P=quote)[^>]*>(?P<text>.*?)<\/a>/isux'; … … 398 407 } 399 408 400 function misticease_video_text_link_html( string $url, string $video_id, string $type, int $popup_width, string $text, string $title = '' ): string {409 function misticease_video_text_link_html( string $url, string $video_id, string $type, int $popup_width, string $text, string $title = '', bool $is_shorts = false, bool $popup_width_is_explicit = false ): string { 401 410 $attrs = ''; 402 411 if ( '' !== $title ) { 403 412 $attrs = ' data-misticease-title="' . esc_attr( $title ) . '"'; 413 } 414 if ( 'youtube' === $type && $is_shorts && ! is_feed() ) { 415 $attrs .= ' data-video-shorts="1"'; 416 if ( ! $popup_width_is_explicit ) { 417 $attrs .= ' data-popup-height="' . (int) $popup_width . '"'; 418 } 404 419 } 405 420 … … 451 466 } 452 467 453 return misticease_video_text_link_html( $url, $video_id, $type, $popup_width, $link_text, $title ) . $tail;454 } 455 456 return misticease_generate_thumbnail( $url, $video_id, $thumb_width, $popup_width, $loading_attr, $title, $thumb_radius ) . $tail;468 return misticease_video_text_link_html( $url, $video_id, $type, $popup_width, $link_text, $title, ! empty( $parsed['is_shorts'] ), is_int( $spec['popup_width'] ) ) . $tail; 469 } 470 471 return misticease_generate_thumbnail( $url, $video_id, $thumb_width, $popup_width, $loading_attr, $title, $thumb_radius, is_int( $spec['thumb_width'] ), is_int( $spec['popup_width'] ) ) . $tail; 457 472 }, 458 473 $text … … 561 576 } 562 577 563 function misticease_generate_thumbnail( string $video_url, string $video_id, int $thumb_width, int $popup_width, string $loading_attr, string $sml_title = '', int $thumb_radius = 0 ): string {578 function misticease_generate_thumbnail( string $video_url, string $video_id, int $thumb_width, int $popup_width, string $loading_attr, string $sml_title = '', int $thumb_radius = 0, bool $thumb_width_is_explicit = false, bool $popup_width_is_explicit = false ): string { 564 579 $parsed = misticease_parse_video_service_url( $video_url ); 565 580 if ( empty( $parsed['type'] ) || empty( $parsed['id'] ) ) { … … 577 592 $recovery_fallback = ''; 578 593 $recovery_token = ''; 579 if ( $thumbnail_url === misticease_local_thumb_url( $video_type, $video_id ) ) {594 if ( ! is_feed() && $thumbnail_url === misticease_local_thumb_url( $video_type, $video_id ) ) { 580 595 $recovery_fallback = misticease_remote_fallback( $video_type, $video_id ); 581 596 $recovery_token = misticease_hd_thumb_prefetch_token( $video_type, $video_id ); … … 602 617 } 603 618 619 if ( is_feed() ) { 620 $feed_alt = '' !== $sml_title ? $sml_title : $alt_text; 621 return '<a href="' . esc_url( $video_url ) . '">' 622 . '<img src="' . esc_url( $thumbnail_url ) . '" alt="' . esc_attr( $feed_alt ) . '"' 623 . ' width="' . (int) $thumb_width . '" height="' . (int) $thumb_height . '" />' 624 . esc_html( $feed_alt ) 625 . '</a>'; 626 } 627 604 628 $classes = 'misticease-thumbnail'; 629 $is_shorts = 'youtube' === $video_type && ! empty( $parsed['is_shorts'] ); 630 if ( $is_shorts ) { 631 $classes .= ' misticease-thumbnail--shorts'; 632 if ( ! $thumb_width_is_explicit ) { 633 $thumb_width = max( 1, (int) floor( $thumb_width * 9 / 16 ) ); 634 } 635 $thumb_height = max( 1, (int) round( $thumb_width * 16 / 9 ) ); 636 } 605 637 if ( $is_vimeo_placeholder ) { 606 638 $classes .= ' misticease-thumbnail--vimeo-fallback'; … … 619 651 620 652 ob_start(); ?> 621 < divclass="<?php echo esc_attr( $classes ); ?>"653 <span class="<?php echo esc_attr( $classes ); ?>" 622 654 role="button" 623 655 tabindex="0" … … 625 657 data-video-id="<?php echo esc_attr( $video_id ); ?>" 626 658 data-video-type="<?php echo esc_attr( $video_type ); ?>" 659 <?php if ( $is_shorts ) : ?> 660 data-video-shorts="1" 661 <?php endif; ?> 627 662 data-popup-width="<?php echo esc_attr( $popup_width ); ?>" 663 <?php if ( $is_shorts && ! $popup_width_is_explicit ) : ?> 664 data-popup-height="<?php echo esc_attr( $popup_width ); ?>" 665 <?php endif; ?> 628 666 <?php if ( '' !== $sml_title ) : ?> 629 667 data-misticease-title="<?php echo esc_attr( $sml_title ); ?>" … … 655 693 <img decoding="async" src="<?php echo esc_url( plugins_url( 'inc/app/img/play.png', misticease_basefile() ) ); ?>" width="60" height="60" alt="" aria-hidden="true" /> 656 694 </span> 657 </ div>695 </span> 658 696 <?php 659 697 return (string) ob_get_clean(); … … 900 938 function misticease_direct_image_url_pattern(): string { 901 939 return '/(?<!["\'=]) 902 (?P<prefix>(?: \/[^\/<>":\'\n\r]+\/)?(?:(?:ttl[ \x{3000}][^\/<>":\'\n\r]+|t\d{1,4}|p\d{1,4}|r\d{1,4}|np|n)\/)*)?940 (?P<prefix>(?:(?<![^\s\x{00A0}\x{3000}])\/[^\/<>":\'\n\r]+\/)?(?:(?:ttl[ \x{3000}][^\/<>":\'\n\r]+|t\d{1,4}|p\d{1,4}|r\d{1,4}|np|n)\/)*)? 903 941 (?P<url>https?:\/\/(?:(?!\/{3})[^\s<>"\' ])+?\.(?:jpe?g|png|gif|webp|avif)(?:[?#](?:(?!\/{3})[^\s<>"\' ])*)?(?:\/{3}|(?=[\s<>"\' ]|$))) 904 942 /ixu'; -
misticease/trunk/inc/app/misticease-thumbnails.php
r3707712 r3726224 134 134 135 135 function misticease_touch_file( string $file ): void { 136 if ( '' === $file ) { 137 return; 138 } 139 140 global $wp_filesystem; 141 if ( ! isset( $wp_filesystem ) || ! $wp_filesystem || ! is_object( $wp_filesystem ) ) { 142 require_once ABSPATH . 'wp-admin/includes/file.php'; 143 WP_Filesystem(); 144 } 145 146 if ( ! $wp_filesystem || ! is_object( $wp_filesystem ) || ! method_exists( $wp_filesystem, 'touch' ) ) { 147 return; 148 } 149 150 if ( method_exists( $wp_filesystem, 'exists' ) && ! $wp_filesystem->exists( $file ) ) { 151 return; 152 } 153 154 if ( method_exists( $wp_filesystem, 'is_file' ) && ! $wp_filesystem->is_file( $file ) ) { 136 if ( '' === $file || ! is_file( $file ) || is_link( $file ) || ! misticease_path_is_under_uploads( $file ) ) { 155 137 return; 156 138 } 157 139 158 140 $now = time(); 159 $wp_filesystem->touch( $file, $now, $now ); 141 $mtime = filemtime( $file ); 142 if ( false === $mtime || ( $now - (int) $mtime ) < DAY_IN_SECONDS ) { 143 return; 144 } 145 146 [ $cache_dir ] = misticease_cache_base(); 147 if ( is_link( $cache_dir ) ) { 148 return; 149 } 150 $real_file = realpath( $file ); 151 $real_cache = realpath( $cache_dir ); 152 $real_uploads = realpath( untrailingslashit( misticease_uploads_root_normalized() ) ); 153 if ( false === $real_file || false === $real_cache || false === $real_uploads ) { 154 return; 155 } 156 $real_cache = trailingslashit( wp_normalize_path( $real_cache ) ); 157 if ( 0 !== strpos( $real_cache, trailingslashit( wp_normalize_path( $real_uploads ) ) ) || 0 !== strpos( wp_normalize_path( $real_file ), $real_cache ) ) { 158 return; 159 } 160 161 if ( @touch( $file, $now, $now ) ) { // phpcs:ignore WordPress.PHP.NoSilencedErrors.Discouraged,WordPress.WP.AlternativeFunctions.file_system_operations_touch -- This cache uses local uploads paths; avoid changing the shared filesystem connection. 162 clearstatcache( true, $file ); 163 } 160 164 } 161 165 … … 642 646 if ( ! is_dir( $dir ) ) { 643 647 misticease_opts_update( [ 'used_cache_bytes' => 0 ] ); 644 set_transient( 'misticease_used_cache_bytes_t', 0, 10 * MINUTE_IN_SECONDS );645 648 return; 646 649 } … … 654 657 if ( $total <= $cap_bytes ) { 655 658 misticease_opts_update( [ 'used_cache_bytes' => (int) $total ] ); 656 set_transient( 'misticease_used_cache_bytes_t', (int) $total, 10 * MINUTE_IN_SECONDS );657 659 return; 658 660 } … … 680 682 $final = misticease_calc_dir_size_bytes( $dir ); 681 683 misticease_opts_update( [ 'used_cache_bytes' => (int) $final ] ); 682 set_transient( 'misticease_used_cache_bytes_t', (int) $final, 10 * MINUTE_IN_SECONDS );683 684 } 684 685 … … 687 688 if ( ! is_dir( $dir ) ) { 688 689 misticease_opts_update( [ 'used_cache_bytes' => 0 ] ); 689 set_transient( 'misticease_used_cache_bytes_t', 0, 10 * MINUTE_IN_SECONDS );690 690 return; 691 691 } -
misticease/trunk/inc/bootstrap.php
r3725318 r3726224 9 9 10 10 if ( ! defined( 'MISTICEASE_VER' ) ) { 11 define( 'MISTICEASE_VER', defined( 'MISTICEASE_VERSION' ) ? MISTICEASE_VERSION : '1.3. 2' );11 define( 'MISTICEASE_VER', defined( 'MISTICEASE_VERSION' ) ? MISTICEASE_VERSION : '1.3.3' ); 12 12 } 13 13 … … 23 23 } 24 24 25 add_action( 'init', static function (): void { 26 // phpcs:ignore PluginCheck.CodeAnalysis.DiscouragedFunctions.load_plugin_textdomainFound -- The bundled translation path is needed for inline documentation, option descriptions, and usage notices. 27 load_plugin_textdomain( 'misticease', false, dirname( plugin_basename( misticease_basefile() ) ) . '/languages' ); 28 }, 0 ); 29 25 30 /* ------------------------------------------------------------------------- 26 31 * Module loader -
misticease/trunk/misticease.php
r3725318 r3726224 3 3 * Plugin Name: MisticEase – Video Thumbnails & Draggable Popups 4 4 * Plugin URI: https://mitum.me/misticease 5 * Description: Pasted YouTube or Vimeo URLs become thumbnails on publishto keep pages fast. A click opens a popup visitors can drag anywhere and watch as they read.6 * Version: 1.3. 25 * Description: Pasted YouTube or Vimeo URLs become thumbnails to keep pages fast. A click opens a popup visitors can drag anywhere and watch as they read. 6 * Version: 1.3.3 7 7 * Author: MistiCuantum 8 8 * Author URI: https://mitum.me … … 83 83 } 84 84 if ( !defined( 'MISTICEASE_VERSION' ) ) { 85 define( 'MISTICEASE_VERSION', '1.3. 2' );85 define( 'MISTICEASE_VERSION', '1.3.3' ); 86 86 } 87 87 if ( !defined( 'MISTICEASE_PACKAGE_SLUG' ) ) { -
misticease/trunk/readme.txt
r3725318 r3726224 5 5 Tested up to: 7.1 6 6 Requires PHP: 7.4 7 Stable tag: 1.3. 27 Stable tag: 1.3.3 8 8 License: GPLv2 9 9 License URI: https://www.gnu.org/licenses/gpl-2.0.html … … 106 106 * No space, line break, or HTML tag can come between the prefix and the URL. 107 107 * When text comes before the prefix, put a space before the prefix. 108 * A `/Your text/` label must start at the beginning of the text or immediately after whitespace. 108 109 * The text in `/Your text/` and `ttl` cannot contain `/`, `<`, `>`, or quotation marks (`"`, `'`). 109 110 … … 264 265 == Upgrade Notice == 265 266 266 = 1.3. 2=267 The plugin name now says what the plugin does.267 = 1.3.3 = 268 Fixes Slash Markup label detection to prevent slashes in ordinary text or URLs from breaking video and image markup. 268 269 269 270 == Changelog == 270 271 271 = 1.3.2 = 272 273 * Added what the plugin does to the plugin name. 274 * Characters such as `. , ! ? )` directly after a URL are no longer treated as the end of the URL. When they follow with no space, mark the end with `///`. 275 * Fixed image URLs with a double extension (for example, `photo.jpg.webp`) being cut off partway. 276 277 = 1.3.1 = 278 279 * Minor bug fixes and stability improvements. 272 = 1.3.3 = 273 274 * Fixed Slash Markup label detection so slashes in ordinary text or other URLs no longer disrupt video and image markup. 280 275 281 276 Older changelog entries are in `changelog-misticease.txt`.
Note:
See TracChangeset
for help on using the changeset viewer.
![(please configure the [header_logo] section in trac.ini)](/chrome/site/your_project_logo.png)