{"id":27,"date":"2026-06-10T20:10:45","date_gmt":"2026-06-10T20:10:45","guid":{"rendered":"https:\/\/leefurniture.co.uk\/?page_id=27"},"modified":"2026-06-10T20:16:20","modified_gmt":"2026-06-10T20:16:20","slug":"portal","status":"publish","type":"page","link":"https:\/\/leefurniture.co.uk\/","title":{"rendered":"portal"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-page\" data-elementor-id=\"27\" class=\"elementor elementor-27\">\n\t\t\t\t<div class=\"elementor-element elementor-element-63ccfc4 e-flex e-con-boxed e-con e-parent\" data-id=\"63ccfc4\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-0d9e3a8 elementor-widget elementor-widget-shortcode\" data-id=\"0d9e3a8\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"shortcode.default\">\n\t\t\t\t\t\t\t<div class=\"elementor-shortcode\">    <style type=\"text\/css\">\n        .woodworker-booking-container {\n            width: 100% !important;\n            max-width: 100% !important;\n            margin: 0 auto !important;\n            box-sizing: border-box !important;\n            height: auto !important;\n            min-height: 500px !important;\n        }\n        \/* Automatically force Elementor layout wrappers containing this block to span 100% wide and stretch to full height *\/\n        .elementor-widget-shortcode:has(.woodworker-booking-container),\n        .elementor-shortcode:has(.woodworker-booking-container),\n        .elementor-widget-container:has(.woodworker-booking-container),\n        .elementor-element:has(.woodworker-booking-container),\n        .elementor-widget:has(.woodworker-booking-container),\n        .elementor-column:has(.woodworker-booking-container),\n        .elementor-row:has(.woodworker-booking-container),\n        .elementor-container:has(.woodworker-booking-container),\n        .elementor-section:has(.woodworker-booking-container),\n        div:has(> .woodworker-booking-container),\n        div:has(> * > .woodworker-booking-container),\n        div:has(> * > * > .woodworker-booking-container) {\n            width: 100% !important;\n            max-width: 100% !important;\n            padding: 0 !important;\n            margin: 0 !important;\n            height: auto !important;\n            min-height: unset !important;\n            overflow: visible !important;\n        }\n    <\/style>\n    <div class=\"woodworker-booking-container\" style=\"width: 100% !important; max-width: 100% !important; margin: 0 auto; border-radius: 16px; overflow: hidden; background: #fafafa; border: 1px solid rgba(0,0,0,0.06); box-shadow: 0 12px 40px rgba(139, 90, 26, 0.04); height: auto; min-height: 500px;\">\n        <iframe \n            id=\"woodworker-booking-iframe\"\n            src=\"https:\/\/leefurniture.co.uk\/wp-content\/plugins\/woodworker-booking-portal\/app\/index.html?theme=amber&#038;showDifficulty=true&#038;showInstructor=true&#038;stripe_active=true\" \n            width=\"100%\" \n            height=\"850px\" \n            style=\"border: none; display: block; background: transparent; width: 100% !important; min-height: 500px; overflow: hidden !important;\" \n            allow=\"payment; camera; microphone\" \n            referrerpolicy=\"no-referrer\" \n            loading=\"lazy\"\n            scrolling=\"no\"\n        ><\/iframe>\n    <\/div>\n \n    <script type=\"text\/javascript\">\n        (function() {\n            window.addEventListener('message', function(event) {\n                \/\/ Assert confidence that message structure matches woodworking actions\n                if (!event.data || typeof event.data !== 'object') return;\n                \n                \/\/ Handle dynamic auto-resizing\n                if (event.data.action === 'woodworker_booking_resize') {\n                    var iframe = document.getElementById('woodworker-booking-iframe');\n                    if (iframe && event.data.height) {\n                        iframe.style.setProperty('height', event.data.height + 'px', 'important');\n                        \n                        \/\/ Walk up parents to clear height caps or scroll locks\n                        var parent = iframe.parentElement;\n                        while (parent && parent !== document.body && parent !== document.documentElement) {\n                            var className = '';\n                            if (parent.className) {\n                                if (typeof parent.className === 'string') {\n                                    className = parent.className;\n                                } else if (typeof parent.className === 'object' && parent.className.baseVal) {\n                                    className = parent.className.baseVal;\n                                }\n                            }\n                            \n                            var shouldReset = false;\n                            var lowerClass = className.toLowerCase();\n                            \n                            if (parent.classList && parent.classList.contains('woodworker-booking-container')) {\n                                shouldReset = true;\n                            } else if (\n                                lowerClass.indexOf('elementor') !== -1 || \n                                lowerClass.indexOf('widget') !== -1 || \n                                lowerClass.indexOf('column') !== -1 || \n                                lowerClass.indexOf('row') !== -1 || \n                                lowerClass.indexOf('container') !== -1 ||\n                                lowerClass.indexOf('wrap') !== -1 ||\n                                lowerClass.indexOf('e-con') !== -1 ||\n                                lowerClass.indexOf('section') !== -1 ||\n                                lowerClass.indexOf('main') !== -1 ||\n                                lowerClass.indexOf('content') !== -1 ||\n                                lowerClass.indexOf('post') !== -1 ||\n                                lowerClass.indexOf('page') !== -1 ||\n                                parent.tagName === 'SECTION' ||\n                                parent.tagName === 'MAIN' ||\n                                parent.tagName === 'ARTICLE'\n                            ) {\n                                shouldReset = true;\n                            }\n                            \n                            if (shouldReset) {\n                                parent.style.setProperty('height', 'auto', 'important');\n                                parent.style.setProperty('min-height', 'unset', 'important');\n                                parent.style.setProperty('overflow', 'visible', 'important');\n                            }\n                            parent = parent.parentElement;\n                        }\n                    }\n                    return;\n                }\n                \n                \/\/ Handle dynamic auto-scroll to top when modals trigger\n                if (event.data.action === 'woodworker_booking_scroll_to_top') {\n                    var iframe = document.getElementById('woodworker-booking-iframe');\n                    if (iframe) {\n                        var rect = iframe.getBoundingClientRect();\n                        \/\/ Only scroll parent viewport if the top of the iframe is scrolled off-screen above the viewport\n                        if (rect.top < -10) {\n                            iframe.scrollIntoView({ behavior: 'smooth', block: 'start' });\n                        }\n                    }\n                    return;\n                }\n                \n                if (event.data.action === 'woodworker_stripe_checkout') {\n                    console.log('Intercepted woodworker stripe payment message. Dispatching...', event.data);\n                    \n                    var payload = event.data.payload;\n                    var stripeRestoreUrl = 'https:\/\/leefurniture.co.uk\/index.php?rest_route=\/woodworker-booking\/v1\/create-checkout-session';\n\n                    \/\/ Issue asynchronous fetch request to our WordPress API endpoint\n                    fetch(stripeRestoreUrl, {\n                        method: 'POST',\n                        headers: {\n                            'Content-Type': 'application\/json'\n                        },\n                        body: JSON.stringify({\n                            courseTitle: payload.courseTitle,\n                            amount: payload.amount,\n                            email: payload.email,\n                            successUrl: window.location.href + '?booking_status=success&ref_id=' + payload.id,\n                            cancelUrl: window.location.href + '?booking_status=cancelled'\n                        })\n                    })\n                    .then(function(res) { return res.json(); })\n                    .then(function(data) {\n                        if (data.status === 'success' && data.url) {\n                            \/\/ High-speed redirect securely to Stripe Checkouts loaded via WordPress\n                            window.location.href = data.url;\n                        } else {\n                            alert('Stripe Connection Error: ' + (data.message || 'Please verify Stripe credentials in your WordPress admin dashboard.'));\n                        }\n                    })\n                    .catch(function(err) {\n                        console.error('Stripe dispatch failed:', err);\n                        alert('Unable to secure a Stripe checkout connection with woodworker.org.uk. Operating in offline client fallback mode.');\n                    });\n                }\n            });\n        })();\n    <\/script>\n    <\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t","protected":false},"excerpt":{"rendered":"","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"elementor_canvas","meta":{"footnotes":""},"class_list":["post-27","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/leefurniture.co.uk\/index.php?rest_route=\/wp\/v2\/pages\/27","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/leefurniture.co.uk\/index.php?rest_route=\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/leefurniture.co.uk\/index.php?rest_route=\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/leefurniture.co.uk\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/leefurniture.co.uk\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=27"}],"version-history":[{"count":4,"href":"https:\/\/leefurniture.co.uk\/index.php?rest_route=\/wp\/v2\/pages\/27\/revisions"}],"predecessor-version":[{"id":31,"href":"https:\/\/leefurniture.co.uk\/index.php?rest_route=\/wp\/v2\/pages\/27\/revisions\/31"}],"wp:attachment":[{"href":"https:\/\/leefurniture.co.uk\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=27"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}