== Changelog == The current release is summarised in readme.txt. This file holds the full history, per WordPress.org's guidance to keep the readme small. = 2026.8.1 = No functional changes. Every file the plugin ships behaves as it did in 2026.8.0, and the only edits inside them are to comments. What this release exists for is the listing you are reading. WordPress.org serves a plugin's description from the readme in its stable tag, so revised wording only reaches the directory when a new version is published. This is that publish. **Changed** * House style drops the em dash, so 130 of them across the documentation, the directory listing and the source comments have been rewritten. The punctuation was chosen per sentence rather than swapped wholesale: a dash standing in for a colon became a colon, one introducing an aside became parentheses, and one joining two independent clauses became a full stop. * A build check now fails on any typographic dash, so the style holds without anyone having to remember it. = 2026.8.0 = A rewrite. The plugin no longer installs or activates a theme at all, and a signage request no longer switches your site's theme — which, before this release, any anonymous visitor could do for every visitor at once. Signage players are now recognised from their request and sent to the signage view automatically, so a screen can be pointed at an ordinary page URL with no `?srly` to add. The design is rebuilt to fit any screen from 800x480 to 4K in both orientations, with the fonts bundled rather than fetched from a CDN. Requires WordPress 6.8 and PHP 8.2. **Breaking** * Requires WordPress 6.8 and PHP 8.2. Tested up to WordPress 7.1. * The bundled Screenly Cast theme is no longer installed into `wp-content/themes`. Rendering is handled by the plugin. If you had customised that copied theme directory, those edits are not carried over. * The unused `screenly_cast` post type and `screenly_cast_category` taxonomy have been removed. Existing posts of that type are left in the database untouched, but nothing renders them. * Versioning moves to CalVer (`YYYY.M.MICRO`) to match Screenly's other projects. * Licence changed to AGPL-3.0-only. **Security** * A signage request no longer switches the site's active theme. Previously any anonymous visitor requesting a `?srly` URL changed the active theme for every visitor, and a site could be left serving the bundled theme to everyone. This is also the cause of the 2017 report that the plugin "cleared CSS customizations": Customizer CSS is stored per theme, so switching the theme took the site's custom CSS out of play. * The upgrade repair now requires an administrator and refuses to run during AJAX or cron. `admin-ajax.php` fires `admin_init` before it checks `action` or any nonce and is reachable unauthenticated, so without that guard an anonymous request could have triggered a theme switch. **Added** * Signage players are recognised automatically and sent to the signage view, so a screen can be pointed at an ordinary page URL with no `?srly` to add. Detection uses the `X-Screenly-*` headers, the Android package name and player user agent tokens. Crawlers, signed-in users and meeting-room devices are excluded, as are engines shared with consumer hardware (LG webOS, Samsung Tizen, bare QtWebEngine) — a missed player still works with `?srly`, but a wrongly claimed device would show signage to somebody who was only browsing. * A post with no featured image now uses the first image in its content, so adding a picture with the "Add Media" button is enough. Reported in 2018 as "image with text overlay does not appear to work". * The date can be hidden with the `screenly_cast_show_date` filter, and the colours and type scale can be overridden through the design's CSS custom properties. Both requested in 2018. * Verified against the WordPress 7.1 release candidate. None of 7.1's breaking changes apply: the plugin adds nothing to the block editor, uses no `@wordpress/components`, adds no toolbar items, and does no image processing. **Fixed** * Asset cache-busting never worked: the version constant shipped as the literal placeholder text, so browsers and players kept serving stale CSS and JS after an update. * The theme was copied into `wp-content/themes` on *every page load*, attempting a recursive directory copy on each request. * Theme switching and option deletion ran during ordinary front-end page views, with a redirect that could loop. * Activation, deactivation and uninstall hooks were never registered, so plugin options were never cleaned up. There is now an uninstall routine. * The logo setting could never work: it was registered under one option name, read under another, from a file that was never loaded, against a mismatched settings group. It is now a working media picker under Settings → Screenly Cast, and an existing logo value is migrated. Removing the logo also clears a migrated URL fallback, which previously reappeared on every render with no way to remove it. * Requirement notices were double-escaped and displayed HTML entities as literal text. * Casting an image media URL works again. WordPress 6.4 disabled attachment pages by default, which had silently broken it. * Content that arrives without a wrapping element — a table or figure block, whose wrapper the tag allowlist removes while keeping its text — is now clamped like anything else. It previously bypassed the character budget entirely. * A self-closing disallowed element such as `` no longer discards the rest of the post. * A title too wide for the screen is no longer clipped in silence. On a portrait player the fluid type scale is driven by the long edge, so a single word at the largest size could be wider than the screen; the fitter now steps the title down on width as well as height. * Signage requests to an archive or the blog index now compose against the entry's image, rather than silently rendering text-only. * The `screenly_cast_show_date` and `screenly_cast_is_signage_player` filters now treat the string `'0'` as false, which is what `get_option()` returns for a saved-off boolean. * PHP 8 warnings from the short-link helper, and invalid markup on attachment renders. * The plugin's own upgrade no longer risks interrupting an administrator with an FTP credentials prompt: removing the old theme directory is attempted only when PHP can write directly, and is treated as best-effort. **Changed** * Content shaping uses an explicit tag allowlist rather than `strip_tags`, and both the allowlist and the character budget are filterable. * Content is fitted to the actual viewport, measured in the browser, rather than trimmed one word at a time against a stale measurement. * Webfonts are bundled with the plugin. The Google Fonts CDN request is gone, as is the third-party QR code API. * Signage renders are marked noindex, and the theme's stylesheets, fonts, emoji scripts, oEmbed discovery and speculation rules are all kept out of them. = 1.0.5 = * Fix: Make failing unit tests pass * Fix: Update handling of the `?srly` query parameter * Fix: Screenly Cast theme not being applied when using the `srly` query parameter = 1.0.4 = * Fix: Move build artifacts to separate dist/ directory * Fix: Improve build script to create correct WordPress plugin structure * Fix: Update documentation for build process and plugin installation = 1.0.3 = * Fix: Correct directory structure for WordPress.org SVN deployment * Fix: Ensure proper handling of plugin assets * Fix: Streamline build process for cleaner releases = 1.0.2 = * Fix: Remove all development files and directories from release package * Fix: Improve .distignore patterns to match actual directory structure * Fix: Clean up root directory files from WordPress.org deployment = 1.0.1 = * Fix: Remove development files from release package * Fix: Clean up files included in WordPress.org deployment = 1.0.0 = * Major: Complete rewrite of the plugin * Modern PHP 7.4+ features and type safety * Improved code organization and maintainability * Updated minimum WordPress version to 6.2.4 * Better error handling and version compatibility checks * Added comprehensive test suite with unit and integration tests * Added theme installation and management functionality * Added proper WordPress coding standards compliance * Added proper query handling for Screenly Cast content = 0.1.19 = * Added PHPUnit test files for WordPress