# Changelog

All notable changes to this project will be documented in this file.

The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).

## [1.2.2] - 2026-08-13

### Added
- New "Protect images" setting (enabled by default) that controls whether image elements receive blur and copy protection. When disabled, images are no longer blurred or protected from right-click saving, dragging, and copying, while EXIF privacy cleanup remains independent and unaffected.

### Fixed
- Protection overlay message is no longer shown when both image and video protection are disabled and no forced protection elements are present.

## [1.2.1] - 2026-08-03

### Fixed
- Prevented image-protection blur overlay from being triggered when a user interacts with a reCAPTCHA widget. The window-blur handler now detects reCAPTCHA focus targets and ignores them.

## [1.2.0] - 2026-07-27

### Added
- Selectable protection levels (Relaxed, Balanced, Strict) controlling how aggressively likely capture attempts are handled.
- Layout-independent screenshot shortcut detection using `KeyboardEvent.code` (covers Windows PrintScreen and Win+Shift+S, macOS Cmd+Shift+3/4/5, and Linux PrintScreen).
- Focus-loss and visibility blurring so content is hidden when the window loses focus or the tab is hidden (catches Snipping Tool and screenshot overlays).
- Optional PrintScreen clipboard neutralization, with periodic clipboard clearing at the Strict level.
- Optional in-browser screen-recording protection via interception of the Screen Capture API (`getDisplayMedia`).
- Optional print / Save-as-PDF protection that blanks protected media and blocks the Ctrl/Cmd+P shortcut.
- Cross-device capability matrix in the documentation describing what can and cannot be protected.
- Option to disable image protection for editor users (independently of administrators).

### Changed
- Rewrote the client-side protection engine around a blur state machine, replacing the fixed-timeout unblur with focus/visibility-driven state so media no longer un-blurs while a capture tool is still active.
- Narrowed the MutationObserver to image/video-relevant changes to reduce overhead on large pages.

### Fixed
- Copy prevention now checks whether the selection intersects any protected image instead of only the first image on the page.

## [1.1.3] - 2026-06-18

### Added
- EXIF Privacy media scan now flags images with **device details** (camera make/model, lens, software) and **capture timestamps**, in addition to GPS location, serial numbers, and embedded comments.
- Activation hook to set the default protection message on first install only.

### Changed
- Protection message default is no longer written to the database when opening the settings page; defaults apply only until the option is explicitly saved.

### Fixed
- Protection overlay message no longer double-escaped when passed to the frontend script via `wp_localize_script()`.

## [1.1.2] - 2026-06-16

### Fixed
- Respect `no-image-protection` class and `data-image-protection="false"` on parent elements such as `<picture>` wrappers.

## [1.1.1] - 2026-06-16

### Changed
- Default protection message is now more descriptive and instructs visitors to refresh the page to view content normally.
- Credit line in the protection overlay is disabled by default.

## [1.1.0] - 2026-06-15

### Added
- Optional setting to apply blur protection to video elements (disabled by default).
- Optional setting to disable the right-click context menu site-wide (disabled by default).
- Optional setting to remove privacy-sensitive EXIF metadata on image upload (disabled by default).
- Media admin tool to scan the library for privacy-sensitive metadata and clean flagged images in batches.


## [1.0.7] - 2025-11-28

### Added
- Option to control the amount of blur applied to images.
- Uninstall cleanup to remove plugin options.


## [1.0.6] - 2025-06-05

### Added
- Option to disable credit line in the message overlay.


## [1.0.5] - 2025-05-29

### Added
- Added explanatory message for why the images are blurred.


## [1.0.4] - 2025-05-12

### Fixed
- Add images with data-src attribute to be protected (lazy loading images or carousel images)

## [1.0.3] - 2025-05-06

### Removed
- jQuery dependency

## [1.0.2] - 2025-05-02

### Added
- Added settings page under Settings menu
- Added option to disable image protection for admin users

## [1.0.1] - 2025-04-01

### Added
- Added support for forcing protection on specific images or elements (like canvas)

## [1.0.0] - 2025-03-13

### Added
- Initial release of the Image Protection plugin
- JavaScript-based protection system for images
- Right-click prevention for image saving
- Screenshot prevention using keyboard shortcuts
- Drag-and-drop protection for images
- Browser-based image copy prevention
- Blur protection when screenshot attempts are detected
- Support for all major browsers

### Security
- Implemented ABSPATH check to prevent direct file access
- Sanitized and escaped all data input/output
