=== Responsive Block Control - Hide blocks based on display width ===
Contributors: landwire
Donate link: https://saschapaukner.de
Tags: block, visibility, responsive, hide content, width
Requires at least: 5.2
Tested up to: 6.9
Stable tag: 1.3.2
Requires PHP: 7.4
License: GPLv2 or later
License URI: http://www.gnu.org/licenses/gpl-2.0.html
Security Contact: security@saschapaukner.de


Responsive Block Control adds responsive toggles to a "Visibility" panel of the block editor, to show or hide blocks according to screen width.

== Description ==
Responsive Block Control adds responsive toggles to a "Visibility" panel of the block editor, to show or hide blocks according to screen width.

== Security ==
**Version 1.3.1 resolves a stored cross‑site scripting (XSS) vulnerability (CVE‑2025‑62135) affecting earlier versions (<= 1.2.9).**
Users with contributor access or higher should update immediately.

If you discover a security vulnerability, please report it responsibly to: security@saschapaukner.de

= Limitations =
Does not work with the Classic Block, Widget Block or Widget Area Block ['core/freeform', 'core/legacy-widget', 'core/widget-area'], as the those blocks do not support block attributes. Does also not work with the HTML Block ['core/html'] inside the Widget Screen, as this one also does not support block attributes there.

== Installation ==
1. Upload `responsive-block-control.php` to the `/wp-content/plugins/` directory
1. Activate the plugin through the 'Plugins' menu in WordPress

== Configuration ==

= Override existing breakpoints =

`function override_responsive_block_control_breakpoints($break_points) {
     $break_points['base'] = 0;
     $break_points['mobile'] = 400;
     $break_points['tablet'] = 800;
     $break_points['desktop'] = 1000;
     $break_points['wide'] = 1600;

     return $break_points;
 }

 add_filter('responsive_block_control_breakpoints', 'override_responsive_block_control_breakpoints');`

= Provide custom CSS =
You can provide your own CSS rules per breakpoint using the new filter responsive_block_control_custom_css_rules.

`add_filter('responsive_block_control_custom_css_rules', function($rules) {
    return [
        'mobile'  => 'display: none !important;',
        'tablet'  => 'display: none !important;',
        'desktop' => 'display: none !important;',
        'wide'    => 'display: none !important;',
    ];
});`

= Stop css output completely =

 `function override_responsive_block_control_add_css() {
     return false;
 }
 add_filter('responsive_block_control_breakpoints', 'override_responsive_block_control_add_css');`

== Frequently Asked Questions ==

= Is it possible to use different breakpoints? =

Yes, use the following code in your functions.php or similar.

`function override_responsive_block_control_breakpoints($break_points) {
     $break_points['base'] = 0;
     $break_points['mobile'] = 400;
     $break_points['tablet'] = 800;
     $break_points['desktop'] = 1000;
     $break_points['wide'] = 1600;

     return $break_points;
 }

 add_filter('responsive_block_control_breakpoints', 'override_responsive_block_control_breakpoints');`

= Can I provide custom CSS per breakpoint? I want to display: none instead of hiding just visually =

Yes, use the responsive_block_control_custom_css_rules filter:

`add_filter('responsive_block_control_custom_css_rules', function($rules) {
    return [
        'mobile'  => 'display: none !important;',
        'tablet'  => 'display: none !important;',
        'desktop' => 'display: none !important;',
        'wide'    => 'display: none !important;',
    ];
});`


This ensures the CSS respects the current breakpoints and applies to the correct .rbc-is-hidden-on-{breakpoint} classes.

= Can I write my own CSS and just use the classes? =

Yes, that is absolutely possible. Just use the filter below to stop the plugin from injecting its' styles:

`function override_responsive_block_control_add_css() {
     return false;
 }
 add_filter('responsive_block_control_breakpoints', 'override_responsive_block_control_add_css');`

== Screenshots ==

1. The 'Responsive Block Control' toggles at work in the block editor.

== Changelog ==
= 1.3.2 =
* Removed console.log

= 1.3.1 =
* Security fix: Mitigated authenticated Stored XSS (CVE‑2025‑62135).
* Added responsive_block_control_custom_css_rules filter to allow developers to provide their own CSS per breakpoint
* Fixed media query generation to match breakpoints correctly
* Ensured JS only injects CSS if customCss is present and sanitized

= 1.3.0 =
* Raised version after testing and package updates

= 1.2.9 =
* Added check to not load editor assets in the front end

= 1.2.8 =
* Updated asset loading for changes introduced in WordPress 6.3
* Added "Limitations" section to readme

= 1.2.7 =
Recompiled assets for distribution

= 1.2.6 =
* fixed translation for visibility information
* added check for Classic Block and disabled display of settings there

= 1.2.0 =
* fixed some JS logic
* added visibility information to blocks in Gutenberg editor

= 1.1.1 =
* fixed regex for adding classes in the frontend

= 1.1.0 =
* Removed the "blocks.getSaveContent.extraProps" JS filter as it causes block validation errors
* Instead we are using the recommended PHP filter "render_block" to add the necessary classes vie preg_replace()

= 1.0.0 =
* Initial Release of the plugin


== Upgrade Notice ==

Nothing to consider.
