=== DeveloperSD Logo Slider ===
Contributors: developersd, sudipdebnath
Tags: logo slider, logo carousel, brands, partners, elementor
Requires at least: 6.0
Tested up to: 7.1
Requires PHP: 7.4
Stable tag: 1.1.5
License: GPLv2 or later
License URI: https://www.gnu.org/licenses/gpl-2.0.html

Create responsive logo sliders with drag-and-drop management, flexible controls, shortcode output, and optional builder integrations.

== Description ==

DeveloperSD Logo Slider is a logo/brand carousel plugin built for professional client sites, powered by the battle-tested Slick Carousel engine (bundled locally - no CDN dependency).

**Features**

* Unlimited logo sliders, each with its own logos, order, and settings
* Drag-and-drop logo reordering in the admin
* Optional link, target, title, alt text, and custom class per logo
* Fully configurable responsive breakpoints (Desktop / Tablet / Mobile slide counts)
* Navigation arrows with selectable icons and icon sizing
* Per-device arrow and pagination-dot visibility (Desktop / Tablet / Mobile)
* Pagination dots, autoplay, infinite loop
* Touch swipe, mouse drag, and keyboard navigation
* Respects the visitor's "prefers-reduced-motion" setting
* Live, near-real-time preview while editing a slider
* Duplicate, export (JSON), and import sliders
* Shortcode output: `[developersd_logo_slider id="123"]`
* Optional Elementor widget and Divi module — the core plugin works perfectly without either
* Assets are only loaded on pages that actually use a slider
* Built to pass the WordPress Plugin Check tool cleanly

= Shortcode =

    [developersd_logo_slider id="123"]

Optional attribute overrides:

    [developersd_logo_slider id="123" autoplay="false" desktop="4" tablet="2" mobile="1" nav="true" dots="false"]

== Installation ==

1. Upload the `developersd-logo-slider` folder to `/wp-content/plugins/`, or install the zip via **Plugins → Add New → Upload Plugin**.
2. Activate the plugin through the **Plugins** screen.
3. Go to **Logo Slider → Add New Slider**.
4. Add your logos, configure the settings, set Status to **Active**, and Publish.
5. Copy the shortcode into any post, page, or widget area.

== Frequently Asked Questions ==

= Does this plugin require Elementor or Divi? =

No. The core plugin works entirely through the `[developersd_logo_slider]` shortcode. Elementor and Divi integrations are automatically enabled only if those plugins are already active, and can be turned off from Settings → Advanced.

= Will deleting a slider delete my images? =

No. Deleting a slider (or uninstalling the plugin, by default) never deletes Media Library attachments — only the slider's own configuration.

= Can I have more than one slider on the same page? =

Yes, use as many shortcodes as you like; each slider's assets are only loaded once per page regardless of how many instances appear.

= How do I completely remove all plugin data? =

Enable "Delete all plugin data on uninstall" in Settings → Advanced before deleting the plugin from the Plugins screen. This is disabled by default so your data is preserved.

== Changelog ==

= 1.1.5 =
* Hardened rendered slider HTML across shortcode, Elementor, Divi, preview, and AJAX paths using a restricted WordPress HTML allowlist.

= 1.1.4 =
* Escape rendered slider markup at preview and Elementor output boundaries using a restricted WordPress HTML allowlist.

= 1.1.3 =
* Register Elementor slider assets on the Elementor asset lifecycle.
* Enforce bounded numeric pixel widths during settings sanitization and rendering.


= 1.1.3 =
* Fixed Elementor asset registration timing to avoid WordPress incorrect-use notices with WP_DEBUG enabled.
* Restricted Container Max Width to a validated numeric pixel value, preventing CSS declaration injection.

= 1.1.1 =
* Removed per-slider arbitrary Custom CSS input for WordPress.org directory compliance.
* Replaced direct preview style output with the WordPress inline-style API.
* Moved the top-level admin menu to a lower, less prominent position.
* Removed the non-functional sortable Status column declaration.
* Limited plugin notices to contextual plugin actions and removed the dashboard capability notice.

= 1.1.0 =
* Fixed toggle switch dimensions when labels are stacked below the control.
* Normalized toggle alignment across settings cards, edit screens, and the slider list table.

= 1.0.14 =
* Improved toggle layout across the plugin admin: status and Enabled/Disabled text now renders below the switch for stable alignment on all screen sizes.
* Updated Global Settings checkboxes to use the same consistent toggle UI.

= 1.0.13 =
* Clarified the Autoplay & Loop settings with a dedicated Infinite Loop toggle.
* Infinite Loop works independently with autoplay, arrow navigation, touch swipe, and manual navigation.

