=== DevPress Factory for Elementor - Video Carousel Popup ===
Contributors: devpressfactory
Tags: elementor, video, carousel, popup, slider
Requires at least: 5.0
Tested up to: 6.9
Requires PHP: 7.2
Stable Tag: 1.2.8
License: GPLv2 or later
License URI: https://www.gnu.org/licenses/gpl-2.0.html

A responsive Elementor video carousel widget. Click any thumbnail to open an elegant popup player — supports MP4 and HLS (m3u8) streaming.

== Description ==

**DevPress Factory Video Carousel Popup for Elementor** adds a powerful, fully customizable video carousel widget to your Elementor page builder.

Each slide displays a rectangular thumbnail with rounded corners and a centered play button. Clicking a card opens a smooth animated popup with a full video player — no page reloads, no redirects.

= Key Features =

* **Swiper-powered carousel** — smooth, touch-friendly, and responsive
* **Popup video player** — elegant animated modal with keyboard and accessibility support
* **MP4 support** — native playback in all modern browsers
* **HLS / M3U8 support** — via HLS.js on Chrome/Firefox; native on Safari and iOS
* **Fully customizable** — border radius, play button size and color, overlay, typography, aspect ratio, popup dimensions and more
* **Responsive breakpoints** — set different slides-per-view for desktop, tablet, and mobile independently
* **Autoplay & loop** — optional, with pause-on-hover
* **Navigation arrows and pagination** — toggleable
* **Accessibility** — keyboard navigation (Enter/Space/Esc), ARIA roles and labels
* **Lightweight** — Swiper and HLS.js are loaded only on pages containing the widget
* **Compatible with all recent Elementor versions** — from 2.x through the latest 3.x release

= Supported Video Formats =

| Format | Support |
|--------|---------|
| MP4 | Native — all modern browsers |
| M3U8 / HLS | HLS.js on Chrome/Firefox; native on Safari/iOS |
| WebM | Native — all modern browsers |

= How to Use =

1. Install and activate the plugin
2. Open any page in Elementor Editor
3. Search for **"Video Carousel Popup"** in the widget panel
4. Drag it onto your page
5. Add video items via the repeater: title, video URL, thumbnail image, and optional description
6. Customize appearance from the Style tab
7. Save and publish

= Third-Party Libraries =

This plugin loads the following open-source libraries via CDN (jsDelivr), only when the widget is present on a page:

* **Swiper** (v11) — MIT License — https://swiperjs.com
* **HLS.js** (latest) — Apache 2.0 License — https://github.com/video-dev/hls.js

No data is sent to external services. The CDN requests are standard asset deliveries with no tracking.

== Installation ==

= From the WordPress Admin (recommended) =

1. Go to **Plugins → Add New → Upload Plugin**
2. Upload the `elementor-video-carousel.zip` file
3. Click **Install Now**, then **Activate**

= Manual Installation via FTP =

1. Extract the plugin ZIP
2. Upload the `elementor-video-carousel` folder to `/wp-content/plugins/`
3. Activate the plugin from **Plugins → Installed Plugins**

= Requirements =

* WordPress 5.0 or higher
* Elementor (free) 2.0.0 or higher
* PHP 7.2 or higher

== Frequently Asked Questions ==

= Does this work with Elementor Free? =

Yes. This plugin requires only the free version of Elementor. Elementor Pro is not needed.

= Which Elementor versions are supported? =

The plugin is compatible with Elementor from version 2.0.0 through the latest release (3.x). It uses a dual hook registration pattern to support both old and new Elementor APIs.

= Can I use HLS / M3U8 streaming videos? =

Yes. HLS streams (.m3u8) are supported via HLS.js on Chrome, Firefox, and Edge. Safari and iOS handle HLS natively without any library. The correct playback method is detected automatically.

= Where is the widget in the Elementor panel? =

Search for "Video Carousel Popup" in the widget search box, or look in the **Video Carousel** category or the **General** category.

= Can I set different numbers of slides for mobile, tablet, and desktop? =

Yes. The Content tab → Carousel Settings section has independent slide-per-view controls for each breakpoint.

= Can I change the thumbnail aspect ratio? =

