=== EffortLess Carousel with Gallery === Contributors: domclic Donate link: https://id7.dev/donate/?plugin=effortless-carousel-with-gallery Tags: carousel, gallery, slideshow, animation Requires at least: 6.2 Tested up to: 7.0 Stable tag: 1.3.21 Requires PHP: 7.4 License: GPLv2 or later License URI: https://www.gnu.org/licenses/gpl-2.0.html Transform your WordPress galleries into responsive carousels with autoplay. == Description == Effortless Carousel with Gallery enhances your WordPress site by turning standard galleries into responsive, user-friendly carousels. It also provides customizable text animations to make your content pop. Ideal for creating engaging slideshows and dynamic text effects without complex setup. Features: Responsive Carousel: Converts WordPress galleries with the `elcwg_carousel_active` class into smooth, infinite-looping carousels with autoplay, navigation arrows, dots, and swipe support. Text Animations: Apply animations to text elements with adjustable delays. Admin Settings: Configure carousel options via an intuitive settings page. Lightweight & Secure: Sanitized inputs and escaped outputs for performance and security. == Installation == 1. Upload the `effortless-carousel-with-gallery` folder to the `/wp-content/plugins/` directory. 2. Activate the plugin through the 'Plugins' menu in WordPress. 3. Navigate to Settings > Carousel Settings to configure options: - Enable/disable carousel and autoplay for galleries. - Adjust carousel autoplay delay and text animation delay. - Enable/disable infinite looping for carousels. 4. Add the `elcwg_carousel_active` class to any WordPress gallery block to enable the carousel. = Additional CSS Classes = You can add these additional CSS classes to your gallery block for enhanced functionality: * `elcwg-full-width` - Makes the carousel extend to full browser width, breaking out of content containers. * `elcwg-overlay-dots` - Positions the navigation dots as an overlay on top of the images instead of below. * `elcwg-no-arrows` - Hides the previous/next navigation arrows. * `elcwg-no-dots` - Hides the navigation dots. * `elcwg-no-captions` - Hides image captions. Example: Add `elcwg_carousel_active elcwg-full-width elcwg-overlay-dots` to create a full-width carousel with overlay navigation dots. == Frequently Asked Questions == = How do I enable the carousel for a gallery? = Add the `elcwg_carousel_active` class to a WordPress gallery block in the block editor or via custom CSS/HTML. Ensure the "Enable Carousel" option is checked in the plugin settings. = Can I customize the autoplay speed? = Yes, go to Settings > Carousel Settings and adjust the "Autoplay Delay (ms)" field. The minimum is 1000ms (1 second). = Does the carousel support mobile devices? = Yes, the carousel is responsive and includes swipe gestures for touch devices. It adjusts to single-slide view on screens smaller than 480px. = Is the plugin secure? = Yes, all settings are sanitized on input and escaped on output to prevent security issues, following WordPress coding standards. == Screenshots == 1. Carousel in action with navigation arrows and dots. 2. Admin settings page for configuring carousel and text animations. 3. Text animation applied to a heading. == Changelog == = 1.3.21 = * Fix: update plugin name casing to EffortLess; add plugin identifier to donate link. = 1.3.20 = * Restored: dismissible donate notice on the Carousel Settings and Gallery Presets admin pages (screen IDs updated for the new top-level menu structure). = 1.3.19 = * Fixed: image picker (add/remove/reorder images) and preset editing now work. The admin script enqueue was comparing against a guessed hook name that did not match what WordPress generates for a submenu of a custom top-level menu. The enqueue function now captures the exact hook suffix returned by add_submenu_page() and compares against that. = 1.3.18 = * Fixed: admin_enqueue_scripts hook name corrected from elcwg-settings_page_elcwg-presets to toplevel_page_elcwg-presets (partial fix — see 1.3.19 for the complete fix). = 1.3.17 = * Fixed: browser focus ring (white circle) no longer persists after clicking an arrow with the mouse. Uses :focus-visible so keyboard users still get an outline for accessibility. * Added: white ring ripple animation after clicking an arrow — expands and fades out in 0.55 s. Resets correctly on rapid clicks. Disabled for users who prefer reduced motion. * Fixed: missing type="button" attribute on arrow buttons (prevented accidental form submission). = 1.3.16 = * Fixed: navigation arrows are now perfectly centered in their circle on all browsers and fonts. Replaced text characters (‹ ›) with inline SVG chevrons and switched from line-height/text-align centering to flexbox — text glyph metrics vary per font and caused the icon to appear offset. * Improved: arrow buttons slightly enlarged (36 px → 40 px) for better touch targets, padding reset to zero so no browser default interferes. = 1.3.15 = * Changed: Gallery Presets submenu label renamed to "Galleries"; Settings submenu label renamed to "Native Settings". * Added: Full i18n coverage — fresh .pot generated from source; .po and compiled .mo files for English (en_US), French (fr_FR), Spanish (es_ES), Traditional Chinese / Taiwan (zh_TW), Korean (ko_KR), and Japanese (ja). = 1.3.14 = * Improved: Plugin menu moved from Settings to a dedicated top-level Carousel entry in the admin sidebar, with Settings and Gallery Presets as sub-pages. Provides faster access without hunting through the Settings menu. * Improved: Preset edit form reorganised into Identity, Behavior, Appearance, and Images sections for faster scanning. All checkboxes now carry inline labels explaining what each option does. * Improved: Settings page now links directly to Gallery Presets and uses inline checkbox labels consistent with the preset form. = 1.3.13 = * Fixed: carousel inside a constrained group block (is-layout-constrained + wp-container-* class) no longer breaks out to full viewport width. The elcwg-full-width breakout relies on margin-left:50% resolving against the viewport — inside a constrained group the 50% reference is the group's narrower width, causing misalignment. JS now also detects this case (in addition to the inline-style check from v1.3.12) and skips the breakout, letting the carousel fill the group naturally. = 1.3.12 = * Fixed: carousel no longer overflows a width-constrained group block (e.g. width:80%). The full-width breakout (width:100vw + margin-left:50%) uses the parent width as its reference point; inside a narrow group the math resolves incorrectly. JS now skips the elcwg-full-width class when the gallery's direct parent has an explicit inline width, letting the carousel fill the parent naturally instead. * Fixed: added min-width:0 to the carousel wrapper so it cannot be stretched wider than its declared width when it is a flex item inside a flex-row group block (browsers default flex items to min-width:auto which allows expansion to min-content size). = 1.3.11 = * Fixed: carousel now respects the width set on the gallery block via Block Settings → Dimensions. WordPress writes these as inline styles on the gallery element; after JS wrapping the carousel, that percentage became relative to the wrapper (inner context) rather than the original parent. The inline width and max-width are now migrated to the outer wrapper before insertion. = 1.3.10 = * Fixed: alignwide carousel now respects the parent group block's custom wide-size set in Block Settings. Removed the explicit width override that forced the global theme wide-size, letting WordPress's constrained-layout container CSS supply the correct value (including any per-group custom content/wide width). = 1.3.9 = * Fixed: full-width carousel wrapper now uses !important on width, max-width, margin-left, and margin-right — WordPress block-theme container CSS was applying margin-left:auto !important and max-width:80% to all direct non-alignfull children of a group block, overriding the breakout technique and shifting the carousel to the left. = 1.3.8 = * Fixed: full-size gallery no longer flashes before the carousel initializes — slides are hidden until JS setup completes, with a CSS spinner shown in their place. * Fixed: WordPress "Full width" alignment now uses the plugin's own full-width implementation instead of relying on theme CSS selectors that target the gallery element directly. * Fixed: WordPress "Wide width" alignment now expands the wrapper to --wp--style--global--wide-size (block themes) with a 1200px fallback. * Fixed: float:none on carousel wrapper prevents theme alignment CSS from floating the carousel. = 1.3.7 = * Fixed: carousel no longer overflows into adjacent page sections when its parent container has an explicit height (e.g. a group block set to height:200px). The wrapper now uses a flex-column layout with height:100% and overflow:hidden — it fills the parent when constrained and falls back to auto-height when the parent is unconstrained. * Fixed: carousel images now use object-fit:cover so they fill their slot without distortion when height is constrained by a parent block. * Fixed: navigation dots changed from back to