= 1.0.12 =
* Removed the attachment meta_key/meta_value lookup used by repeated image migrations.
* Added a compact source-URL hash index for migrated Media Library attachments to avoid slow post-meta queries.
* Kept direct attachment validation so stale or mismatched migration index entries are never reused.

= 1.0.11 =
* Fixed Elementor widget asset loading using declared script/style dependencies.
* Added Elementor live-editor reinitialization support.
* Fixed Divi module registration and changed Visual Builder support to server-rendered partial compatibility.
* Removed the Divi module/shortcode slug collision and preserved legacy Divi content compatibility.
* Improved builder preview feedback when a selected slider is inactive or unavailable.

= 1.0.10 =
* Added portable cross-site logo image migration for both single-slider and Export All JSON files.
* Same-site imports safely reuse the existing Media Library attachment when its URL matches.
* Cross-site imports download missing source images into the destination Media Library and remap slider attachment IDs automatically.
* Re-imports reuse images previously migrated from the same source URL to avoid duplicate Media Library files.
* Added safer handling for attachment-ID collisions between different WordPress sites and improved partial-import notices when a remote image cannot be fetched.

= 1.0.9 =
* Fixed JSON import on servers where WordPress uses an FTP/SSH filesystem transport and cannot access PHP upload temp files.
* Added a versioned export format shared by single-slider and Export All downloads.
* Kept backward compatibility with legacy single-slider and Export All JSON files.
* Added individual Export JSON buttons to the Settings slider list.
* Improved import validation and partial-import handling.

= 1.0.8 =
* Kept Desktop, Tablet, and Mobile slide-count controls together in one responsive row.
* Added a configurable Mobile breakpoint to individual sliders and global defaults.
* Kept Desktop, Tablet, and Mobile breakpoint controls together in one responsive row.
* Added breakpoint ordering safeguards and explicit three-breakpoint Slick responsive handling.

= 1.0.7 =
* Unified the admin settings design across General, Navigation, Autoplay & Loop, Interaction, and Logo Display tabs.
* Added consistent cards, field groups, toggle switches, spacing, units, descriptions, and responsive admin layouts.
* Improved mobile settings-tab navigation.

= 1.0.6 =
* Fixed pagination dots so they initialize reliably and remain available across responsive breakpoint changes.
* Added reliable per-device visibility handling for both arrows and dots without forcing Slick to rebuild controls.
* Added working top/bottom dot placement and inside/outside arrow positioning.
* Redesigned the Navigation settings tab with clean cards, responsive two-column controls, toggle switches, device pills, and aligned unit fields.

= 1.0.5 =
* Added independent Desktop, Tablet, and Mobile visibility controls for arrow navigation and pagination dots.
* Added selectable arrow icon styles and a dedicated arrow icon-size control.
* Fixed arrow glyph centering and constrained oversized icons so they remain inside the navigation button.


= 1.0.4 =
* Fixed remaining WordPress Plugin Check i18n, escaping, naming-convention, and readme warnings.
* Updated WordPress compatibility metadata to 7.1.

= 1.0.3 =
* Improved input validation and sanitization for saved slider data and AJAX previews.
* Added stricter uploaded import-file validation.
* Removed the no-longer-required manual translation loading call for WordPress.org compatibility.
* Cleaned up Plugin Check security and nonce-analysis warnings.

= 1.0.2 =
* Added Active/Inactive toggle switches to the slider editor and sliders list table.
* Added AJAX quick status switching from the sliders list table.

= 1.0.1 =
* Fixed frontend and admin Live Preview slider asset initialization.
* Fixed shortcode meta-box overflow styling.

= 1.0.0 =
* Initial release.

== Developer Notes ==

See the in-admin **Documentation / Help** screen for the full list of actions and filters, including `developersd_logo_slider_before`, `developersd_logo_slider_after`, `developersd_logo_slider_args`, `developersd_logo_slider_logo_data`, `developersd_logo_slider_classes`, `developersd_logo_slider_output`, `developersd_logo_slider_capability`, and `developersd_logo_slider_template`.

== Credits ==

Built by DeveloperSD. The frontend carousel is powered by [Slick Carousel](https://kenwheeler.github.io/slick/) by Ken Wheeler, MIT licensed, bundled locally under `assets/vendor/slick/` (only the core script and structural stylesheet - no CDN dependency, and no icon-font theme file, since this plugin supplies its own arrow/dot styling). See `assets/vendor/slick/LICENSE` and `assets/vendor/slick/NOTICE.txt` for full attribution. Admin drag-and-drop reordering uses jQuery UI Sortable, which ships with WordPress core.