Yes. You can choose from 16:9, 4:3, 3:2, 21:9, and 1:1 presets from the Card Settings section.

= Can I change the border radius of the thumbnails? =

Yes. The Style → Card Style section includes a full border-radius control (all four corners, in px or %).

= The popup does not open — what should I check? =

Make sure the **Video URL** field in the repeater item is filled in with a valid, publicly accessible URL. For HLS streams, also ensure the video server allows CORS requests from your domain.

= Does the plugin slow down my site? =

No. Swiper.js and HLS.js are loaded via CDN only on pages that contain the widget. If the widget is not present on a page, no extra scripts are loaded.

= Is the popup accessible? =

Yes. The popup supports keyboard navigation (Enter/Space to open, Escape to close), includes ARIA `role="dialog"` and `aria-modal="true"` attributes, and manages focus correctly.

== Screenshots ==

1. The video carousel displayed on the frontend with rounded card thumbnails and centered play buttons
2. The popup player open, showing a video in 16:9 format with title and description
3. The Elementor widget panel — Content tab with the video repeater
4. The Elementor widget panel — Style tab showing card and play button customization options

== Changelog ==

= 1.2.8 =
* Fix: Prevented frontend JavaScript errors when Elementor hooks are not available yet by waiting for the Elementor frontend init event and checking hooks.addAction before using it.
* Fix: Restored embedded video carousel loading on pages where Elementor initializes asynchronously.
* Improvement: Translated Elementor user-facing labels, descriptions, ARIA labels, and JavaScript accessibility strings to English for WordPress.org compliance.
* Maintenance: Updated plugin version, stable tag, and documentation references to 1.2.8.

= 1.2.4 =
* Fix: Text Domain updated to match plugin slug (devpress-factory-for-elementor-video-carousel-popup) in all files
* Fix: Escaped $aria_label output correctly with esc_attr()
* Rename: Plugin renamed to "DevPress Factory for Elementor - Video Carousel Popup"
* Rename: Slug updated to devpress-factory-for-elementor-video-carousel-popup

= 1.2.2 =
* Fix: Plugin slug renamed to devpress-factory-video-carousel (no longer starts with reserved term "elementor")
* Fix: translators comments now placed immediately before esc_html__() calls as required by PHPCS

= 1.2.1 =
* Fix: Removed CDN dependencies — Swiper and HLS.js are now bundled locally (WordPress.org requirement)
* Fix: Added escaping functions on all output (WordPress security standards)
* Fix: Added translators comments on all sprintf() i18n strings
* Fix: Created languages/ folder (Domain Path header)
* Fix: Reduced tags to 5 (WordPress.org limit)
* Fix: Updated "Tested up to" to WordPress 6.9
* Fix: Plugin slug no longer starts with reserved term "elementor"

= 1.2.0 =
* New: Columns selector — choose 1, 2, 3, or 4 visible cards on desktop; 1, 2, or 3 on tablet; 1 or 2 on mobile
* New: Scroll behavior control — advance 1 video at a time or scroll a full group (matching the visible column count)
* Improved: column controls now use a clear dropdown (Select) instead of a number input, with per-device labels
* Updated: Swiper breakpoints now correctly propagate `slidesPerGroup` per breakpoint

= 1.0.0 =
* Initial release
* Swiper-based responsive carousel with configurable breakpoints
* Popup video player with MP4 and HLS/m3u8 support via HLS.js
* Full Elementor panel integration: 15+ controls across Content and Style tabs
* Accessible: keyboard navigation, ARIA attributes, ESC to close
* Compatible with Elementor 2.0.0 through 3.x

== Upgrade Notice ==

= 1.0.0 =
Initial release — no upgrade steps required.

== Privacy Policy ==

This plugin does not collect, store, or transmit any personal data.

When the widget is present on a page, assets (Swiper.js and HLS.js) are loaded from the jsDelivr CDN (jsdelivr.net). Standard server-side access logs may be recorded by jsDelivr. Please refer to jsDelivr's privacy policy at https://www.jsdelivr.com/terms/privacy-policy-jsdelivr-com for details.

No other third-party services are used.
