Releases: crossroad-media/xroad-videos
Release list
2.10.0 — Device-scoped lightbox + details panel
Front-end + admin. Two lightbox upgrades: the pop-out modal becomes a per-device choice, and it can now carry a details panel (title, date, collapsible description) under the player. The zero-third-party-request-before-click guarantee is untouched.
- Device-scoped playback. XRV → Settings → Browse defaults → Play videos in now offers: lightbox on all devices, lightbox on desktop / inline on mobile, lightbox on mobile / inline on desktop, or inline everywhere. The XRV Video block and
[xroad-videos playback="…"]accept the same four values (plus Site default), so any gallery can override the site setting. - Decided in the browser, not on the server. The desktop / mobile split is resolved client-side by viewport width (under 768 px is mobile) at the moment of the click, so the rendered HTML is identical for every visitor and the page stays fully cacheable — no UA sniffing, no cache fragmentation. A rotate or resize lands the next play in the right mode with no reload.
- Lightbox details panel. A watch-page-style caption can now sit under the player in the lightbox: the title, a relative upload date (“2 months ago”), and the description collapsed to four lines behind a Description toggle. On by default; turn it off at Settings → Browse defaults → Lightbox details, or per gallery with
[xroad-videos lightbox_details="false"]/ the block toggle. The panel is text rendered from the video’s own stored metadata — no view count, and no extra network calls. Shorts stay player-only.
Install: download xroad-videos.zip below → WordPress admin → Plugins → Add New → Upload Plugin.
Supersedes the tagged-but-unreleased 2.6.0 → 2.9.0. Highlights from that span, all preserved in 2.10.0:
- 2.9.0 — Collections: build multiple curated galleries and place each anywhere (incl. the hero) via
[xroad-videos collection="slug"]/ the block;ids="…"exact-set attribute; multiple independent galleries per page. - 2.8.0 — Privacy self-test (later removed in 2.9.0 as low-value in isolation).
- 2.7.1 / 2.7.0 — Editable watch-page slug in the editor; bulk Watch-page on/off and Rebuild-local-posters actions; whole-library watch-page toggle.
- 2.6.0 —
watch_pagefield in the bulk importer.
2.8.0 — Privacy self-test
Adds a Privacy self-test that turns the zero-third-party guarantee from a claim into an in-product proof. Front-end harness + admin diagnostic; no new dependencies, no front-end weight on real pages.
- Resource-Timing privacy self-test (Settings → Privacy self-test). One click renders your real gallery in an isolated, admin-only frame, reads the browser's
performance.getEntriesByType('resource')log without ever dispatching a play, and reports a clear PASS/FAIL — naming by URL any pre-click request to a video-provider host (YouTube, Vimeo, Wistia, Loom, Dailymotion, TikTok and their CDNs). It is both the strongest privacy demo for a regulated-industry buyer and a standing regression guard: a future change that leaked a pre-click request turns this red. Requests to other origins you control (e.g. an image CDN) are reported but do not fail the test. - Verify the detector. A negative-control mode loads a deliberately leaky page (one planted provider request) so you can watch the detector catch a real leak — the only place XRV ever contacts a provider without a click, and only when an admin explicitly runs it.
- Doc-hygiene: corrected the stale note that multi-source bulk import was "planned for 2.5."
2.7.1 — Enhanced watch page controls
Admin-only. Enhanced Watch Page Controls: finer control over each video's standalone page, plus a clearer home for the bulk switch.
- Editable watch page slug in the editor. Ticking "Give this video its own watch page" now reveals an editable URL-slug field, so the standalone page's address is set inline (kept unique by WordPress). It hides when the video is gallery-only.
- Watch Page Controls, relocated. The bulk on/off card (renamed from "Bulk watch pages") now sits beside the Video URLs card in Settings, with its own nav chip, grouped where it belongs since watch pages are the per-video URLs.
2.7.0 — Bulk watch-page controls + poster repair
Admin-only. Bulk controls for the two things a privacy-first curated library has that a feed plugin does not: per-video SEO watch pages and local-poster integrity.
- Bulk Actions on All Videos. The native Bulk Actions dropdown gains Watch page: turn off / turn on (set a selected set's standalone-page state in one go) and Rebuild local posters (re-pull each selected video's poster from its provider, swap in the fresh copy, and drop the stale one — the repair tool for broken or missing thumbnails). A new Watch page column shows each video's On/Off state at a glance.
- One-click whole-library toggle. Settings gains Turn off all watch pages / Turn all back on buttons that apply to every video at once, for when you want the library gallery-only without selecting row by row.
2.6.0 — Import-file control of watch pages
Admin-only. Extends the bulk importer so the watch page state is part of the import record, making it controllable per video from a file.
watch_pageimport field. A.jsonimport record now accepts"watch_page": "0"(no standalone watch page) or"1"(force on); omit it to leave the video's current setting untouched. Accepts string, number, or boolean (false/"no"/"off"all map to off), so a hand-authored file can switch watch pages off without knowing the stored value. Paired with Overwrite, a re-import flips videos already in the library; on a fresh import it sets the state at creation. The URL/channel/playlist paste paths are unaffected (they carry no such field, so the default stays on).
2.5.1 — Per-video watch-page toggle
Reworks the per-video "dedicated page" control into a clearer watch page toggle (on by default).
- Each video can have its own standalone watch page — its own URL, with the embedded player and VideoObject schema — and the gallery card title links to it. The card still plays in place in the modal; the title link is a separate affordance, not a bypass.
- Untick to keep a video gallery-only: its title stops linking and its standalone URL redirects home (filterable via
xrv_watch_page_off_url/xrv_watch_page_off_status). - The old free-text "dedicated page URL" field is retired from the editor; any URL already saved on a video is still honored as the title's link target.
2.5.0 — Embed any video by URL + TikTok
Two new front-end capabilities plus a per-video editor pass.
- Embed any video anywhere.
[xroad-video url="..."]renders the privacy-first click-to-load facade for any supported URL with no library entry needed. Optionalposterandtitleattributes; the poster is sideloaded locally on first render and cached, so the embed still makes zero third-party requests before the click. - TikTok support. TikTok joins YouTube, Vimeo, Wistia, Loom, and Dailymotion as an auto-detected source — vertical 9:16, loads on click as TikTok's native iframe player (no embed.js), poster fetched keyless via oEmbed.
- Per-video editor pass. Single-field editor, opt-in dedicated-URL checkbox, minutes:seconds to ISO duration converter, native upload-date picker, and split Primary/Mobile poster with auto-generated renditions.
Front-end facade guarantee unchanged: local posters, zero third-party contact before a click.
2.4.0 — Admin polish: shared brand kit + Q&A accordions
A full admin polish pass. One shared design system now brands every screen, and a bold-carat Q&A accordion puts answers one click away. Admin-facing only; no front-end or behavior change.
- One design system across every screen. A single, scoped admin stylesheet (Crossroad palette, card system, buttons, badges, line-icons) is now shared by Settings, Import, and the per-video editor, so the whole plugin reads as one finished product. The Import screen, previously stock WordPress chrome, now matches Settings — branded header lockup, cards, and a 1-2-3 step indicator for the import workflow.
- Bold-carat Q&A accordions. Each screen gains a Questions & answers card: common admin questions (consent mode, API key, URL/SEO, thumbnails, Shorts, duplicates) expand inline with a bold rotating carat. The per-video editor's Rich video schema disclosure and contextual help use the same pattern.
- Premium page headers. Every screen opens with a logo-locked hero (eyebrow, title, one-line summary, version chip) instead of a bare
<h1>. - Sharper navigation. The Settings pill nav gains section icons and a scroll-spy active state that tracks the section in view.
- Tidied structure. The on-demand Run a sync now control is now its own card (it previously floated outside the card grid), and section headers carry consistent icon chips.
- Single source of version truth. A new
XRV_VERSIONconstant feeds the script handles and update check.
v2.3.0 - Faster first paint + live edge check
Faster first paint and a live edge-region check.
- Faster first paint. The first card in a grid now loads its poster with
loading="eager"andfetchpriority="high"(the LCP image); every other card stays lazy. No markup or API change for callers. - Edge check (Settings, Privacy & consent). A new admin-only diagnostic runs a live region check against the REST endpoint, times the round trip with a count-up, names the detected country, and contrasts XRV (zero extra calls, zero cookies, cache intact) with a typical geo-IP plugin. It shows a one-toggle Cloudflare hint when no region header is present. The front-end gallery is unchanged.
Install: download xroad-videos.zip below and upload it under Plugins, Add New, Upload Plugin. On WP Engine, use an SFTP fresh-install or the OPcache reset so new bytecode is served.
v2.2.2 — Improved UI Aesthetics
Improved UI aesthetics. Admin-facing only; no front-end or behavior change.
- Removed the decorative
{brace accent that ran down the left edge of every Settings card, and tightened the reclaimed left gutter so card content aligns symmetrically with the right edge.
Install: download xroad-videos.zip below and upload via Plugins → Add New → Upload, or extract into wp-content/plugins/.