Changeset 3782631
- Timestamp:
- 11/03/2026 09:15:42 PM (31 hours ago)
- Location:
- livid-video-hosting
- Files:
-
- 44 added
- 44 edited
- 1 copied
-
tags/2.1.0 (copied) (copied from livid-video-hosting/trunk )
-
tags/2.1.0/CHANGELOG.md (modified) (1 diff)
-
tags/2.1.0/README.md (modified) (8 diffs)
-
tags/2.1.0/assets/js/livid-admin.js (modified) (1 diff)
-
tags/2.1.0/assets/js/livid-avada-native.js (added)
-
tags/2.1.0/assets/js/livid-avada-player.js (added)
-
tags/2.1.0/blocks/video/block.json (modified) (1 diff)
-
tags/2.1.0/blocks/video/index.asset.php (modified) (1 diff)
-
tags/2.1.0/includes/avada (added)
-
tags/2.1.0/includes/avada/class-bootstrap.php (added)
-
tags/2.1.0/includes/avada/class-dynamic-audit.php (added)
-
tags/2.1.0/includes/avada/class-dynamic-sources.php (added)
-
tags/2.1.0/includes/avada/class-element-video.php (added)
-
tags/2.1.0/includes/avada/class-legacy-layout-guard.php (added)
-
tags/2.1.0/includes/avada/class-native-surfaces.php (added)
-
tags/2.1.0/includes/avada/class-option-audit.php (added)
-
tags/2.1.0/includes/avada/class-slider.php (added)
-
tags/2.1.0/includes/avada/class-thumbnail.php (added)
-
tags/2.1.0/includes/avada/video-preview.php (added)
-
tags/2.1.0/includes/avada/video-view.js (added)
-
tags/2.1.0/includes/class-admin.php (modified) (3 diffs)
-
tags/2.1.0/includes/class-assets.php (added)
-
tags/2.1.0/includes/class-diagnostics-report.php (modified) (4 diffs)
-
tags/2.1.0/includes/class-iframe-renderer.php (modified) (3 diffs)
-
tags/2.1.0/includes/class-plugin.php (modified) (3 diffs)
-
tags/2.1.0/includes/migration/jobs/class-scan-job.php (modified) (3 diffs)
-
tags/2.1.0/includes/migration/strategies/class-anchor-strategy.php (modified) (1 diff)
-
tags/2.1.0/includes/migration/strategies/class-avada-attribute-strategy.php (added)
-
tags/2.1.0/includes/migration/strategies/class-avada-code-strategy.php (added)
-
tags/2.1.0/includes/migration/strategies/class-avada-legacy-meta-strategy.php (added)
-
tags/2.1.0/includes/migration/strategies/class-avada-post-meta-strategy.php (added)
-
tags/2.1.0/includes/migration/strategies/class-avada-slider-strategy.php (added)
-
tags/2.1.0/includes/migration/strategies/class-avada-strategy.php (added)
-
tags/2.1.0/includes/migration/strategies/class-avada-url-options.php (added)
-
tags/2.1.0/includes/migration/strategies/class-bare-url-strategy.php (modified) (1 diff)
-
tags/2.1.0/includes/migration/strategies/class-gutenberg-embed-strategy.php (modified) (3 diffs)
-
tags/2.1.0/includes/migration/strategies/class-iframe-strategy.php (modified) (2 diffs)
-
tags/2.1.0/includes/migration/strategies/class-vimeo-shortcode-strategy.php (modified) (1 diff)
-
tags/2.1.0/includes/migration/strategies/class-wp-embed-shortcode-strategy.php (modified) (1 diff)
-
tags/2.1.0/includes/migration/strategies/class-wpbakery-strategy.php (modified) (4 diffs)
-
tags/2.1.0/livid.php (modified) (2 diffs)
-
tags/2.1.0/readme.txt (modified) (5 diffs)
-
tags/2.1.0/vendor/composer/autoload_classmap.php (modified) (2 diffs)
-
tags/2.1.0/vendor/composer/autoload_static.php (modified) (2 diffs)
-
tags/2.1.0/vendor/composer/installed.php (modified) (2 diffs)
-
trunk/CHANGELOG.md (modified) (1 diff)
-
trunk/README.md (modified) (8 diffs)
-
trunk/assets/js/livid-admin.js (modified) (1 diff)
-
trunk/assets/js/livid-avada-native.js (added)
-
trunk/assets/js/livid-avada-player.js (added)
-
trunk/blocks/video/block.json (modified) (1 diff)
-
trunk/blocks/video/index.asset.php (modified) (1 diff)
-
trunk/includes/avada (added)
-
trunk/includes/avada/class-bootstrap.php (added)
-
trunk/includes/avada/class-dynamic-audit.php (added)
-
trunk/includes/avada/class-dynamic-sources.php (added)
-
trunk/includes/avada/class-element-video.php (added)
-
trunk/includes/avada/class-legacy-layout-guard.php (added)
-
trunk/includes/avada/class-native-surfaces.php (added)
-
trunk/includes/avada/class-option-audit.php (added)
-
trunk/includes/avada/class-slider.php (added)
-
trunk/includes/avada/class-thumbnail.php (added)
-
trunk/includes/avada/video-preview.php (added)
-
trunk/includes/avada/video-view.js (added)
-
trunk/includes/class-admin.php (modified) (3 diffs)
-
trunk/includes/class-assets.php (added)
-
trunk/includes/class-diagnostics-report.php (modified) (4 diffs)
-
trunk/includes/class-iframe-renderer.php (modified) (3 diffs)
-
trunk/includes/class-plugin.php (modified) (3 diffs)
-
trunk/includes/migration/jobs/class-scan-job.php (modified) (3 diffs)
-
trunk/includes/migration/strategies/class-anchor-strategy.php (modified) (1 diff)
-
trunk/includes/migration/strategies/class-avada-attribute-strategy.php (added)
-
trunk/includes/migration/strategies/class-avada-code-strategy.php (added)
-
trunk/includes/migration/strategies/class-avada-legacy-meta-strategy.php (added)
-
trunk/includes/migration/strategies/class-avada-post-meta-strategy.php (added)
-
trunk/includes/migration/strategies/class-avada-slider-strategy.php (added)
-
trunk/includes/migration/strategies/class-avada-strategy.php (added)
-
trunk/includes/migration/strategies/class-avada-url-options.php (added)
-
trunk/includes/migration/strategies/class-bare-url-strategy.php (modified) (1 diff)
-
trunk/includes/migration/strategies/class-gutenberg-embed-strategy.php (modified) (3 diffs)
-
trunk/includes/migration/strategies/class-iframe-strategy.php (modified) (2 diffs)
-
trunk/includes/migration/strategies/class-vimeo-shortcode-strategy.php (modified) (1 diff)
-
trunk/includes/migration/strategies/class-wp-embed-shortcode-strategy.php (modified) (1 diff)
-
trunk/includes/migration/strategies/class-wpbakery-strategy.php (modified) (4 diffs)
-
trunk/livid.php (modified) (2 diffs)
-
trunk/readme.txt (modified) (5 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
-
livid-video-hosting/tags/2.1.0/CHANGELOG.md
r3755224 r3782631 1 1 # @livid/vimeo-migrator-wordpress 2 3 ## 2.1.0 4 5 ### Minor Changes 6 7 - ad2bdc5: Add an editable Livid Video element for Avada Builder with native layout controls, title/start settings, inherited click-to-load facades and Live Builder previews. Add Player.js playback handling for hidden/dynamic content and supported post/portfolio FlexSlider embeds, plus adapters for existing on-page iLightbox galleries and container backgrounds. 8 9 Migrate static Avada Vimeo elements, native lightbox/button/column/background URLs and numeric background IDs, encoded Code Block sources, and the modern `_fusion` post/portfolio and active Slider video fields. Support verified legacy `pyre_*` video fields only while Avada still reads them. Carry supported URL playback flags and start offsets. Include registered Avada library elements, saved templates, layout sections and Off Canvas records in scans. Preserve selected-occurrence locators, safe retries and immutable metadata backups. Keep the shared Vimeo SDK script while the rewritten source still contains unselected Vimeo iframes. 10 11 Render native dynamically bound Vimeo elements and container backgrounds when Avada resolves their source to a trusted Livid URL, preserving bindings and dynamic layout/title settings. Add unsampled, redacted audits of every Vimeo-bearing option record, Avada dynamic source binding and legacy video field excluded because a content layout may suppress it. Global options and arbitrary dynamic source fields remain audit-only; do not infer a template source owner from a rendered fallback. This adds the documented Avada surfaces, not complete Vimeo-provider parity. 12 13 Preserve saved URL playback options, skip inactive dynamically replaced fallback content, and protect encoded Code Block selections against content changes and reordering. Handle delayed player events and slider transitions without overriding a visitor's pause, replay completed videos on return, and respect disabled slideshow rotation. Custom bound lightboxes using global smart recognition must initialize after the adapter or reapply their recognition setting through its wrapped API. 2 14 3 15 ## 2.0.3 -
livid-video-hosting/tags/2.1.0/README.md
r3755224 r3782631 11 11 - **Elementor widget** — A first-class **Livid Video** widget, plus Livid URL support in the background Video Link control. 12 12 - **WPBakery element** — A **Livid Video** element and a general-purpose `[livid_video]` shortcode, plus Livid URL support in the row/section/column background video control. 13 - **Avada Builder** — An editable **Livid Video** element and `[fusion_livid_video]` shortcode, click-to-load previews, native on-page lightboxes, container backgrounds, and playback controls for supported post/portfolio FlexSlider embeds. Migration covers the static content and metadata fields listed below. 13 14 - **Bricks element** — A **Livid Video** element registered from the plugin (no child theme needed), plus Livid URL support in Bricks' background video and lightbox video controls and in the native Video element's **File URL** / dynamic-data source (including ACF values inside templates and popups), with Bricks' poster click-to-load, iframe title, builder preview and pause-on-popup-close behaviour matched. 14 15 - **Slider Revolution** — Livid as a video type in Slider Revolution 7 video layers and slide backgrounds, with full playback control (autoplay, loop, start/end, volume, mute, next-slide-on-end) driven over the embed's Player.js API. 15 16 - **LearnDash LMS** — Livid lesson and topic embeds work with LearnDash video progression, including resume tracking and completion at the natural end of playback. 16 17 - **Sensei LMS** — Livid iframes in lesson content support required-video completion, automatic lesson completion, and tab-away pausing through Sensei's progression hooks. Tested against Sensei 4.26.4. Course settings and per-block required/optional overrides are respected, including lessons with other supported video providers. Completion requires the player's natural `ended` event; looping videos do not complete lessons. This does not add support for Sensei interactive-video overlays or migrate Sensei-specific custom fields. 17 - **Vimeo Migration** — Scan post content, page-builder data (Elementor, WPBakery, Bricks), and LearnDash lesson/topic progression URLs for Vimeo embeds, select which to migrate via the Livid platform, and rewrite them in-place as background jobs.18 - **Vimeo Migration** — Scan post content, page-builder data (Elementor, WPBakery, Avada, Bricks), and LearnDash lesson/topic progression URLs for Vimeo embeds, select which to migrate via the Livid platform, and rewrite them in-place as background jobs. 18 19 19 20 ## Installation … … 25 26 ### Scope 26 27 27 The scanner searches across all public post types (posts, pages, CPTs) in `publish`, `draft`, `future`, `pending`, and `private` statuses. For each candidate post it reads these sources:28 29 - `wp_posts.post_content` — for the classic editor / Gutenberg formats (including WPBakery shortcodes).28 The scanner searches public post types (posts, pages, CPTs), plus the registered Avada content types `fusion_element`, `fusion_template`, `fusion_tb_section`, and `awb_off_canvas`, in `publish`, `draft`, `future`, `pending`, and `private` statuses. Other private post types are not added. For each candidate post it reads these sources: 29 30 - `wp_posts.post_content` — for the classic editor / Gutenberg formats, WPBakery elements, and supported Avada shortcode attributes. 30 31 - `wp_postmeta._elementor_data` — for pages built with Elementor. 31 32 - `wp_postmeta._bricks_page_content_2` — for pages built with Bricks. 33 - `wp_postmeta._fusion` — Avada's `video_url` lightbox URL, raw iframe HTML in `video`, and the active Vimeo `vimeo_id` on Avada Slider records. Other fields remain unchanged. 34 - Legacy `pyre_video_url`, `pyre_video`, and active slide `pyre_vimeo_id` — only when Avada still reads the legacy source. Any existing `_fusion` array, including an empty array, takes precedence. Content layouts can also suppress legacy metadata; those potentially inactive sources are excluded and reported for inspection. 32 35 - LearnDash's `lesson_video_url` setting — for lesson and topic video progression, read and written through LearnDash's public settings API. 33 36 34 It does **not** scan options, widgets (sidebars), or arbitrary post meta beyond the builders' data blobs.37 The migration scan does not rewrite global options, widgets, or arbitrary post meta beyond these fields. Diagnostics separately audits every Vimeo-bearing option record and every Avada global-settings leaf, without row or leaf sample limits. It also reports authored dynamic video bindings and their known source owners; it does not execute arbitrary callbacks or rewrite template fallbacks. 35 38 36 39 ### Embed Formats … … 47 50 | **Elementor widgets** | Video / HTML / Text Editor widgets containing Vimeo | `Elementor_Strategy` | 48 51 | **WPBakery elements** | `[vc_video]` links and Vimeo iframes in `[vc_raw_html]`/`[vc_raw_js]` blocks | `Wpbakery_Strategy` | 52 | **Avada Vimeo elements** | `[fusion_vimeo id="123" /]`, also accepting a Vimeo URL | `Avada_Strategy` | 53 | **Avada native URL controls** | Lightbox `video_url`, button/column `link`, container `video_url` | `Avada_Attribute_Strategy` | 54 | **Avada post/portfolio video fields** | `_fusion.video_url` and iframe sources in `_fusion.video` | `Avada_Post_Meta_Strategy` | 55 | **Avada Slider source** | Active slide `_fusion.type="vimeo"` with `vimeo_id` | `Avada_Slider_Strategy` | 56 | **Avada legacy video fields** | Active `pyre_video_url`, `pyre_video`, `pyre_vimeo_id` | `Avada_Legacy_Meta_Strategy` | 57 | **Avada encoded Code Blocks** | Base64 `fusion_code` payloads containing supported iframes, anchors, Vimeo elements or native video URL controls | `Avada_Code_Strategy` | 49 58 | **Bricks elements** | Video elements and Vimeo iframes in rich-text elements | `Bricks_Strategy` | 50 59 | **LearnDash progression** | Lesson/topic `lesson_video_url` setting | `Learndash_Video_Strategy` | … … 91 100 92 101 - **WPBakery** `[vc_video]` shortcodes are converted to `[livid_video]`; Vimeo iframes inside `[vc_raw_html]`/`[vc_raw_js]` blocks are swapped within the base64-encoded payload. 102 - **Avada** static `[fusion_vimeo]` shortcodes become `[fusion_livid_video url="…"]`. Native lightbox, button, column and background controls retain their original shortcode and receive a Livid URL. The `_fusion` strategy changes only the selected video field or iframe and snapshots the whole original option map before writeback. Selected duplicates have separate locators, changed source values produce conflicts, and retries recognize the exact replacement. Escaped shortcodes and dynamically bound source attributes are skipped; unrelated title or layout bindings remain intact. Encoded Code Block selections are rewritten inside their payload and retain native base64 storage. 93 103 - **Bricks elements** are rewritten by walking the serialized element list in `_bricks_page_content_2` and mutating the target element by its stable `id`. Video elements are converted to the first-class `livid-video` element (settings re-mapped, underscore-prefixed style settings preserved); rich-text elements keep their type but get their iframe `src` swapped. Signature-verified code elements are deliberately skipped. 94 104 - **LearnDash progression URLs** are replaced with the clean Livid `/embed/…` player URL through LearnDash's public settings API. Other progression settings and lesson content are untouched. Because LearnDash keys partial playback resume data by video URL, learners' in-progress playback positions reset for replaced videos; completed lesson/course records are not modified. … … 98 108 - An in-progress migration can be cancelled from the admin UI. Pending Action Scheduler jobs check a cancellation flag before executing. 99 109 - If the admin leaves the page mid-flow (after selection but before pickup), a "Resume" button appears on return. 110 111 ## Avada Builder 112 113 Add **Livid Video** in Avada Builder, or use `[fusion_livid_video url="https://livid.com/watch/VIDEO_ID" /]`. The element accepts Livid watch, video and embed URLs and has a Live Builder preview. Migration accepts numeric IDs and individual Vimeo URLs in static `[fusion_vimeo]` elements, including paired and self-closing forms nested inside containers and columns. 114 115 | Surface | Migration and playback support | 116 | --- | --- | 117 | Vimeo element | Converts to Livid Video while retaining dimensions, alignment, margins, responsive visibility, CSS class/ID, `title_attribute`, `start_time`, and supported autoplay/mute/loop parameters. | 118 | Video facade | Respects explicit `video_facade="on"` / `"off"` or Avada's inherited setting. Loads a Livid thumbnail and an accessible play button; the iframe is created on click. If the thumbnail is unavailable, the button remains usable. | 119 | Native lightbox links | Migrates `fusion_lightbox` video URLs and button/column links. Existing on-page galleries and native programmatic iLightbox URL/array calls retain captions, dimensions and navigation; Livid players mount for the active item and unload on change/close. Ordinary button/column links remain links. | 120 | Container background | Migrates Vimeo URLs and bare numeric Vimeo IDs in `fusion_builder_container.video_url`. Bound Livid sources are resolved through Avada before playback. Preserves the native container, image fallback and overlay, with cover sizing, mute, loop and aspect ratio controls. | 121 | Post/portfolio media | Migrates `_fusion.video_url` and iframe sources in `_fusion.video`. Supported `.full-video` / FlexSlider embeds receive Player.js controls for play/pause, slide changes, and natural ending. Active Slider `vimeo_id` fields and the three verified legacy `pyre_*` sources are scanned separately. | 122 | Dynamic sources | Native `fusion_vimeo` resolves its binding through Avada; a trusted Livid URL renders the Livid player with the binding unchanged. Non-source dynamic title/layout settings are retained. Arbitrary source fields and template fallbacks are not automatically rewritten. | 123 | Code Blocks | Decodes native base64 `fusion_code` payloads and migrates supported iframe, anchor and Fusion video sources independently. Rendered trusted Livid embed iframes receive playback lifecycle controls. Dynamically bound block content is audited rather than rewritten. | 124 | Reusable content | Scans supported elements in registered `fusion_element` library entries, `fusion_template` saved templates, `fusion_tb_section` layout sections and `awb_off_canvas` content, as well as public post types. | 125 126 Facade posters come from Livid's public oEmbed metadata, cached by WordPress for an hour (failed lookups for five minutes). Live Builder URL changes use an authenticated same-site metadata endpoint restricted to editors and supported Livid URLs. Preview playback remains available if a poster is missing. 127 128 Custom bound iLightBox galleries with global `smartRecognition: true` must initialize after `window.LividAvadaNative` is available. For an instance recovered after earlier initialization, reapply the setting through its adapter-wrapped `instance.setOption({ smartRecognition: true })`; the native API has no option getter, so existing custom global recognition cannot be recovered automatically. 129 130 The shared Player.js adapter accepts messages only from the matching iframe and trusted Livid origin. It reconnects after iframe loads, discovers dynamic renders, releases removed players, pauses hidden content, and coordinates supported FlexSlider playback. Native Modal and Off Canvas close events pause playback immediately, including during exit animations. Off Canvas opening rediscovers its content; backgrounds can resume after becoming visible, while ordinary videos wait for the visitor to play them again. An explicit user pause cancels background resume. 131 132 Native URL-field rewrites carry supported `autoplay`, `muted`, `loop`, `playsinline`, `dnt` and `transparent` flags, plus a positive start offset. Unsupported Vimeo query parameters are discarded. Explicit native background controls continue to determine autoplay, mute and loop for that container. 133 134 Diagnostics v4 adds `global_option_audit`, `avada_dynamic_sources` and `avada_legacy_layout_sources`. The option audit includes all Vimeo-matching rows, classifies cache/history/widget/settings records, and reports exact leaf paths and canonical public video references. Avada language settings, JSON and base64 values are inspected recursively. The dynamic audit reports exact element/attribute paths, known custom-field owners and video IDs, and distinguishes templates whose values depend on the rendering page. The legacy audit lists exact `pyre_*` owners and public video IDs excluded because a content layout or override filter may suppress the field. Global content sections take precedence; custom layout conditions depend on the rendering context, so discovery conservatively excludes legacy sources when such a content layout exists. Header/footer-only layouts do not cause this exclusion. The audit never invokes Avada's mutating metadata promotion or query-dependent layout resolver. Credentials, private URL query/hash values and full settings values are omitted; incomplete traversal or database errors are flagged. Discovery is separate from authorization to rewrite an option or source field. 135 136 Use Avada's native Code Block element for raw iframe HTML. On the tested site, placing a literal iframe inside a Text Block prevented Live Builder saves; the same full page saved with that iframe in an encoded Code Block. This integration does not alter Avada's save handler or encode authors' Text Block content. 137 138 Remaining limits: global options, widgets, arbitrary dynamic source fields/callbacks, and unrelated private post types are not automatically migrated. Context-dependent bindings stay intact and require inspection of the actual source record. Malformed encoded payloads and dynamically replaced Code Block content are not rewritten. Vimeo-specific structured data, animation controls and arbitrary API parameters are not reproduced by Livid Video. Autoplay remains subject to browser policy and video availability. Keep the plugin active, clear external page caches after migration, and verify each surface used by the site. 139 140 The implementation follows [ThemeFusion's element extension example](https://github.com/Theme-Fusion/Fusion-Builder-Sample-Add-On/tree/front-end), [Avada's Vimeo options](https://classic.avada.com/documentation/vimeo-element/) and [its iLightbox integration](https://classic.avada.com/documentation/how-to-show-videos-in-lightbox/). The native source/markup contract was checked against Avada Builder 3.16.2 and Core 5.16.2. Automated tests cover migration, snapshots, rendering and player lifecycle behavior; they do not establish parity across every Avada release or third-party extension. 100 141 101 142 ## Sensei LMS completion … … 172 213 class-bootstrap.php # vc_map + [livid_video] shortcode registration 173 214 class-element-video.php # First-class Livid Video element 215 avada/ 216 class-bootstrap.php # Early builder mapping and playback assets 217 class-element-video.php # Livid Video shortcode, facade and controls 218 class-native-surfaces.php # Native container background integration 219 class-thumbnail.php # Authenticated Live Builder poster metadata 220 video-view.js # Live Builder values and custom view 221 video-preview.php # Live Builder preview template 174 222 bricks/ 175 223 class-bootstrap.php # Element registration, frontend script, builder i18n … … 207 255 class-elementor-strategy.php 208 256 class-wpbakery-strategy.php 257 class-avada-strategy.php 258 class-avada-attribute-strategy.php 259 class-avada-post-meta-strategy.php 260 class-avada-url-options.php 209 261 class-bricks-strategy.php 210 262 class-learndash-video-strategy.php … … 213 265 js/livid-admin.js # Admin UI: scan, popup coordinator, progress 214 266 js/livid-elementor-background.js # Livid URLs in Elementor background videos 267 js/livid-avada-player.js # Player.js lifecycle, facade and FlexSlider controls 268 js/livid-avada-native.js # Native on-page iLightbox and container backgrounds 215 269 js/livid-bricks-frontend.js # Livid URLs in Bricks background/lightbox videos (File URL videos are swapped server-side in bricks/class-bootstrap.php) 216 270 css/livid-admin.css # Admin styles -
livid-video-hosting/tags/2.1.0/assets/js/livid-admin.js
r3749371 r3782631 938 938 939 939 var advisoryHtml = '<div class="notice notice-info inline">' + 940 '<p>We check post content, supported Elementor/WPBakery/ Bricks data, and LearnDash video progression. Videos in sidebars, options, unsupported builders, or other custom fields may need to be updated by hand.</p>' +940 '<p>We check post content, supported Elementor/WPBakery/Avada/Bricks data, and LearnDash video progression. Videos in sidebars, options, unsupported builders, or other custom fields may need to be updated by hand.</p>' + 941 941 '</div>'; 942 942 $('#livid-advisory').html(advisoryHtml); -
livid-video-hosting/tags/2.1.0/blocks/video/block.json
r3755224 r3782631 3 3 "apiVersion": 3, 4 4 "name": "livid/video", 5 "version": "2. 0.3",5 "version": "2.1.0", 6 6 "title": "Livid Video", 7 7 "category": "embed", -
livid-video-hosting/tags/2.1.0/blocks/video/index.asset.php
r3755224 r3782631 10 10 'wp-server-side-render', 11 11 ), 12 'version' => '2. 0.3',12 'version' => '2.1.0', 13 13 ); -
livid-video-hosting/tags/2.1.0/includes/class-admin.php
r3755224 r3782631 84 84 LIVID_PLUGIN_URL . 'assets/js/livid-admin.js', 85 85 [ 'jquery' ], 86 LIVID_VERSION,86 Assets::version( 'assets/js/livid-admin.js' ), 87 87 true 88 88 ); … … 92 92 LIVID_PLUGIN_URL . 'assets/css/livid-admin.css', 93 93 [], 94 LIVID_VERSION94 Assets::version( 'assets/css/livid-admin.css' ) 95 95 ); 96 96 … … 146 146 147 147 <div class="livid-scope-notice"> 148 <p><strong>What we check:</strong> We look for Vimeo in post and page content, supported Elementor/WPBakery/ Bricks data, and LearnDash lesson/topic video progression. We don’t look in sidebars, footers, options, or other custom fields—if you use those, you may need to update them yourself.</p>148 <p><strong>What we check:</strong> We look for Vimeo in post and page content, supported Elementor/WPBakery/Avada/Bricks data, and LearnDash lesson/topic video progression. Avada coverage includes saved templates, elements, layout sections, Off Canvas content, Code Blocks, and supported video metadata and Slider fields. Diagnostics also audit Avada dynamic sources and global settings; those sources and unrelated custom fields may need manual updates.</p> 149 149 </div> 150 150 -
livid-video-hosting/tags/2.1.0/includes/class-diagnostics-report.php
r3749371 r3782631 71 71 '_about' => self::about(), 72 72 'meta' => [ 73 'report_version' => 3,73 'report_version' => 4, 74 74 'generated_at_gmt' => gmdate( 'c' ), 75 75 'plugin_version' => defined( 'LIVID_VERSION' ) ? LIVID_VERSION : 'unknown', … … 84 84 'livid_blocks' => $this->livid_blocks(), 85 85 'strategy_inputs' => $this->strategy_inputs( $sweep, $breakdown ), 86 'global_option_audit' => ( new \Livid\Avada\Option_Audit( $this->wpdb ) )->build(), 87 'avada_dynamic_sources' => \Livid\Avada\Dynamic_Audit::build( $this->wpdb ), 88 'avada_legacy_layout_sources' => \Livid\Avada\Legacy_Layout_Guard::audit( $this->wpdb ), 86 89 ]; 87 90 } … … 102 105 'A few longer excerpts (up to ~3,200 characters for structured fields) of the embed code / field around each "vimeo" reference, so we can build the fix without asking you for more.', 103 106 'A count of Livid video blocks already placed on the site, split by whether each block has a video URL set — so we can spot blocks that were added but never given a URL (which render nothing).', 107 'Every Vimeo-matching option record and Avada global-settings leaf: option name, classification, exact field path, encoding, and public video ID or collection path. Private URL hashes and query strings are omitted; the settings values themselves are never included.', 104 108 ], 105 109 'what_we_do_not_collect' => [ … … 204 208 'Tutor LMS' => [ 'tutor/' ], 205 209 'WPBakery' => [ 'js_composer/', 'js_composer_salient/' ], 210 'Avada' => [ 'avada', 'fusion-builder/', 'fusion-core/' ], 206 211 'Divi' => [ 'divi', 'et_builder', 'elegant' ], 207 212 'Beaver Builder' => [ 'bb-plugin/', 'fl-builder' ], -
livid-video-hosting/tags/2.1.0/includes/class-iframe-renderer.php
r3749114 r3782631 119 119 } 120 120 121 /** Public oEmbed poster, cached separately from long-lived title/dimensions. */ 122 public static function thumbnail( string $video_id, string $web_url = '' ): ?string { 123 $web_url = $web_url !== '' ? rtrim( $web_url, '/' ) : Config::web_url(); 124 $key = 'livid_thumbnail_' . md5( $web_url . '|' . $video_id ); 125 $cached = get_transient( $key ); 126 if ( is_string( $cached ) ) { 127 return $cached !== '' ? $cached : null; 128 } 129 $meta = self::fetch_oembed_meta( $video_id, $web_url ); 130 $thumbnail = $meta['thumbnail'] ?? ''; 131 // Thumbnail URLs can change independently of a video's dimensions. 132 set_transient( $key, $thumbnail, $thumbnail !== '' ? HOUR_IN_SECONDS : 300 ); 133 return $thumbnail !== '' ? $thumbnail : null; 134 } 135 121 136 /** 122 137 * Cached oEmbed metadata (ratio, title) per video and origin. Dimensions … … 136 151 } 137 152 138 $meta = self::fetch_oembed_meta( $video_id, $web_url ); 139 140 set_transient( $cache_key, $meta ?? [], $meta ? MONTH_IN_SECONDS : HOUR_IN_SECONDS ); 141 142 return $meta ?? []; 153 $meta = self::fetch_oembed_meta( $video_id, $web_url ) ?? []; 154 // Posters have their own cache. A poster alone must not turn missing 155 // title/dimensions into a successful, month-long metadata cache entry. 156 unset( $meta['thumbnail'] ); 157 158 set_transient( $cache_key, $meta, $meta ? MONTH_IN_SECONDS : HOUR_IN_SECONDS ); 159 160 return $meta; 143 161 } 144 162 … … 175 193 $meta['title'] = trim( wp_strip_all_tags( $data['title'] ) ); 176 194 } 195 if ( isset( $data['thumbnail_url'] ) && is_string( $data['thumbnail_url'] ) ) { 196 $thumbnail = trim( $data['thumbnail_url'] ); 197 $parts = wp_parse_url( $thumbnail ); 198 if ( is_array( $parts ) && isset( $parts['host'], $parts['scheme'] ) 199 && in_array( strtolower( $parts['scheme'] ), [ 'http', 'https' ], true ) 200 && ! isset( $parts['user'] ) && ! isset( $parts['pass'] ) 201 && ! preg_match( '/[\x00-\x20]/', $thumbnail ) 202 ) { 203 $meta['thumbnail'] = $thumbnail; 204 } 205 } 177 206 178 207 return $meta; -
livid-video-hosting/tags/2.1.0/includes/class-plugin.php
r3749371 r3782631 23 23 use Livid\Migration\Strategies\Anchor_Strategy; 24 24 use Livid\Migration\Strategies\Wpbakery_Strategy; 25 use Livid\Migration\Strategies\Avada_Strategy; 26 use Livid\Migration\Strategies\Avada_Attribute_Strategy; 27 use Livid\Migration\Strategies\Avada_Post_Meta_Strategy; 28 use Livid\Migration\Strategies\Avada_Code_Strategy; 29 use Livid\Migration\Strategies\Avada_Slider_Strategy; 30 use Livid\Migration\Strategies\Avada_Legacy_Meta_Strategy; 25 31 use Livid\Migration\Strategies\Bricks_Strategy; 26 32 use Livid\Migration\Strategies\Learndash_Video_Strategy; … … 42 48 43 49 public function __construct() { 50 // Avada maps its elements before WordPress init on some versions. 51 new \Livid\Avada\Bootstrap(); 52 44 53 $this->strategies = new Strategy_Registry(); 45 54 $this->register_strategies(); … … 120 129 $this->strategies->register( new Elementor_Strategy() ); 121 130 $this->strategies->register( new Wpbakery_Strategy() ); 131 $this->strategies->register( new Avada_Strategy() ); 132 $this->strategies->register( new Avada_Attribute_Strategy() ); 133 $this->strategies->register( new Avada_Post_Meta_Strategy() ); 134 $this->strategies->register( new Avada_Code_Strategy() ); 135 $this->strategies->register( new Avada_Slider_Strategy() ); 136 foreach ( [ 'video_url', 'video', 'vimeo_id' ] as $field ) { 137 $this->strategies->register( new Avada_Legacy_Meta_Strategy( $field ) ); 138 } 122 139 $this->strategies->register( new Bricks_Strategy() ); 123 140 $this->strategies->register( new Learndash_Video_Strategy() ); -
livid-video-hosting/tags/2.1.0/includes/migration/jobs/class-scan-job.php
r3749371 r3782631 40 40 $warnings['vimeography'] = 'Vimeography galleries store Vimeo sources in separate tables and are not migrated. Rebuild these galleries before closing your Vimeo account.'; 41 41 } 42 if ( stripos( implode( ' ', $plugins ), 'fusion-builder/' ) !== false || stripos( implode( ' ', $plugins ), 'fusion-core/' ) !== false ) { 43 $warnings['avada'] = 'Avada dynamic source fields, global settings and legacy fields potentially suppressed by content layouts are audited separately and are not automatically rewritten. Review global_option_audit, avada_dynamic_sources and avada_legacy_layout_sources in diagnostics before retiring Vimeo; runtime playback support does not establish source migration.'; 44 } 42 45 if ( defined( 'DISABLE_WP_CRON' ) && DISABLE_WP_CRON ) { 43 46 $warnings['cron'] = 'WP-Cron is disabled. Migration needs a working external cron or Action Scheduler runner; check Tools > Scheduled Actions if progress stops.'; … … 65 68 $public_types = get_post_types( [ 'public' => true ] ); 66 69 $exclude_types = [ 'revision', 'auto-draft', 'attachment', 'nav_menu_item' ]; 67 $include_types = array_diff( $public_types, $exclude_types ); 70 // Avada renders saved elements, layout sections and off-canvas content 71 // from private post types. Only include these known, registered types; 72 // unrelated private application data is outside the content scan. 73 $avada_types = array_intersect( 74 [ 'fusion_template', 'fusion_element', 'fusion_tb_section', 'awb_off_canvas' ], 75 get_post_types() 76 ); 77 $include_types = array_values( array_diff( array_unique( array_merge( $public_types, $avada_types ) ), $exclude_types ) ); 68 78 69 79 if ( empty( $include_types ) ) { … … 78 88 // whose base64 payload never contains the literal "vimeo" — become candidates. 79 89 $content_like = array_merge( 80 [ '%vimeo%', '%elementor-action%' ], 90 // Avada container backgrounds accept bare numeric Vimeo IDs; 91 // encoded Code Blocks carry no searchable plain provider name. 92 [ '%vimeo%', '%elementor-action%', '%[fusion_builder_container%', '%[fusion_code%' ], 81 93 array_map( 82 94 static function ( $marker ) { -
livid-video-hosting/tags/2.1.0/includes/migration/strategies/class-anchor-strategy.php
r3749371 r3782631 38 38 $tags = new \WP_HTML_Tag_Processor( $html ); 39 39 $urls = []; 40 while ( $tags->next_tag( 'a' ) ) { $urls[] = self::url( $tags ); } 40 $inactive = \Livid\Avada\Dynamic_Sources::inactive_html_indexes( $html, 'a' ); 41 while ( $tags->next_tag( 'a' ) ) { $urls[] = isset( $inactive[ count( $urls ) ] ) ? null : self::url( $tags ); } 41 42 return $urls; 42 43 } -
livid-video-hosting/tags/2.1.0/includes/migration/strategies/class-bare-url-strategy.php
r3749371 r3782631 121 121 122 122 $by_offset = []; 123 $inactive = \Livid\Avada\Dynamic_Sources::inactive_content_ranges( $post_content ); 123 124 foreach ( $found as $unit ) { 124 $unit['kind'] = $unit['kind'] ?? 'url';125 $unit['kind'] = \Livid\Avada\Dynamic_Sources::offset_is_inactive( $unit['offset'], $inactive ) ? 'inactive' : ( $unit['kind'] ?? 'url' ); 125 126 $by_offset[ $unit['offset'] ] = $unit; 126 127 } -
livid-video-hosting/tags/2.1.0/includes/migration/strategies/class-gutenberg-embed-strategy.php
r3749114 r3782631 28 28 } 29 29 30 $units = self:: embed_units( parse_blocks( $post_content ));30 $units = self::active_embed_units( parse_blocks( $post_content ), $post_content ); 31 31 $urls = array_map( [ self::class, 'unit_fingerprint' ], $units ); 32 32 $matches = []; … … 70 70 71 71 $blocks = parse_blocks( $post_content ); 72 $units = self:: embed_units( $blocks);72 $units = self::active_embed_units( $blocks, $post_content ); 73 73 74 74 $target = Unit_Locator::resolve( … … 141 141 } 142 142 } 143 return $units; 144 } 145 146 private static function active_embed_units( array $blocks, string $content ): array { 147 $units = self::embed_units( $blocks ); 148 $inactive = \Livid\Avada\Dynamic_Sources::inactive_block_indexes( $content, 'core/embed' ); 149 $index = 0; 150 foreach ( $units as &$unit ) { 151 if ( isset( $inactive[ $index++ ] ) ) { $unit['url'] = ''; } 152 } 153 unset( $unit ); 143 154 return $units; 144 155 } -
livid-video-hosting/tags/2.1.0/includes/migration/strategies/class-iframe-strategy.php
r3749114 r3782631 83 83 $new_src = self::transfer_universal_params( $src, $context->get_livid_player_url() ); 84 84 $processor->set_attribute( 'src', $new_src ); 85 return self::strip_vimeo_player_script( $processor->get_updated_html() ); 85 $updated = $processor->get_updated_html(); 86 // An unselected Vimeo player may still rely on its SDK. Only 87 // remove the shared script after the final Vimeo iframe moves. 88 foreach ( self::iframe_srcs( $updated, true ) as $remaining_src ) { 89 if ( is_string( $remaining_src ) && Vimeo_Url_Parser::extract_id( $remaining_src ) !== null ) { 90 return $updated; 91 } 92 } 93 return self::strip_vimeo_player_script( $updated ); 86 94 } 87 95 $index++; … … 94 102 * @return array<int, string|null> src of every iframe, in document order. 95 103 */ 96 private static function iframe_srcs( string $html ): array {104 private static function iframe_srcs( string $html, bool $include_inactive = false ): array { 97 105 $srcs = []; 106 $inactive = $include_inactive ? [] : \Livid\Avada\Dynamic_Sources::inactive_html_indexes( $html, 'iframe' ); 98 107 $processor = new \WP_HTML_Tag_Processor( $html ); 99 108 while ( $processor->next_tag( 'iframe' ) ) { 100 109 $src = $processor->get_attribute( 'src' ); 101 $srcs[] = is_string( $src ) ? $src : null;110 $srcs[] = ! isset( $inactive[ count( $srcs ) ] ) && is_string( $src ) ? $src : null; 102 111 } 103 112 return $srcs; -
livid-video-hosting/tags/2.1.0/includes/migration/strategies/class-vimeo-shortcode-strategy.php
r3749114 r3782631 127 127 return $a['offset'] <=> $b['offset']; 128 128 } ); 129 $inactive = \Livid\Avada\Dynamic_Sources::inactive_content_ranges( $post_content ); 130 foreach ( $units as &$unit ) { 131 if ( \Livid\Avada\Dynamic_Sources::offset_is_inactive( $unit['offset'], $inactive ) ) { 132 $unit['kind'] = 'inactive'; 133 $unit['vimeo_id'] = ''; 134 } 135 } 136 unset( $unit ); 129 137 return array_values( $units ); 130 138 } -
livid-video-hosting/tags/2.1.0/includes/migration/strategies/class-wp-embed-shortcode-strategy.php
r3749114 r3782631 95 95 } 96 96 $units = []; 97 $inactive = \Livid\Avada\Dynamic_Sources::inactive_content_ranges( $post_content ); 97 98 foreach ( $all[2] as $m ) { 98 $units[] = [ 'offset' => $m[1], 'url' => $m[0] ];99 $units[] = [ 'offset' => $m[1], 'url' => \Livid\Avada\Dynamic_Sources::offset_is_inactive( $m[1], $inactive ) ? '' : $m[0] ]; 99 100 } 100 101 return $units; -
livid-video-hosting/tags/2.1.0/includes/migration/strategies/class-wpbakery-strategy.php
r3749114 r3782631 176 176 177 177 $counts = []; 178 $inactive = \Livid\Avada\Dynamic_Sources::inactive_content_ranges( $post_content ); 178 179 foreach ( $all as $m ) { 179 180 // Escaped shortcode: [[vc_video]] renders literally — skip. … … 186 187 $tag = $m[2][0]; 187 188 $n = $counts[ $tag ] ?? 0; 189 $is_inactive = \Livid\Avada\Dynamic_Sources::offset_is_inactive( $offset, $inactive ); 188 190 189 191 $counts[ $tag ] = $n + 1; … … 199 201 'offset' => $offset, 200 202 'text' => $full, 201 'link' => $ link,203 'link' => $is_inactive ? '' : $link, 202 204 'src' => null, 203 205 'iframe_index' => null, … … 222 224 'text' => $full, 223 225 'link' => '', 224 'src' => is_string( $src ) ? $src : null,226 'src' => ! $is_inactive && is_string( $src ) ? $src : null, 225 227 'iframe_index' => $idx, 226 228 ]; -
livid-video-hosting/tags/2.1.0/livid.php
r3755224 r3782631 3 3 * Plugin Name: Livid - Video Hosting 4 4 * Description: Embed Livid videos and migrate from Vimeo to Livid 5 * Version: 2. 0.35 * Version: 2.1.0 6 6 * Requires at least: 6.5 7 7 * Requires PHP: 7.4 … … 18 18 define( 'LIVID_PLUGIN_DIR', plugin_dir_path( __FILE__ ) ); 19 19 define( 'LIVID_PLUGIN_URL', plugin_dir_url( __FILE__ ) ); 20 define( 'LIVID_VERSION', '2. 0.3' );20 define( 'LIVID_VERSION', '2.1.0' ); 21 21 22 22 require_once LIVID_PLUGIN_DIR . 'vendor/autoload.php'; -
livid-video-hosting/tags/2.1.0/readme.txt
r3755224 r3782631 4 4 Tested up to: 7.1 5 5 Requires PHP: 7.4 6 Stable tag: 2. 0.36 Stable tag: 2.1.0 7 7 License: MIT 8 8 License URI: https://opensource.org/licenses/MIT … … 21 21 22 22 * **Automatic embeds** — Paste any livid.com URL and it auto-embeds 23 * **Page builder ready** — Native Livid Video elements for Elementor, WPBakery, and Bricks, a Livid video type in Slider Revolution, plus a `[livid_video]` shortcode 23 * **Page builder ready** — Native Livid Video elements for Elementor, WPBakery, Avada Builder, and Bricks, a Livid video type in Slider Revolution, plus a `[livid_video]` shortcode 24 * **Avada playback** — Click-to-load previews, existing on-page iLightbox galleries, container video backgrounds, and playback controls for supported post/portfolio FlexSlider embeds 24 25 * **Sensei LMS ready** — Required-video completion, automatic lesson completion, and tab-away pausing; repeated required Livid embeds are tracked separately and mixed-provider lessons wait for all required videos 25 26 * **LearnDash ready** — Livid lesson and topic embeds support LearnDash video progression, resume tracking, and completion 26 * **Supported-format scanning** — Finds Vimeo iframes, Gutenberg embed blocks, bare URLs, `[embed]` and `[vimeo]` shortcodes, Elementor widgets, WPBakery elements, Bricks elements, and LearnDash lesson/topic progression URLs27 * **Supported-format scanning** — Finds Vimeo iframes, Gutenberg embed blocks, bare URLs, `[embed]` and `[vimeo]` shortcodes, Elementor widgets, WPBakery elements, supported Avada elements and video fields, Bricks elements, and LearnDash lesson/topic progression URLs 27 28 * **Background processing** — Scan and migration run as Action Scheduler jobs so they won't time out on large sites 28 29 * **Safe replacement** — Only replaces the specific videos you select through the Livid migration popup … … 41 42 = Scope = 42 43 43 Migration scans and rewrites `post_content`, supported page-builder data for Elementor (`_elementor_data`) and Bricks (`_bricks_page_content_2`), and LearnDash's `lesson_video_url` setting for lessons/topics. Options, widget content, theme settings,and other post meta are not modified.44 Migration scans and rewrites `post_content`, supported page-builder data for Elementor (`_elementor_data`) and Bricks (`_bricks_page_content_2`), Avada's `_fusion.video_url`, iframe sources in `_fusion.video`, active Slider `vimeo_id` fields and their verified legacy `pyre_*` equivalents, and LearnDash's `lesson_video_url` setting for lessons/topics. It includes public post types and registered Avada saved elements, templates, layout sections and Off Canvas records, in published, scheduled, draft, pending and private statuses. Global theme options, widget content and other post meta are not modified. 44 45 45 46 == Installation == … … 67 68 = What embed formats are supported? = 68 69 69 Gutenberg embed blocks, raw iframes, bare Vimeo URLs (auto-embeds), `[embed]` and `[vimeo]` shortcodes, Elementor widgets, WPBakery elements (both `[vc_video]` links and Vimeo iframes inside raw-HTML blocks), Bricks elements (Video elements and Vimeo iframes inside rich-text elements), and LearnDash lesson/topic video-progression URLs. 70 Gutenberg embed blocks, raw iframes, bare Vimeo URLs (auto-embeds), `[embed]` and `[vimeo]` shortcodes, Elementor widgets, WPBakery elements (both `[vc_video]` links and Vimeo iframes inside raw-HTML blocks), supported Avada static elements and post/portfolio video fields, Bricks elements (Video elements and Vimeo iframes inside rich-text elements), and LearnDash lesson/topic video-progression URLs. 71 72 = Does Avada Builder support Livid? = 73 74 Add a Livid Video element in Avada Builder or use `[fusion_livid_video url="https://livid.com/watch/VIDEO_ID" /]`. The element supports a Live Builder preview, native layout settings, accessible title, start time, autoplay, mute and loop. Video Facade follows the element's on/off setting or Avada's default and shows a Livid thumbnail with a play button before loading the iframe. 75 76 Migration covers static `[fusion_vimeo]` elements, Lightbox video URLs, button/column links, container video URLs and numeric Vimeo IDs, supported sources in encoded Code Blocks, modern `_fusion` post/portfolio and active Slider video fields, and the verified legacy `pyre_*` equivalents when still active. Existing on-page iLightbox galleries keep their groups, captions and navigation; background videos keep the container layout, cover sizing, mute and loop controls. Supported post/portfolio FlexSlider embeds use Player.js for playback and slide changes. Registered `fusion_element`, `fusion_template`, `fusion_tb_section` and `awb_off_canvas` content is scanned too. Metadata edits have an immutable pre-write snapshot. 77 78 Native dynamic Vimeo elements and container backgrounds can render a Livid URL returned by Avada’s resolver while retaining the source binding. Diagnostics reports all Vimeo-bearing option records and Avada dynamic video bindings, with exact field paths and known owners; private tokens and full setting values are omitted. Legacy pyre video fields are excluded and audited when a content layout or override filter could suppress them; the background scanner does not execute Avada's context-dependent layout resolver or metadata promotion. Global options, widgets, arbitrary dynamic source fields/callbacks, malformed encoded blocks and unrelated private post types are not automatically migrated. Templates may resolve a different source on each page and need inspection of that actual source. Native programmatic iLightbox URL/array calls are supported. Modal/Off Canvas close events pause playback immediately, with visibility checks for hidden content. Vimeo-specific structured data, animations and arbitrary API options are not reproduced. The integration was checked against Builder 3.16.2 and Core 5.16.2 and does not claim complete Avada parity. Keep the plugin active and verify the surfaces used by your site after migration. 79 80 Custom bound iLightBox galleries using global `smartRecognition: true` must initialize after `window.LividAvadaNative` is available, or reapply the setting through the adapter-wrapped `instance.setOption({ smartRecognition: true })`. The native API cannot expose a custom gallery's earlier recognition setting. 70 81 71 82 = How do I enable Sensei video completion? = … … 88 99 89 100 == External Services == 90 This plugin interacts with Livid in t woways:101 This plugin interacts with Livid in these ways: 91 102 1. Video migration 92 103 When you initiate a migration, the plugin sends a listing of Vimeo videos found on your site along with basic information about the pages they appear on. This is necessary so that Livid can match the Vimeo videos on your site to the ones you have uploaded to your Livid account. No data is sent unless you actively start a migration. 93 104 2. oEmbed provider 94 105 This plugin registers Livid as an oEmbed provider in WordPress. When a Livid video URL is embedded in a post or page, WordPress will make a request to Livid's oEmbed endpoint to retrieve embed information (such as the video title and player HTML). This happens whenever a post containing a Livid embed is edited or its embed cache is refreshed. 95 Both interactions are in line with Livid's [terms of service](https://support.livid.com/article/18-livid-terms-of-service) and [privacy policy](https://support.livid.com/article/17-livid-privacy-policy). 106 3. Video playback and previews 107 The visitor's browser loads Livid players and preview images where they are embedded. For Avada click-to-load facades, WordPress requests public oEmbed thumbnail metadata and caches successful lookups for an hour and failures for five minutes. The browser loads the returned preview image before the player is opened; the player iframe is created when the visitor clicks the play button. Live Builder preview lookups use an authenticated same-site endpoint. 108 These interactions are in line with Livid's [terms of service](https://support.livid.com/article/18-livid-terms-of-service) and [privacy policy](https://support.livid.com/article/17-livid-privacy-policy). 96 109 97 110 == Changelog == 111 112 = 2.1.0 = 113 * Add an editable Livid Video element for Avada Builder with native layout controls, title/start settings, inherited click-to-load facades and Live Builder previews. Add Player.js playback handling for hidden/dynamic content and supported post/portfolio FlexSlider embeds, plus adapters for existing on-page iLightbox galleries and container backgrounds. Migrate static Avada Vimeo elements, native lightbox/button/column/background URLs and numeric background IDs, encoded Code Block sources, and the modern `_fusion` post/portfolio and active Slider video fields. Support verified legacy `pyre_*` video fields only while Avada still reads them. Carry supported URL playback flags and start offsets. Include registered Avada library elements, saved templates, layout sections and Off Canvas records in scans. Preserve selected-occurrence locators, safe retries and immutable metadata backups. Keep the shared Vimeo SDK script while the rewritten source still contains unselected Vimeo iframes. Render native dynamically bound Vimeo elements and container backgrounds when Avada resolves their source to a trusted Livid URL, preserving bindings and dynamic layout/title settings. Add unsampled, redacted audits of every Vimeo-bearing option record, Avada dynamic source binding and legacy video field excluded because a content layout may suppress it. Global options and arbitrary dynamic source fields remain audit-only; do not infer a template source owner from a rendered fallback. This adds the documented Avada surfaces, not complete Vimeo-provider parity. Preserve saved URL playback options, skip inactive dynamically replaced fallback content, and protect encoded Code Block selections against content changes and reordering. Handle delayed player events and slider transitions without overriding a visitor's pause, replay completed videos on return, and respect disabled slideshow rotation. Custom bound lightboxes using global smart recognition must initialize after the adapter or reapply their recognition setting through its wrapped API. 98 114 99 115 = 2.0.3 = -
livid-video-hosting/tags/2.1.0/vendor/composer/autoload_classmap.php
r3755224 r3782631 9 9 'Composer\\InstalledVersions' => $vendorDir . '/composer/InstalledVersions.php', 10 10 'Livid\\Admin' => $baseDir . '/includes/class-admin.php', 11 'Livid\\Assets' => $baseDir . '/includes/class-assets.php', 12 'Livid\\Avada\\Bootstrap' => $baseDir . '/includes/avada/class-bootstrap.php', 13 'Livid\\Avada\\Dynamic_Audit' => $baseDir . '/includes/avada/class-dynamic-audit.php', 14 'Livid\\Avada\\Dynamic_Sources' => $baseDir . '/includes/avada/class-dynamic-sources.php', 15 'Livid\\Avada\\Element_Video' => $baseDir . '/includes/avada/class-element-video.php', 16 'Livid\\Avada\\Legacy_Layout_Guard' => $baseDir . '/includes/avada/class-legacy-layout-guard.php', 17 'Livid\\Avada\\Native_Surfaces' => $baseDir . '/includes/avada/class-native-surfaces.php', 18 'Livid\\Avada\\Option_Audit' => $baseDir . '/includes/avada/class-option-audit.php', 19 'Livid\\Avada\\Slider' => $baseDir . '/includes/avada/class-slider.php', 20 'Livid\\Avada\\Thumbnail' => $baseDir . '/includes/avada/class-thumbnail.php', 11 21 'Livid\\Block' => $baseDir . '/includes/class-block.php', 12 22 'Livid\\Bricks\\Bootstrap' => $baseDir . '/includes/bricks/class-bootstrap.php', … … 40 50 'Livid\\Migration\\Strategies\\Acf_Field_Strategy' => $baseDir . '/includes/migration/strategies/class-acf-field-strategy.php', 41 51 'Livid\\Migration\\Strategies\\Anchor_Strategy' => $baseDir . '/includes/migration/strategies/class-anchor-strategy.php', 52 'Livid\\Migration\\Strategies\\Avada_Attribute_Strategy' => $baseDir . '/includes/migration/strategies/class-avada-attribute-strategy.php', 53 'Livid\\Migration\\Strategies\\Avada_Code_Strategy' => $baseDir . '/includes/migration/strategies/class-avada-code-strategy.php', 54 'Livid\\Migration\\Strategies\\Avada_Legacy_Meta_Strategy' => $baseDir . '/includes/migration/strategies/class-avada-legacy-meta-strategy.php', 55 'Livid\\Migration\\Strategies\\Avada_Post_Meta_Strategy' => $baseDir . '/includes/migration/strategies/class-avada-post-meta-strategy.php', 56 'Livid\\Migration\\Strategies\\Avada_Slider_Strategy' => $baseDir . '/includes/migration/strategies/class-avada-slider-strategy.php', 57 'Livid\\Migration\\Strategies\\Avada_Strategy' => $baseDir . '/includes/migration/strategies/class-avada-strategy.php', 58 'Livid\\Migration\\Strategies\\Avada_Url_Options' => $baseDir . '/includes/migration/strategies/class-avada-url-options.php', 42 59 'Livid\\Migration\\Strategies\\Bare_Url_Strategy' => $baseDir . '/includes/migration/strategies/class-bare-url-strategy.php', 43 60 'Livid\\Migration\\Strategies\\Bricks_Strategy' => $baseDir . '/includes/migration/strategies/class-bricks-strategy.php', -
livid-video-hosting/tags/2.1.0/vendor/composer/autoload_static.php
r3755224 r3782631 10 10 'Composer\\InstalledVersions' => __DIR__ . '/..' . '/composer/InstalledVersions.php', 11 11 'Livid\\Admin' => __DIR__ . '/../..' . '/includes/class-admin.php', 12 'Livid\\Assets' => __DIR__ . '/../..' . '/includes/class-assets.php', 13 'Livid\\Avada\\Bootstrap' => __DIR__ . '/../..' . '/includes/avada/class-bootstrap.php', 14 'Livid\\Avada\\Dynamic_Audit' => __DIR__ . '/../..' . '/includes/avada/class-dynamic-audit.php', 15 'Livid\\Avada\\Dynamic_Sources' => __DIR__ . '/../..' . '/includes/avada/class-dynamic-sources.php', 16 'Livid\\Avada\\Element_Video' => __DIR__ . '/../..' . '/includes/avada/class-element-video.php', 17 'Livid\\Avada\\Legacy_Layout_Guard' => __DIR__ . '/../..' . '/includes/avada/class-legacy-layout-guard.php', 18 'Livid\\Avada\\Native_Surfaces' => __DIR__ . '/../..' . '/includes/avada/class-native-surfaces.php', 19 'Livid\\Avada\\Option_Audit' => __DIR__ . '/../..' . '/includes/avada/class-option-audit.php', 20 'Livid\\Avada\\Slider' => __DIR__ . '/../..' . '/includes/avada/class-slider.php', 21 'Livid\\Avada\\Thumbnail' => __DIR__ . '/../..' . '/includes/avada/class-thumbnail.php', 12 22 'Livid\\Block' => __DIR__ . '/../..' . '/includes/class-block.php', 13 23 'Livid\\Bricks\\Bootstrap' => __DIR__ . '/../..' . '/includes/bricks/class-bootstrap.php', … … 41 51 'Livid\\Migration\\Strategies\\Acf_Field_Strategy' => __DIR__ . '/../..' . '/includes/migration/strategies/class-acf-field-strategy.php', 42 52 'Livid\\Migration\\Strategies\\Anchor_Strategy' => __DIR__ . '/../..' . '/includes/migration/strategies/class-anchor-strategy.php', 53 'Livid\\Migration\\Strategies\\Avada_Attribute_Strategy' => __DIR__ . '/../..' . '/includes/migration/strategies/class-avada-attribute-strategy.php', 54 'Livid\\Migration\\Strategies\\Avada_Code_Strategy' => __DIR__ . '/../..' . '/includes/migration/strategies/class-avada-code-strategy.php', 55 'Livid\\Migration\\Strategies\\Avada_Legacy_Meta_Strategy' => __DIR__ . '/../..' . '/includes/migration/strategies/class-avada-legacy-meta-strategy.php', 56 'Livid\\Migration\\Strategies\\Avada_Post_Meta_Strategy' => __DIR__ . '/../..' . '/includes/migration/strategies/class-avada-post-meta-strategy.php', 57 'Livid\\Migration\\Strategies\\Avada_Slider_Strategy' => __DIR__ . '/../..' . '/includes/migration/strategies/class-avada-slider-strategy.php', 58 'Livid\\Migration\\Strategies\\Avada_Strategy' => __DIR__ . '/../..' . '/includes/migration/strategies/class-avada-strategy.php', 59 'Livid\\Migration\\Strategies\\Avada_Url_Options' => __DIR__ . '/../..' . '/includes/migration/strategies/class-avada-url-options.php', 43 60 'Livid\\Migration\\Strategies\\Bare_Url_Strategy' => __DIR__ . '/../..' . '/includes/migration/strategies/class-bare-url-strategy.php', 44 61 'Livid\\Migration\\Strategies\\Bricks_Strategy' => __DIR__ . '/../..' . '/includes/migration/strategies/class-bricks-strategy.php', -
livid-video-hosting/tags/2.1.0/vendor/composer/installed.php
r3755224 r3782631 2 2 'root' => array( 3 3 'name' => 'livid/livid-wordpress', 4 'pretty_version' => 'dev- dbba50ef9f273677ad15dc3385c455f1a4af24da',5 'version' => 'dev- dbba50ef9f273677ad15dc3385c455f1a4af24da',6 'reference' => ' dbba50ef9f273677ad15dc3385c455f1a4af24da',4 'pretty_version' => 'dev-1959aad0a9187c378a66944ee439bd418b491589', 5 'version' => 'dev-1959aad0a9187c378a66944ee439bd418b491589', 6 'reference' => '1959aad0a9187c378a66944ee439bd418b491589', 7 7 'type' => 'wordpress-plugin', 8 8 'install_path' => __DIR__ . '/../../', … … 12 12 'versions' => array( 13 13 'livid/livid-wordpress' => array( 14 'pretty_version' => 'dev- dbba50ef9f273677ad15dc3385c455f1a4af24da',15 'version' => 'dev- dbba50ef9f273677ad15dc3385c455f1a4af24da',16 'reference' => ' dbba50ef9f273677ad15dc3385c455f1a4af24da',14 'pretty_version' => 'dev-1959aad0a9187c378a66944ee439bd418b491589', 15 'version' => 'dev-1959aad0a9187c378a66944ee439bd418b491589', 16 'reference' => '1959aad0a9187c378a66944ee439bd418b491589', 17 17 'type' => 'wordpress-plugin', 18 18 'install_path' => __DIR__ . '/../../', -
livid-video-hosting/trunk/CHANGELOG.md
r3755224 r3782631 1 1 # @livid/vimeo-migrator-wordpress 2 3 ## 2.1.0 4 5 ### Minor Changes 6 7 - ad2bdc5: Add an editable Livid Video element for Avada Builder with native layout controls, title/start settings, inherited click-to-load facades and Live Builder previews. Add Player.js playback handling for hidden/dynamic content and supported post/portfolio FlexSlider embeds, plus adapters for existing on-page iLightbox galleries and container backgrounds. 8 9 Migrate static Avada Vimeo elements, native lightbox/button/column/background URLs and numeric background IDs, encoded Code Block sources, and the modern `_fusion` post/portfolio and active Slider video fields. Support verified legacy `pyre_*` video fields only while Avada still reads them. Carry supported URL playback flags and start offsets. Include registered Avada library elements, saved templates, layout sections and Off Canvas records in scans. Preserve selected-occurrence locators, safe retries and immutable metadata backups. Keep the shared Vimeo SDK script while the rewritten source still contains unselected Vimeo iframes. 10 11 Render native dynamically bound Vimeo elements and container backgrounds when Avada resolves their source to a trusted Livid URL, preserving bindings and dynamic layout/title settings. Add unsampled, redacted audits of every Vimeo-bearing option record, Avada dynamic source binding and legacy video field excluded because a content layout may suppress it. Global options and arbitrary dynamic source fields remain audit-only; do not infer a template source owner from a rendered fallback. This adds the documented Avada surfaces, not complete Vimeo-provider parity. 12 13 Preserve saved URL playback options, skip inactive dynamically replaced fallback content, and protect encoded Code Block selections against content changes and reordering. Handle delayed player events and slider transitions without overriding a visitor's pause, replay completed videos on return, and respect disabled slideshow rotation. Custom bound lightboxes using global smart recognition must initialize after the adapter or reapply their recognition setting through its wrapped API. 2 14 3 15 ## 2.0.3 -
livid-video-hosting/trunk/README.md
r3755224 r3782631 11 11 - **Elementor widget** — A first-class **Livid Video** widget, plus Livid URL support in the background Video Link control. 12 12 - **WPBakery element** — A **Livid Video** element and a general-purpose `[livid_video]` shortcode, plus Livid URL support in the row/section/column background video control. 13 - **Avada Builder** — An editable **Livid Video** element and `[fusion_livid_video]` shortcode, click-to-load previews, native on-page lightboxes, container backgrounds, and playback controls for supported post/portfolio FlexSlider embeds. Migration covers the static content and metadata fields listed below. 13 14 - **Bricks element** — A **Livid Video** element registered from the plugin (no child theme needed), plus Livid URL support in Bricks' background video and lightbox video controls and in the native Video element's **File URL** / dynamic-data source (including ACF values inside templates and popups), with Bricks' poster click-to-load, iframe title, builder preview and pause-on-popup-close behaviour matched. 14 15 - **Slider Revolution** — Livid as a video type in Slider Revolution 7 video layers and slide backgrounds, with full playback control (autoplay, loop, start/end, volume, mute, next-slide-on-end) driven over the embed's Player.js API. 15 16 - **LearnDash LMS** — Livid lesson and topic embeds work with LearnDash video progression, including resume tracking and completion at the natural end of playback. 16 17 - **Sensei LMS** — Livid iframes in lesson content support required-video completion, automatic lesson completion, and tab-away pausing through Sensei's progression hooks. Tested against Sensei 4.26.4. Course settings and per-block required/optional overrides are respected, including lessons with other supported video providers. Completion requires the player's natural `ended` event; looping videos do not complete lessons. This does not add support for Sensei interactive-video overlays or migrate Sensei-specific custom fields. 17 - **Vimeo Migration** — Scan post content, page-builder data (Elementor, WPBakery, Bricks), and LearnDash lesson/topic progression URLs for Vimeo embeds, select which to migrate via the Livid platform, and rewrite them in-place as background jobs.18 - **Vimeo Migration** — Scan post content, page-builder data (Elementor, WPBakery, Avada, Bricks), and LearnDash lesson/topic progression URLs for Vimeo embeds, select which to migrate via the Livid platform, and rewrite them in-place as background jobs. 18 19 19 20 ## Installation … … 25 26 ### Scope 26 27 27 The scanner searches across all public post types (posts, pages, CPTs) in `publish`, `draft`, `future`, `pending`, and `private` statuses. For each candidate post it reads these sources:28 29 - `wp_posts.post_content` — for the classic editor / Gutenberg formats (including WPBakery shortcodes).28 The scanner searches public post types (posts, pages, CPTs), plus the registered Avada content types `fusion_element`, `fusion_template`, `fusion_tb_section`, and `awb_off_canvas`, in `publish`, `draft`, `future`, `pending`, and `private` statuses. Other private post types are not added. For each candidate post it reads these sources: 29 30 - `wp_posts.post_content` — for the classic editor / Gutenberg formats, WPBakery elements, and supported Avada shortcode attributes. 30 31 - `wp_postmeta._elementor_data` — for pages built with Elementor. 31 32 - `wp_postmeta._bricks_page_content_2` — for pages built with Bricks. 33 - `wp_postmeta._fusion` — Avada's `video_url` lightbox URL, raw iframe HTML in `video`, and the active Vimeo `vimeo_id` on Avada Slider records. Other fields remain unchanged. 34 - Legacy `pyre_video_url`, `pyre_video`, and active slide `pyre_vimeo_id` — only when Avada still reads the legacy source. Any existing `_fusion` array, including an empty array, takes precedence. Content layouts can also suppress legacy metadata; those potentially inactive sources are excluded and reported for inspection. 32 35 - LearnDash's `lesson_video_url` setting — for lesson and topic video progression, read and written through LearnDash's public settings API. 33 36 34 It does **not** scan options, widgets (sidebars), or arbitrary post meta beyond the builders' data blobs.37 The migration scan does not rewrite global options, widgets, or arbitrary post meta beyond these fields. Diagnostics separately audits every Vimeo-bearing option record and every Avada global-settings leaf, without row or leaf sample limits. It also reports authored dynamic video bindings and their known source owners; it does not execute arbitrary callbacks or rewrite template fallbacks. 35 38 36 39 ### Embed Formats … … 47 50 | **Elementor widgets** | Video / HTML / Text Editor widgets containing Vimeo | `Elementor_Strategy` | 48 51 | **WPBakery elements** | `[vc_video]` links and Vimeo iframes in `[vc_raw_html]`/`[vc_raw_js]` blocks | `Wpbakery_Strategy` | 52 | **Avada Vimeo elements** | `[fusion_vimeo id="123" /]`, also accepting a Vimeo URL | `Avada_Strategy` | 53 | **Avada native URL controls** | Lightbox `video_url`, button/column `link`, container `video_url` | `Avada_Attribute_Strategy` | 54 | **Avada post/portfolio video fields** | `_fusion.video_url` and iframe sources in `_fusion.video` | `Avada_Post_Meta_Strategy` | 55 | **Avada Slider source** | Active slide `_fusion.type="vimeo"` with `vimeo_id` | `Avada_Slider_Strategy` | 56 | **Avada legacy video fields** | Active `pyre_video_url`, `pyre_video`, `pyre_vimeo_id` | `Avada_Legacy_Meta_Strategy` | 57 | **Avada encoded Code Blocks** | Base64 `fusion_code` payloads containing supported iframes, anchors, Vimeo elements or native video URL controls | `Avada_Code_Strategy` | 49 58 | **Bricks elements** | Video elements and Vimeo iframes in rich-text elements | `Bricks_Strategy` | 50 59 | **LearnDash progression** | Lesson/topic `lesson_video_url` setting | `Learndash_Video_Strategy` | … … 91 100 92 101 - **WPBakery** `[vc_video]` shortcodes are converted to `[livid_video]`; Vimeo iframes inside `[vc_raw_html]`/`[vc_raw_js]` blocks are swapped within the base64-encoded payload. 102 - **Avada** static `[fusion_vimeo]` shortcodes become `[fusion_livid_video url="…"]`. Native lightbox, button, column and background controls retain their original shortcode and receive a Livid URL. The `_fusion` strategy changes only the selected video field or iframe and snapshots the whole original option map before writeback. Selected duplicates have separate locators, changed source values produce conflicts, and retries recognize the exact replacement. Escaped shortcodes and dynamically bound source attributes are skipped; unrelated title or layout bindings remain intact. Encoded Code Block selections are rewritten inside their payload and retain native base64 storage. 93 103 - **Bricks elements** are rewritten by walking the serialized element list in `_bricks_page_content_2` and mutating the target element by its stable `id`. Video elements are converted to the first-class `livid-video` element (settings re-mapped, underscore-prefixed style settings preserved); rich-text elements keep their type but get their iframe `src` swapped. Signature-verified code elements are deliberately skipped. 94 104 - **LearnDash progression URLs** are replaced with the clean Livid `/embed/…` player URL through LearnDash's public settings API. Other progression settings and lesson content are untouched. Because LearnDash keys partial playback resume data by video URL, learners' in-progress playback positions reset for replaced videos; completed lesson/course records are not modified. … … 98 108 - An in-progress migration can be cancelled from the admin UI. Pending Action Scheduler jobs check a cancellation flag before executing. 99 109 - If the admin leaves the page mid-flow (after selection but before pickup), a "Resume" button appears on return. 110 111 ## Avada Builder 112 113 Add **Livid Video** in Avada Builder, or use `[fusion_livid_video url="https://livid.com/watch/VIDEO_ID" /]`. The element accepts Livid watch, video and embed URLs and has a Live Builder preview. Migration accepts numeric IDs and individual Vimeo URLs in static `[fusion_vimeo]` elements, including paired and self-closing forms nested inside containers and columns. 114 115 | Surface | Migration and playback support | 116 | --- | --- | 117 | Vimeo element | Converts to Livid Video while retaining dimensions, alignment, margins, responsive visibility, CSS class/ID, `title_attribute`, `start_time`, and supported autoplay/mute/loop parameters. | 118 | Video facade | Respects explicit `video_facade="on"` / `"off"` or Avada's inherited setting. Loads a Livid thumbnail and an accessible play button; the iframe is created on click. If the thumbnail is unavailable, the button remains usable. | 119 | Native lightbox links | Migrates `fusion_lightbox` video URLs and button/column links. Existing on-page galleries and native programmatic iLightbox URL/array calls retain captions, dimensions and navigation; Livid players mount for the active item and unload on change/close. Ordinary button/column links remain links. | 120 | Container background | Migrates Vimeo URLs and bare numeric Vimeo IDs in `fusion_builder_container.video_url`. Bound Livid sources are resolved through Avada before playback. Preserves the native container, image fallback and overlay, with cover sizing, mute, loop and aspect ratio controls. | 121 | Post/portfolio media | Migrates `_fusion.video_url` and iframe sources in `_fusion.video`. Supported `.full-video` / FlexSlider embeds receive Player.js controls for play/pause, slide changes, and natural ending. Active Slider `vimeo_id` fields and the three verified legacy `pyre_*` sources are scanned separately. | 122 | Dynamic sources | Native `fusion_vimeo` resolves its binding through Avada; a trusted Livid URL renders the Livid player with the binding unchanged. Non-source dynamic title/layout settings are retained. Arbitrary source fields and template fallbacks are not automatically rewritten. | 123 | Code Blocks | Decodes native base64 `fusion_code` payloads and migrates supported iframe, anchor and Fusion video sources independently. Rendered trusted Livid embed iframes receive playback lifecycle controls. Dynamically bound block content is audited rather than rewritten. | 124 | Reusable content | Scans supported elements in registered `fusion_element` library entries, `fusion_template` saved templates, `fusion_tb_section` layout sections and `awb_off_canvas` content, as well as public post types. | 125 126 Facade posters come from Livid's public oEmbed metadata, cached by WordPress for an hour (failed lookups for five minutes). Live Builder URL changes use an authenticated same-site metadata endpoint restricted to editors and supported Livid URLs. Preview playback remains available if a poster is missing. 127 128 Custom bound iLightBox galleries with global `smartRecognition: true` must initialize after `window.LividAvadaNative` is available. For an instance recovered after earlier initialization, reapply the setting through its adapter-wrapped `instance.setOption({ smartRecognition: true })`; the native API has no option getter, so existing custom global recognition cannot be recovered automatically. 129 130 The shared Player.js adapter accepts messages only from the matching iframe and trusted Livid origin. It reconnects after iframe loads, discovers dynamic renders, releases removed players, pauses hidden content, and coordinates supported FlexSlider playback. Native Modal and Off Canvas close events pause playback immediately, including during exit animations. Off Canvas opening rediscovers its content; backgrounds can resume after becoming visible, while ordinary videos wait for the visitor to play them again. An explicit user pause cancels background resume. 131 132 Native URL-field rewrites carry supported `autoplay`, `muted`, `loop`, `playsinline`, `dnt` and `transparent` flags, plus a positive start offset. Unsupported Vimeo query parameters are discarded. Explicit native background controls continue to determine autoplay, mute and loop for that container. 133 134 Diagnostics v4 adds `global_option_audit`, `avada_dynamic_sources` and `avada_legacy_layout_sources`. The option audit includes all Vimeo-matching rows, classifies cache/history/widget/settings records, and reports exact leaf paths and canonical public video references. Avada language settings, JSON and base64 values are inspected recursively. The dynamic audit reports exact element/attribute paths, known custom-field owners and video IDs, and distinguishes templates whose values depend on the rendering page. The legacy audit lists exact `pyre_*` owners and public video IDs excluded because a content layout or override filter may suppress the field. Global content sections take precedence; custom layout conditions depend on the rendering context, so discovery conservatively excludes legacy sources when such a content layout exists. Header/footer-only layouts do not cause this exclusion. The audit never invokes Avada's mutating metadata promotion or query-dependent layout resolver. Credentials, private URL query/hash values and full settings values are omitted; incomplete traversal or database errors are flagged. Discovery is separate from authorization to rewrite an option or source field. 135 136 Use Avada's native Code Block element for raw iframe HTML. On the tested site, placing a literal iframe inside a Text Block prevented Live Builder saves; the same full page saved with that iframe in an encoded Code Block. This integration does not alter Avada's save handler or encode authors' Text Block content. 137 138 Remaining limits: global options, widgets, arbitrary dynamic source fields/callbacks, and unrelated private post types are not automatically migrated. Context-dependent bindings stay intact and require inspection of the actual source record. Malformed encoded payloads and dynamically replaced Code Block content are not rewritten. Vimeo-specific structured data, animation controls and arbitrary API parameters are not reproduced by Livid Video. Autoplay remains subject to browser policy and video availability. Keep the plugin active, clear external page caches after migration, and verify each surface used by the site. 139 140 The implementation follows [ThemeFusion's element extension example](https://github.com/Theme-Fusion/Fusion-Builder-Sample-Add-On/tree/front-end), [Avada's Vimeo options](https://classic.avada.com/documentation/vimeo-element/) and [its iLightbox integration](https://classic.avada.com/documentation/how-to-show-videos-in-lightbox/). The native source/markup contract was checked against Avada Builder 3.16.2 and Core 5.16.2. Automated tests cover migration, snapshots, rendering and player lifecycle behavior; they do not establish parity across every Avada release or third-party extension. 100 141 101 142 ## Sensei LMS completion … … 172 213 class-bootstrap.php # vc_map + [livid_video] shortcode registration 173 214 class-element-video.php # First-class Livid Video element 215 avada/ 216 class-bootstrap.php # Early builder mapping and playback assets 217 class-element-video.php # Livid Video shortcode, facade and controls 218 class-native-surfaces.php # Native container background integration 219 class-thumbnail.php # Authenticated Live Builder poster metadata 220 video-view.js # Live Builder values and custom view 221 video-preview.php # Live Builder preview template 174 222 bricks/ 175 223 class-bootstrap.php # Element registration, frontend script, builder i18n … … 207 255 class-elementor-strategy.php 208 256 class-wpbakery-strategy.php 257 class-avada-strategy.php 258 class-avada-attribute-strategy.php 259 class-avada-post-meta-strategy.php 260 class-avada-url-options.php 209 261 class-bricks-strategy.php 210 262 class-learndash-video-strategy.php … … 213 265 js/livid-admin.js # Admin UI: scan, popup coordinator, progress 214 266 js/livid-elementor-background.js # Livid URLs in Elementor background videos 267 js/livid-avada-player.js # Player.js lifecycle, facade and FlexSlider controls 268 js/livid-avada-native.js # Native on-page iLightbox and container backgrounds 215 269 js/livid-bricks-frontend.js # Livid URLs in Bricks background/lightbox videos (File URL videos are swapped server-side in bricks/class-bootstrap.php) 216 270 css/livid-admin.css # Admin styles -
livid-video-hosting/trunk/assets/js/livid-admin.js
r3749371 r3782631 938 938 939 939 var advisoryHtml = '<div class="notice notice-info inline">' + 940 '<p>We check post content, supported Elementor/WPBakery/ Bricks data, and LearnDash video progression. Videos in sidebars, options, unsupported builders, or other custom fields may need to be updated by hand.</p>' +940 '<p>We check post content, supported Elementor/WPBakery/Avada/Bricks data, and LearnDash video progression. Videos in sidebars, options, unsupported builders, or other custom fields may need to be updated by hand.</p>' + 941 941 '</div>'; 942 942 $('#livid-advisory').html(advisoryHtml); -
livid-video-hosting/trunk/blocks/video/block.json
r3755224 r3782631 3 3 "apiVersion": 3, 4 4 "name": "livid/video", 5 "version": "2. 0.3",5 "version": "2.1.0", 6 6 "title": "Livid Video", 7 7 "category": "embed", -
livid-video-hosting/trunk/blocks/video/index.asset.php
r3755224 r3782631 10 10 'wp-server-side-render', 11 11 ), 12 'version' => '2. 0.3',12 'version' => '2.1.0', 13 13 ); -
livid-video-hosting/trunk/includes/class-admin.php
r3755224 r3782631 84 84 LIVID_PLUGIN_URL . 'assets/js/livid-admin.js', 85 85 [ 'jquery' ], 86 LIVID_VERSION,86 Assets::version( 'assets/js/livid-admin.js' ), 87 87 true 88 88 ); … … 92 92 LIVID_PLUGIN_URL . 'assets/css/livid-admin.css', 93 93 [], 94 LIVID_VERSION94 Assets::version( 'assets/css/livid-admin.css' ) 95 95 ); 96 96 … … 146 146 147 147 <div class="livid-scope-notice"> 148 <p><strong>What we check:</strong> We look for Vimeo in post and page content, supported Elementor/WPBakery/ Bricks data, and LearnDash lesson/topic video progression. We don’t look in sidebars, footers, options, or other custom fields—if you use those, you may need to update them yourself.</p>148 <p><strong>What we check:</strong> We look for Vimeo in post and page content, supported Elementor/WPBakery/Avada/Bricks data, and LearnDash lesson/topic video progression. Avada coverage includes saved templates, elements, layout sections, Off Canvas content, Code Blocks, and supported video metadata and Slider fields. Diagnostics also audit Avada dynamic sources and global settings; those sources and unrelated custom fields may need manual updates.</p> 149 149 </div> 150 150 -
livid-video-hosting/trunk/includes/class-diagnostics-report.php
r3749371 r3782631 71 71 '_about' => self::about(), 72 72 'meta' => [ 73 'report_version' => 3,73 'report_version' => 4, 74 74 'generated_at_gmt' => gmdate( 'c' ), 75 75 'plugin_version' => defined( 'LIVID_VERSION' ) ? LIVID_VERSION : 'unknown', … … 84 84 'livid_blocks' => $this->livid_blocks(), 85 85 'strategy_inputs' => $this->strategy_inputs( $sweep, $breakdown ), 86 'global_option_audit' => ( new \Livid\Avada\Option_Audit( $this->wpdb ) )->build(), 87 'avada_dynamic_sources' => \Livid\Avada\Dynamic_Audit::build( $this->wpdb ), 88 'avada_legacy_layout_sources' => \Livid\Avada\Legacy_Layout_Guard::audit( $this->wpdb ), 86 89 ]; 87 90 } … … 102 105 'A few longer excerpts (up to ~3,200 characters for structured fields) of the embed code / field around each "vimeo" reference, so we can build the fix without asking you for more.', 103 106 'A count of Livid video blocks already placed on the site, split by whether each block has a video URL set — so we can spot blocks that were added but never given a URL (which render nothing).', 107 'Every Vimeo-matching option record and Avada global-settings leaf: option name, classification, exact field path, encoding, and public video ID or collection path. Private URL hashes and query strings are omitted; the settings values themselves are never included.', 104 108 ], 105 109 'what_we_do_not_collect' => [ … … 204 208 'Tutor LMS' => [ 'tutor/' ], 205 209 'WPBakery' => [ 'js_composer/', 'js_composer_salient/' ], 210 'Avada' => [ 'avada', 'fusion-builder/', 'fusion-core/' ], 206 211 'Divi' => [ 'divi', 'et_builder', 'elegant' ], 207 212 'Beaver Builder' => [ 'bb-plugin/', 'fl-builder' ], -
livid-video-hosting/trunk/includes/class-iframe-renderer.php
r3749114 r3782631 119 119 } 120 120 121 /** Public oEmbed poster, cached separately from long-lived title/dimensions. */ 122 public static function thumbnail( string $video_id, string $web_url = '' ): ?string { 123 $web_url = $web_url !== '' ? rtrim( $web_url, '/' ) : Config::web_url(); 124 $key = 'livid_thumbnail_' . md5( $web_url . '|' . $video_id ); 125 $cached = get_transient( $key ); 126 if ( is_string( $cached ) ) { 127 return $cached !== '' ? $cached : null; 128 } 129 $meta = self::fetch_oembed_meta( $video_id, $web_url ); 130 $thumbnail = $meta['thumbnail'] ?? ''; 131 // Thumbnail URLs can change independently of a video's dimensions. 132 set_transient( $key, $thumbnail, $thumbnail !== '' ? HOUR_IN_SECONDS : 300 ); 133 return $thumbnail !== '' ? $thumbnail : null; 134 } 135 121 136 /** 122 137 * Cached oEmbed metadata (ratio, title) per video and origin. Dimensions … … 136 151 } 137 152 138 $meta = self::fetch_oembed_meta( $video_id, $web_url ); 139 140 set_transient( $cache_key, $meta ?? [], $meta ? MONTH_IN_SECONDS : HOUR_IN_SECONDS ); 141 142 return $meta ?? []; 153 $meta = self::fetch_oembed_meta( $video_id, $web_url ) ?? []; 154 // Posters have their own cache. A poster alone must not turn missing 155 // title/dimensions into a successful, month-long metadata cache entry. 156 unset( $meta['thumbnail'] ); 157 158 set_transient( $cache_key, $meta, $meta ? MONTH_IN_SECONDS : HOUR_IN_SECONDS ); 159 160 return $meta; 143 161 } 144 162 … … 175 193 $meta['title'] = trim( wp_strip_all_tags( $data['title'] ) ); 176 194 } 195 if ( isset( $data['thumbnail_url'] ) && is_string( $data['thumbnail_url'] ) ) { 196 $thumbnail = trim( $data['thumbnail_url'] ); 197 $parts = wp_parse_url( $thumbnail ); 198 if ( is_array( $parts ) && isset( $parts['host'], $parts['scheme'] ) 199 && in_array( strtolower( $parts['scheme'] ), [ 'http', 'https' ], true ) 200 && ! isset( $parts['user'] ) && ! isset( $parts['pass'] ) 201 && ! preg_match( '/[\x00-\x20]/', $thumbnail ) 202 ) { 203 $meta['thumbnail'] = $thumbnail; 204 } 205 } 177 206 178 207 return $meta; -
livid-video-hosting/trunk/includes/class-plugin.php
r3749371 r3782631 23 23 use Livid\Migration\Strategies\Anchor_Strategy; 24 24 use Livid\Migration\Strategies\Wpbakery_Strategy; 25 use Livid\Migration\Strategies\Avada_Strategy; 26 use Livid\Migration\Strategies\Avada_Attribute_Strategy; 27 use Livid\Migration\Strategies\Avada_Post_Meta_Strategy; 28 use Livid\Migration\Strategies\Avada_Code_Strategy; 29 use Livid\Migration\Strategies\Avada_Slider_Strategy; 30 use Livid\Migration\Strategies\Avada_Legacy_Meta_Strategy; 25 31 use Livid\Migration\Strategies\Bricks_Strategy; 26 32 use Livid\Migration\Strategies\Learndash_Video_Strategy; … … 42 48 43 49 public function __construct() { 50 // Avada maps its elements before WordPress init on some versions. 51 new \Livid\Avada\Bootstrap(); 52 44 53 $this->strategies = new Strategy_Registry(); 45 54 $this->register_strategies(); … … 120 129 $this->strategies->register( new Elementor_Strategy() ); 121 130 $this->strategies->register( new Wpbakery_Strategy() ); 131 $this->strategies->register( new Avada_Strategy() ); 132 $this->strategies->register( new Avada_Attribute_Strategy() ); 133 $this->strategies->register( new Avada_Post_Meta_Strategy() ); 134 $this->strategies->register( new Avada_Code_Strategy() ); 135 $this->strategies->register( new Avada_Slider_Strategy() ); 136 foreach ( [ 'video_url', 'video', 'vimeo_id' ] as $field ) { 137 $this->strategies->register( new Avada_Legacy_Meta_Strategy( $field ) ); 138 } 122 139 $this->strategies->register( new Bricks_Strategy() ); 123 140 $this->strategies->register( new Learndash_Video_Strategy() ); -
livid-video-hosting/trunk/includes/migration/jobs/class-scan-job.php
r3749371 r3782631 40 40 $warnings['vimeography'] = 'Vimeography galleries store Vimeo sources in separate tables and are not migrated. Rebuild these galleries before closing your Vimeo account.'; 41 41 } 42 if ( stripos( implode( ' ', $plugins ), 'fusion-builder/' ) !== false || stripos( implode( ' ', $plugins ), 'fusion-core/' ) !== false ) { 43 $warnings['avada'] = 'Avada dynamic source fields, global settings and legacy fields potentially suppressed by content layouts are audited separately and are not automatically rewritten. Review global_option_audit, avada_dynamic_sources and avada_legacy_layout_sources in diagnostics before retiring Vimeo; runtime playback support does not establish source migration.'; 44 } 42 45 if ( defined( 'DISABLE_WP_CRON' ) && DISABLE_WP_CRON ) { 43 46 $warnings['cron'] = 'WP-Cron is disabled. Migration needs a working external cron or Action Scheduler runner; check Tools > Scheduled Actions if progress stops.'; … … 65 68 $public_types = get_post_types( [ 'public' => true ] ); 66 69 $exclude_types = [ 'revision', 'auto-draft', 'attachment', 'nav_menu_item' ]; 67 $include_types = array_diff( $public_types, $exclude_types ); 70 // Avada renders saved elements, layout sections and off-canvas content 71 // from private post types. Only include these known, registered types; 72 // unrelated private application data is outside the content scan. 73 $avada_types = array_intersect( 74 [ 'fusion_template', 'fusion_element', 'fusion_tb_section', 'awb_off_canvas' ], 75 get_post_types() 76 ); 77 $include_types = array_values( array_diff( array_unique( array_merge( $public_types, $avada_types ) ), $exclude_types ) ); 68 78 69 79 if ( empty( $include_types ) ) { … … 78 88 // whose base64 payload never contains the literal "vimeo" — become candidates. 79 89 $content_like = array_merge( 80 [ '%vimeo%', '%elementor-action%' ], 90 // Avada container backgrounds accept bare numeric Vimeo IDs; 91 // encoded Code Blocks carry no searchable plain provider name. 92 [ '%vimeo%', '%elementor-action%', '%[fusion_builder_container%', '%[fusion_code%' ], 81 93 array_map( 82 94 static function ( $marker ) { -
livid-video-hosting/trunk/includes/migration/strategies/class-anchor-strategy.php
r3749371 r3782631 38 38 $tags = new \WP_HTML_Tag_Processor( $html ); 39 39 $urls = []; 40 while ( $tags->next_tag( 'a' ) ) { $urls[] = self::url( $tags ); } 40 $inactive = \Livid\Avada\Dynamic_Sources::inactive_html_indexes( $html, 'a' ); 41 while ( $tags->next_tag( 'a' ) ) { $urls[] = isset( $inactive[ count( $urls ) ] ) ? null : self::url( $tags ); } 41 42 return $urls; 42 43 } -
livid-video-hosting/trunk/includes/migration/strategies/class-bare-url-strategy.php
r3749371 r3782631 121 121 122 122 $by_offset = []; 123 $inactive = \Livid\Avada\Dynamic_Sources::inactive_content_ranges( $post_content ); 123 124 foreach ( $found as $unit ) { 124 $unit['kind'] = $unit['kind'] ?? 'url';125 $unit['kind'] = \Livid\Avada\Dynamic_Sources::offset_is_inactive( $unit['offset'], $inactive ) ? 'inactive' : ( $unit['kind'] ?? 'url' ); 125 126 $by_offset[ $unit['offset'] ] = $unit; 126 127 } -
livid-video-hosting/trunk/includes/migration/strategies/class-gutenberg-embed-strategy.php
r3749114 r3782631 28 28 } 29 29 30 $units = self:: embed_units( parse_blocks( $post_content ));30 $units = self::active_embed_units( parse_blocks( $post_content ), $post_content ); 31 31 $urls = array_map( [ self::class, 'unit_fingerprint' ], $units ); 32 32 $matches = []; … … 70 70 71 71 $blocks = parse_blocks( $post_content ); 72 $units = self:: embed_units( $blocks);72 $units = self::active_embed_units( $blocks, $post_content ); 73 73 74 74 $target = Unit_Locator::resolve( … … 141 141 } 142 142 } 143 return $units; 144 } 145 146 private static function active_embed_units( array $blocks, string $content ): array { 147 $units = self::embed_units( $blocks ); 148 $inactive = \Livid\Avada\Dynamic_Sources::inactive_block_indexes( $content, 'core/embed' ); 149 $index = 0; 150 foreach ( $units as &$unit ) { 151 if ( isset( $inactive[ $index++ ] ) ) { $unit['url'] = ''; } 152 } 153 unset( $unit ); 143 154 return $units; 144 155 } -
livid-video-hosting/trunk/includes/migration/strategies/class-iframe-strategy.php
r3749114 r3782631 83 83 $new_src = self::transfer_universal_params( $src, $context->get_livid_player_url() ); 84 84 $processor->set_attribute( 'src', $new_src ); 85 return self::strip_vimeo_player_script( $processor->get_updated_html() ); 85 $updated = $processor->get_updated_html(); 86 // An unselected Vimeo player may still rely on its SDK. Only 87 // remove the shared script after the final Vimeo iframe moves. 88 foreach ( self::iframe_srcs( $updated, true ) as $remaining_src ) { 89 if ( is_string( $remaining_src ) && Vimeo_Url_Parser::extract_id( $remaining_src ) !== null ) { 90 return $updated; 91 } 92 } 93 return self::strip_vimeo_player_script( $updated ); 86 94 } 87 95 $index++; … … 94 102 * @return array<int, string|null> src of every iframe, in document order. 95 103 */ 96 private static function iframe_srcs( string $html ): array {104 private static function iframe_srcs( string $html, bool $include_inactive = false ): array { 97 105 $srcs = []; 106 $inactive = $include_inactive ? [] : \Livid\Avada\Dynamic_Sources::inactive_html_indexes( $html, 'iframe' ); 98 107 $processor = new \WP_HTML_Tag_Processor( $html ); 99 108 while ( $processor->next_tag( 'iframe' ) ) { 100 109 $src = $processor->get_attribute( 'src' ); 101 $srcs[] = is_string( $src ) ? $src : null;110 $srcs[] = ! isset( $inactive[ count( $srcs ) ] ) && is_string( $src ) ? $src : null; 102 111 } 103 112 return $srcs; -
livid-video-hosting/trunk/includes/migration/strategies/class-vimeo-shortcode-strategy.php
r3749114 r3782631 127 127 return $a['offset'] <=> $b['offset']; 128 128 } ); 129 $inactive = \Livid\Avada\Dynamic_Sources::inactive_content_ranges( $post_content ); 130 foreach ( $units as &$unit ) { 131 if ( \Livid\Avada\Dynamic_Sources::offset_is_inactive( $unit['offset'], $inactive ) ) { 132 $unit['kind'] = 'inactive'; 133 $unit['vimeo_id'] = ''; 134 } 135 } 136 unset( $unit ); 129 137 return array_values( $units ); 130 138 } -
livid-video-hosting/trunk/includes/migration/strategies/class-wp-embed-shortcode-strategy.php
r3749114 r3782631 95 95 } 96 96 $units = []; 97 $inactive = \Livid\Avada\Dynamic_Sources::inactive_content_ranges( $post_content ); 97 98 foreach ( $all[2] as $m ) { 98 $units[] = [ 'offset' => $m[1], 'url' => $m[0] ];99 $units[] = [ 'offset' => $m[1], 'url' => \Livid\Avada\Dynamic_Sources::offset_is_inactive( $m[1], $inactive ) ? '' : $m[0] ]; 99 100 } 100 101 return $units; -
livid-video-hosting/trunk/includes/migration/strategies/class-wpbakery-strategy.php
r3749114 r3782631 176 176 177 177 $counts = []; 178 $inactive = \Livid\Avada\Dynamic_Sources::inactive_content_ranges( $post_content ); 178 179 foreach ( $all as $m ) { 179 180 // Escaped shortcode: [[vc_video]] renders literally — skip. … … 186 187 $tag = $m[2][0]; 187 188 $n = $counts[ $tag ] ?? 0; 189 $is_inactive = \Livid\Avada\Dynamic_Sources::offset_is_inactive( $offset, $inactive ); 188 190 189 191 $counts[ $tag ] = $n + 1; … … 199 201 'offset' => $offset, 200 202 'text' => $full, 201 'link' => $ link,203 'link' => $is_inactive ? '' : $link, 202 204 'src' => null, 203 205 'iframe_index' => null, … … 222 224 'text' => $full, 223 225 'link' => '', 224 'src' => is_string( $src ) ? $src : null,226 'src' => ! $is_inactive && is_string( $src ) ? $src : null, 225 227 'iframe_index' => $idx, 226 228 ]; -
livid-video-hosting/trunk/livid.php
r3755224 r3782631 3 3 * Plugin Name: Livid - Video Hosting 4 4 * Description: Embed Livid videos and migrate from Vimeo to Livid 5 * Version: 2. 0.35 * Version: 2.1.0 6 6 * Requires at least: 6.5 7 7 * Requires PHP: 7.4 … … 18 18 define( 'LIVID_PLUGIN_DIR', plugin_dir_path( __FILE__ ) ); 19 19 define( 'LIVID_PLUGIN_URL', plugin_dir_url( __FILE__ ) ); 20 define( 'LIVID_VERSION', '2. 0.3' );20 define( 'LIVID_VERSION', '2.1.0' ); 21 21 22 22 require_once LIVID_PLUGIN_DIR . 'vendor/autoload.php'; -
livid-video-hosting/trunk/readme.txt
r3755224 r3782631 4 4 Tested up to: 7.1 5 5 Requires PHP: 7.4 6 Stable tag: 2. 0.36 Stable tag: 2.1.0 7 7 License: MIT 8 8 License URI: https://opensource.org/licenses/MIT … … 21 21 22 22 * **Automatic embeds** — Paste any livid.com URL and it auto-embeds 23 * **Page builder ready** — Native Livid Video elements for Elementor, WPBakery, and Bricks, a Livid video type in Slider Revolution, plus a `[livid_video]` shortcode 23 * **Page builder ready** — Native Livid Video elements for Elementor, WPBakery, Avada Builder, and Bricks, a Livid video type in Slider Revolution, plus a `[livid_video]` shortcode 24 * **Avada playback** — Click-to-load previews, existing on-page iLightbox galleries, container video backgrounds, and playback controls for supported post/portfolio FlexSlider embeds 24 25 * **Sensei LMS ready** — Required-video completion, automatic lesson completion, and tab-away pausing; repeated required Livid embeds are tracked separately and mixed-provider lessons wait for all required videos 25 26 * **LearnDash ready** — Livid lesson and topic embeds support LearnDash video progression, resume tracking, and completion 26 * **Supported-format scanning** — Finds Vimeo iframes, Gutenberg embed blocks, bare URLs, `[embed]` and `[vimeo]` shortcodes, Elementor widgets, WPBakery elements, Bricks elements, and LearnDash lesson/topic progression URLs27 * **Supported-format scanning** — Finds Vimeo iframes, Gutenberg embed blocks, bare URLs, `[embed]` and `[vimeo]` shortcodes, Elementor widgets, WPBakery elements, supported Avada elements and video fields, Bricks elements, and LearnDash lesson/topic progression URLs 27 28 * **Background processing** — Scan and migration run as Action Scheduler jobs so they won't time out on large sites 28 29 * **Safe replacement** — Only replaces the specific videos you select through the Livid migration popup … … 41 42 = Scope = 42 43 43 Migration scans and rewrites `post_content`, supported page-builder data for Elementor (`_elementor_data`) and Bricks (`_bricks_page_content_2`), and LearnDash's `lesson_video_url` setting for lessons/topics. Options, widget content, theme settings,and other post meta are not modified.44 Migration scans and rewrites `post_content`, supported page-builder data for Elementor (`_elementor_data`) and Bricks (`_bricks_page_content_2`), Avada's `_fusion.video_url`, iframe sources in `_fusion.video`, active Slider `vimeo_id` fields and their verified legacy `pyre_*` equivalents, and LearnDash's `lesson_video_url` setting for lessons/topics. It includes public post types and registered Avada saved elements, templates, layout sections and Off Canvas records, in published, scheduled, draft, pending and private statuses. Global theme options, widget content and other post meta are not modified. 44 45 45 46 == Installation == … … 67 68 = What embed formats are supported? = 68 69 69 Gutenberg embed blocks, raw iframes, bare Vimeo URLs (auto-embeds), `[embed]` and `[vimeo]` shortcodes, Elementor widgets, WPBakery elements (both `[vc_video]` links and Vimeo iframes inside raw-HTML blocks), Bricks elements (Video elements and Vimeo iframes inside rich-text elements), and LearnDash lesson/topic video-progression URLs. 70 Gutenberg embed blocks, raw iframes, bare Vimeo URLs (auto-embeds), `[embed]` and `[vimeo]` shortcodes, Elementor widgets, WPBakery elements (both `[vc_video]` links and Vimeo iframes inside raw-HTML blocks), supported Avada static elements and post/portfolio video fields, Bricks elements (Video elements and Vimeo iframes inside rich-text elements), and LearnDash lesson/topic video-progression URLs. 71 72 = Does Avada Builder support Livid? = 73 74 Add a Livid Video element in Avada Builder or use `[fusion_livid_video url="https://livid.com/watch/VIDEO_ID" /]`. The element supports a Live Builder preview, native layout settings, accessible title, start time, autoplay, mute and loop. Video Facade follows the element's on/off setting or Avada's default and shows a Livid thumbnail with a play button before loading the iframe. 75 76 Migration covers static `[fusion_vimeo]` elements, Lightbox video URLs, button/column links, container video URLs and numeric Vimeo IDs, supported sources in encoded Code Blocks, modern `_fusion` post/portfolio and active Slider video fields, and the verified legacy `pyre_*` equivalents when still active. Existing on-page iLightbox galleries keep their groups, captions and navigation; background videos keep the container layout, cover sizing, mute and loop controls. Supported post/portfolio FlexSlider embeds use Player.js for playback and slide changes. Registered `fusion_element`, `fusion_template`, `fusion_tb_section` and `awb_off_canvas` content is scanned too. Metadata edits have an immutable pre-write snapshot. 77 78 Native dynamic Vimeo elements and container backgrounds can render a Livid URL returned by Avada’s resolver while retaining the source binding. Diagnostics reports all Vimeo-bearing option records and Avada dynamic video bindings, with exact field paths and known owners; private tokens and full setting values are omitted. Legacy pyre video fields are excluded and audited when a content layout or override filter could suppress them; the background scanner does not execute Avada's context-dependent layout resolver or metadata promotion. Global options, widgets, arbitrary dynamic source fields/callbacks, malformed encoded blocks and unrelated private post types are not automatically migrated. Templates may resolve a different source on each page and need inspection of that actual source. Native programmatic iLightbox URL/array calls are supported. Modal/Off Canvas close events pause playback immediately, with visibility checks for hidden content. Vimeo-specific structured data, animations and arbitrary API options are not reproduced. The integration was checked against Builder 3.16.2 and Core 5.16.2 and does not claim complete Avada parity. Keep the plugin active and verify the surfaces used by your site after migration. 79 80 Custom bound iLightBox galleries using global `smartRecognition: true` must initialize after `window.LividAvadaNative` is available, or reapply the setting through the adapter-wrapped `instance.setOption({ smartRecognition: true })`. The native API cannot expose a custom gallery's earlier recognition setting. 70 81 71 82 = How do I enable Sensei video completion? = … … 88 99 89 100 == External Services == 90 This plugin interacts with Livid in t woways:101 This plugin interacts with Livid in these ways: 91 102 1. Video migration 92 103 When you initiate a migration, the plugin sends a listing of Vimeo videos found on your site along with basic information about the pages they appear on. This is necessary so that Livid can match the Vimeo videos on your site to the ones you have uploaded to your Livid account. No data is sent unless you actively start a migration. 93 104 2. oEmbed provider 94 105 This plugin registers Livid as an oEmbed provider in WordPress. When a Livid video URL is embedded in a post or page, WordPress will make a request to Livid's oEmbed endpoint to retrieve embed information (such as the video title and player HTML). This happens whenever a post containing a Livid embed is edited or its embed cache is refreshed. 95 Both interactions are in line with Livid's [terms of service](https://support.livid.com/article/18-livid-terms-of-service) and [privacy policy](https://support.livid.com/article/17-livid-privacy-policy). 106 3. Video playback and previews 107 The visitor's browser loads Livid players and preview images where they are embedded. For Avada click-to-load facades, WordPress requests public oEmbed thumbnail metadata and caches successful lookups for an hour and failures for five minutes. The browser loads the returned preview image before the player is opened; the player iframe is created when the visitor clicks the play button. Live Builder preview lookups use an authenticated same-site endpoint. 108 These interactions are in line with Livid's [terms of service](https://support.livid.com/article/18-livid-terms-of-service) and [privacy policy](https://support.livid.com/article/17-livid-privacy-policy). 96 109 97 110 == Changelog == 111 112 = 2.1.0 = 113 * Add an editable Livid Video element for Avada Builder with native layout controls, title/start settings, inherited click-to-load facades and Live Builder previews. Add Player.js playback handling for hidden/dynamic content and supported post/portfolio FlexSlider embeds, plus adapters for existing on-page iLightbox galleries and container backgrounds. Migrate static Avada Vimeo elements, native lightbox/button/column/background URLs and numeric background IDs, encoded Code Block sources, and the modern `_fusion` post/portfolio and active Slider video fields. Support verified legacy `pyre_*` video fields only while Avada still reads them. Carry supported URL playback flags and start offsets. Include registered Avada library elements, saved templates, layout sections and Off Canvas records in scans. Preserve selected-occurrence locators, safe retries and immutable metadata backups. Keep the shared Vimeo SDK script while the rewritten source still contains unselected Vimeo iframes. Render native dynamically bound Vimeo elements and container backgrounds when Avada resolves their source to a trusted Livid URL, preserving bindings and dynamic layout/title settings. Add unsampled, redacted audits of every Vimeo-bearing option record, Avada dynamic source binding and legacy video field excluded because a content layout may suppress it. Global options and arbitrary dynamic source fields remain audit-only; do not infer a template source owner from a rendered fallback. This adds the documented Avada surfaces, not complete Vimeo-provider parity. Preserve saved URL playback options, skip inactive dynamically replaced fallback content, and protect encoded Code Block selections against content changes and reordering. Handle delayed player events and slider transitions without overriding a visitor's pause, replay completed videos on return, and respect disabled slideshow rotation. Custom bound lightboxes using global smart recognition must initialize after the adapter or reapply their recognition setting through its wrapped API. 98 114 99 115 = 2.0.3 = -
livid-video-hosting/trunk/vendor/composer/autoload_classmap.php
r3755224 r3782631 9 9 'Composer\\InstalledVersions' => $vendorDir . '/composer/InstalledVersions.php', 10 10 'Livid\\Admin' => $baseDir . '/includes/class-admin.php', 11 'Livid\\Assets' => $baseDir . '/includes/class-assets.php', 12 'Livid\\Avada\\Bootstrap' => $baseDir . '/includes/avada/class-bootstrap.php', 13 'Livid\\Avada\\Dynamic_Audit' => $baseDir . '/includes/avada/class-dynamic-audit.php', 14 'Livid\\Avada\\Dynamic_Sources' => $baseDir . '/includes/avada/class-dynamic-sources.php', 15 'Livid\\Avada\\Element_Video' => $baseDir . '/includes/avada/class-element-video.php', 16 'Livid\\Avada\\Legacy_Layout_Guard' => $baseDir . '/includes/avada/class-legacy-layout-guard.php', 17 'Livid\\Avada\\Native_Surfaces' => $baseDir . '/includes/avada/class-native-surfaces.php', 18 'Livid\\Avada\\Option_Audit' => $baseDir . '/includes/avada/class-option-audit.php', 19 'Livid\\Avada\\Slider' => $baseDir . '/includes/avada/class-slider.php', 20 'Livid\\Avada\\Thumbnail' => $baseDir . '/includes/avada/class-thumbnail.php', 11 21 'Livid\\Block' => $baseDir . '/includes/class-block.php', 12 22 'Livid\\Bricks\\Bootstrap' => $baseDir . '/includes/bricks/class-bootstrap.php', … … 40 50 'Livid\\Migration\\Strategies\\Acf_Field_Strategy' => $baseDir . '/includes/migration/strategies/class-acf-field-strategy.php', 41 51 'Livid\\Migration\\Strategies\\Anchor_Strategy' => $baseDir . '/includes/migration/strategies/class-anchor-strategy.php', 52 'Livid\\Migration\\Strategies\\Avada_Attribute_Strategy' => $baseDir . '/includes/migration/strategies/class-avada-attribute-strategy.php', 53 'Livid\\Migration\\Strategies\\Avada_Code_Strategy' => $baseDir . '/includes/migration/strategies/class-avada-code-strategy.php', 54 'Livid\\Migration\\Strategies\\Avada_Legacy_Meta_Strategy' => $baseDir . '/includes/migration/strategies/class-avada-legacy-meta-strategy.php', 55 'Livid\\Migration\\Strategies\\Avada_Post_Meta_Strategy' => $baseDir . '/includes/migration/strategies/class-avada-post-meta-strategy.php', 56 'Livid\\Migration\\Strategies\\Avada_Slider_Strategy' => $baseDir . '/includes/migration/strategies/class-avada-slider-strategy.php', 57 'Livid\\Migration\\Strategies\\Avada_Strategy' => $baseDir . '/includes/migration/strategies/class-avada-strategy.php', 58 'Livid\\Migration\\Strategies\\Avada_Url_Options' => $baseDir . '/includes/migration/strategies/class-avada-url-options.php', 42 59 'Livid\\Migration\\Strategies\\Bare_Url_Strategy' => $baseDir . '/includes/migration/strategies/class-bare-url-strategy.php', 43 60 'Livid\\Migration\\Strategies\\Bricks_Strategy' => $baseDir . '/includes/migration/strategies/class-bricks-strategy.php', -
livid-video-hosting/trunk/vendor/composer/autoload_static.php
r3755224 r3782631 10 10 'Composer\\InstalledVersions' => __DIR__ . '/..' . '/composer/InstalledVersions.php', 11 11 'Livid\\Admin' => __DIR__ . '/../..' . '/includes/class-admin.php', 12 'Livid\\Assets' => __DIR__ . '/../..' . '/includes/class-assets.php', 13 'Livid\\Avada\\Bootstrap' => __DIR__ . '/../..' . '/includes/avada/class-bootstrap.php', 14 'Livid\\Avada\\Dynamic_Audit' => __DIR__ . '/../..' . '/includes/avada/class-dynamic-audit.php', 15 'Livid\\Avada\\Dynamic_Sources' => __DIR__ . '/../..' . '/includes/avada/class-dynamic-sources.php', 16 'Livid\\Avada\\Element_Video' => __DIR__ . '/../..' . '/includes/avada/class-element-video.php', 17 'Livid\\Avada\\Legacy_Layout_Guard' => __DIR__ . '/../..' . '/includes/avada/class-legacy-layout-guard.php', 18 'Livid\\Avada\\Native_Surfaces' => __DIR__ . '/../..' . '/includes/avada/class-native-surfaces.php', 19 'Livid\\Avada\\Option_Audit' => __DIR__ . '/../..' . '/includes/avada/class-option-audit.php', 20 'Livid\\Avada\\Slider' => __DIR__ . '/../..' . '/includes/avada/class-slider.php', 21 'Livid\\Avada\\Thumbnail' => __DIR__ . '/../..' . '/includes/avada/class-thumbnail.php', 12 22 'Livid\\Block' => __DIR__ . '/../..' . '/includes/class-block.php', 13 23 'Livid\\Bricks\\Bootstrap' => __DIR__ . '/../..' . '/includes/bricks/class-bootstrap.php', … … 41 51 'Livid\\Migration\\Strategies\\Acf_Field_Strategy' => __DIR__ . '/../..' . '/includes/migration/strategies/class-acf-field-strategy.php', 42 52 'Livid\\Migration\\Strategies\\Anchor_Strategy' => __DIR__ . '/../..' . '/includes/migration/strategies/class-anchor-strategy.php', 53 'Livid\\Migration\\Strategies\\Avada_Attribute_Strategy' => __DIR__ . '/../..' . '/includes/migration/strategies/class-avada-attribute-strategy.php', 54 'Livid\\Migration\\Strategies\\Avada_Code_Strategy' => __DIR__ . '/../..' . '/includes/migration/strategies/class-avada-code-strategy.php', 55 'Livid\\Migration\\Strategies\\Avada_Legacy_Meta_Strategy' => __DIR__ . '/../..' . '/includes/migration/strategies/class-avada-legacy-meta-strategy.php', 56 'Livid\\Migration\\Strategies\\Avada_Post_Meta_Strategy' => __DIR__ . '/../..' . '/includes/migration/strategies/class-avada-post-meta-strategy.php', 57 'Livid\\Migration\\Strategies\\Avada_Slider_Strategy' => __DIR__ . '/../..' . '/includes/migration/strategies/class-avada-slider-strategy.php', 58 'Livid\\Migration\\Strategies\\Avada_Strategy' => __DIR__ . '/../..' . '/includes/migration/strategies/class-avada-strategy.php', 59 'Livid\\Migration\\Strategies\\Avada_Url_Options' => __DIR__ . '/../..' . '/includes/migration/strategies/class-avada-url-options.php', 43 60 'Livid\\Migration\\Strategies\\Bare_Url_Strategy' => __DIR__ . '/../..' . '/includes/migration/strategies/class-bare-url-strategy.php', 44 61 'Livid\\Migration\\Strategies\\Bricks_Strategy' => __DIR__ . '/../..' . '/includes/migration/strategies/class-bricks-strategy.php', -
livid-video-hosting/trunk/vendor/composer/installed.php
r3755224 r3782631 2 2 'root' => array( 3 3 'name' => 'livid/livid-wordpress', 4 'pretty_version' => 'dev- dbba50ef9f273677ad15dc3385c455f1a4af24da',5 'version' => 'dev- dbba50ef9f273677ad15dc3385c455f1a4af24da',6 'reference' => ' dbba50ef9f273677ad15dc3385c455f1a4af24da',4 'pretty_version' => 'dev-1959aad0a9187c378a66944ee439bd418b491589', 5 'version' => 'dev-1959aad0a9187c378a66944ee439bd418b491589', 6 'reference' => '1959aad0a9187c378a66944ee439bd418b491589', 7 7 'type' => 'wordpress-plugin', 8 8 'install_path' => __DIR__ . '/../../', … … 12 12 'versions' => array( 13 13 'livid/livid-wordpress' => array( 14 'pretty_version' => 'dev- dbba50ef9f273677ad15dc3385c455f1a4af24da',15 'version' => 'dev- dbba50ef9f273677ad15dc3385c455f1a4af24da',16 'reference' => ' dbba50ef9f273677ad15dc3385c455f1a4af24da',14 'pretty_version' => 'dev-1959aad0a9187c378a66944ee439bd418b491589', 15 'version' => 'dev-1959aad0a9187c378a66944ee439bd418b491589', 16 'reference' => '1959aad0a9187c378a66944ee439bd418b491589', 17 17 'type' => 'wordpress-plugin', 18 18 'install_path' => __DIR__ . '/../../',
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)