diff --git a/build/toggle-block/block.json b/build/toggle-block/block.json index 7fc1d5a..3668239 100644 --- a/build/toggle-block/block.json +++ b/build/toggle-block/block.json @@ -16,6 +16,10 @@ "file:../src/view.css" ], "attributes": { + "bodyClass": { + "type": "string", + "default": "" + }, "buttonText": { "type": "string", "default": "" diff --git a/build/toggle-block/index.asset.php b/build/toggle-block/index.asset.php index 9f438c1..5bc1026 100644 --- a/build/toggle-block/index.asset.php +++ b/build/toggle-block/index.asset.php @@ -1 +1 @@ - array('wp-block-editor', 'wp-blocks', 'wp-components', 'wp-i18n'), 'version' => '08086c18c6ed91df9b7f'); + array('wp-block-editor', 'wp-blocks', 'wp-components', 'wp-i18n'), 'version' => '258f20c46a12ec82d3d1'); diff --git a/build/toggle-block/index.js b/build/toggle-block/index.js index 139db47..23e642b 100644 --- a/build/toggle-block/index.js +++ b/build/toggle-block/index.js @@ -1 +1 @@ -(()=>{"use strict";function t(){return t=Object.assign?Object.assign.bind():function(t){for(var e=1;e{"use strict";function t(){return t=Object.assign?Object.assign.bind():function(t){for(var e=1;e array(), 'version' => '1e04be7a9fb66215ea7c'); + array(), 'version' => 'f0f872b7da64297edb79'); diff --git a/build/toggle-block/view.js b/build/toggle-block/view.js index 75329cc..bafa690 100644 --- a/build/toggle-block/view.js +++ b/build/toggle-block/view.js @@ -1 +1 @@ -(()=>{var t=function(t){var e=t.target.getAttribute("aria-controls");if(e){var a=document.getElementById(e);a&&(t.target.classList.contains("toggle-block-has-toggled")||t.target.classList.add("toggle-block-has-toggled"),a.classList.contains("toggle-block-has-been-toggled")||a.classList.add("toggle-block-has-been-toggled"),a.classList.contains("toggle-block-hidden")?(t.target.setAttribute("aria-pressed","true"),t.target.setAttribute("aria-expanded","true"),a.classList.remove("toggle-block-hidden")):(t.target.setAttribute("aria-pressed","false"),t.target.setAttribute("aria-expanded","false"),a.classList.add("toggle-block-hidden")))}};document.addEventListener("DOMContentLoaded",(function(){document.querySelectorAll(".wp-block-happyprime-toggle-block").forEach((function(e){var a=e.getAttribute("aria-controls");if(a){var s=document.getElementById(a);s&&(s.classList.contains("toggle-block-hidden")?(e.setAttribute("aria-pressed","false"),e.setAttribute("aria-expanded","false")):(e.setAttribute("aria-pressed","true"),e.setAttribute("aria-expanded","true")),e.addEventListener("click",t))}}))}))})(); \ No newline at end of file +(()=>{var t=function(t){var e=t.target.getAttribute("aria-controls");if(e){var a=document.getElementById(e);if(a){var s=t.target.getAttribute("data-body-class");t.target.classList.contains("toggle-block-has-toggled")||t.target.classList.add("toggle-block-has-toggled"),a.classList.contains("toggle-block-has-been-toggled")||a.classList.add("toggle-block-has-been-toggled"),a.classList.contains("toggle-block-hidden")?(t.target.setAttribute("aria-pressed","true"),t.target.setAttribute("aria-expanded","true"),a.classList.remove("toggle-block-hidden"),s&&document.body.classList.add(s)):(t.target.setAttribute("aria-pressed","false"),t.target.setAttribute("aria-expanded","false"),a.classList.add("toggle-block-hidden"),s&&document.body.classList.remove(s))}}};document.addEventListener("DOMContentLoaded",(function(){document.querySelectorAll(".wp-block-happyprime-toggle-block").forEach((function(e){var a=e.getAttribute("aria-controls");if(a){var s=document.getElementById(a);if(s){var d=e.getAttribute("data-body-class");s.classList.contains("toggle-block-hidden")?(e.setAttribute("aria-pressed","false"),e.setAttribute("aria-expanded","false"),d&&document.body.classList.remove(d)):(e.setAttribute("aria-pressed","true"),e.setAttribute("aria-expanded","true"),d&&document.body.classList.add(d)),e.addEventListener("click",t)}}}))}))})(); \ No newline at end of file diff --git a/src/toggle-block/block.json b/src/toggle-block/block.json index 7fc1d5a..3668239 100644 --- a/src/toggle-block/block.json +++ b/src/toggle-block/block.json @@ -16,6 +16,10 @@ "file:../src/view.css" ], "attributes": { + "bodyClass": { + "type": "string", + "default": "" + }, "buttonText": { "type": "string", "default": "" diff --git a/src/toggle-block/index.js b/src/toggle-block/index.js index 687535f..d52f240 100644 --- a/src/toggle-block/index.js +++ b/src/toggle-block/index.js @@ -13,7 +13,7 @@ import metadata from './block.json'; const Edit = (props) => { const { - attributes: { buttonText, controlsId, labelText }, + attributes: { bodyClass, buttonText, controlsId, labelText }, setAttributes, } = props; @@ -43,6 +43,17 @@ const Edit = (props) => { setAttributes({ labelText: value }) } /> + + setAttributes({ bodyClass: value }) + } + /> { const Save = (props) => { const { - attributes: { buttonText, controlsId, labelText }, + attributes: { bodyClass, buttonText, controlsId, labelText }, } = props; return ( @@ -69,6 +80,7 @@ const Save = (props) => { {...useBlockProps.save()} aria-label={labelText} aria-controls={controlsId} + {...(bodyClass && { 'data-body-class': bodyClass })} > {buttonText} diff --git a/src/toggle-block/view.js b/src/toggle-block/view.js index 2a20104..77c4941 100644 --- a/src/toggle-block/view.js +++ b/src/toggle-block/view.js @@ -12,6 +12,8 @@ return; } + const bodyClass = evt.target.getAttribute('data-body-class'); + // Add a persisting class to the toggle button when it is // clicked for the first time to flag that it has, at one // point in its history, been toggled. @@ -32,10 +34,18 @@ evt.target.setAttribute('aria-pressed', 'true'); evt.target.setAttribute('aria-expanded', 'true'); toggledBlock.classList.remove('toggle-block-hidden'); + + if (bodyClass) { + document.body.classList.add(bodyClass); + } } else { evt.target.setAttribute('aria-pressed', 'false'); evt.target.setAttribute('aria-expanded', 'false'); toggledBlock.classList.add('toggle-block-hidden'); + + if (bodyClass) { + document.body.classList.remove(bodyClass); + } } }; @@ -55,12 +65,22 @@ return; } + const bodyClass = el.getAttribute('data-body-class'); + if (toggledBlock.classList.contains('toggle-block-hidden')) { el.setAttribute('aria-pressed', 'false'); el.setAttribute('aria-expanded', 'false'); + + if (bodyClass) { + document.body.classList.remove(bodyClass); + } } else { el.setAttribute('aria-pressed', 'true'); el.setAttribute('aria-expanded', 'true'); + + if (bodyClass) { + document.body.classList.add(bodyClass); + } } el.addEventListener('click', handleClick);