| [ Index ] |
PHP Cross Reference of WordPress Trunk (Updated Daily) |
[Summary view] [Print] [Text view]
1 (function() { 2 "use strict"; 3 var wp; 4 (wp ||= {}).serverSideRender = (() => { 5 var __create = Object.create; 6 var __defProp = Object.defineProperty; 7 var __getOwnPropDesc = Object.getOwnPropertyDescriptor; 8 var __getOwnPropNames = Object.getOwnPropertyNames; 9 var __getProtoOf = Object.getPrototypeOf; 10 var __hasOwnProp = Object.prototype.hasOwnProperty; 11 var __commonJS = (cb, mod) => function __require() { 12 return mod || (0, cb[__getOwnPropNames(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports; 13 }; 14 var __export = (target, all) => { 15 for (var name in all) 16 __defProp(target, name, { get: all[name], enumerable: true }); 17 }; 18 var __copyProps = (to, from, except, desc) => { 19 if (from && typeof from === "object" || typeof from === "function") { 20 for (let key of __getOwnPropNames(from)) 21 if (!__hasOwnProp.call(to, key) && key !== except) 22 __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); 23 } 24 return to; 25 }; 26 var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps( 27 // If the importer is in node compatibility mode or this is not an ESM 28 // file that has been converted to a CommonJS file using a Babel- 29 // compatible transform (i.e. "__esModule" has not been set), then set 30 // "default" to the CommonJS "module.exports" for node compatibility. 31 isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target, 32 mod 33 )); 34 var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); 35 36 // package-external:@wordpress/element 37 var require_element = __commonJS({ 38 "package-external:@wordpress/element"(exports, module) { 39 module.exports = window.wp.element; 40 } 41 }); 42 43 // package-external:@wordpress/i18n 44 var require_i18n = __commonJS({ 45 "package-external:@wordpress/i18n"(exports, module) { 46 module.exports = window.wp.i18n; 47 } 48 }); 49 50 // package-external:@wordpress/components 51 var require_components = __commonJS({ 52 "package-external:@wordpress/components"(exports, module) { 53 module.exports = window.wp.components; 54 } 55 }); 56 57 // package-external:@wordpress/data 58 var require_data = __commonJS({ 59 "package-external:@wordpress/data"(exports, module) { 60 module.exports = window.wp.data; 61 } 62 }); 63 64 // package-external:@wordpress/compose 65 var require_compose = __commonJS({ 66 "package-external:@wordpress/compose"(exports, module) { 67 module.exports = window.wp.compose; 68 } 69 }); 70 71 // package-external:@wordpress/api-fetch 72 var require_api_fetch = __commonJS({ 73 "package-external:@wordpress/api-fetch"(exports, module) { 74 module.exports = window.wp.apiFetch; 75 } 76 }); 77 78 // package-external:@wordpress/url 79 var require_url = __commonJS({ 80 "package-external:@wordpress/url"(exports, module) { 81 module.exports = window.wp.url; 82 } 83 }); 84 85 // package-external:@wordpress/blocks 86 var require_blocks = __commonJS({ 87 "package-external:@wordpress/blocks"(exports, module) { 88 module.exports = window.wp.blocks; 89 } 90 }); 91 92 // vendor-external:react/jsx-runtime 93 var require_jsx_runtime = __commonJS({ 94 "vendor-external:react/jsx-runtime"(exports, module) { 95 module.exports = window.ReactJSXRuntime; 96 } 97 }); 98 99 // packages/server-side-render/build-module/index.mjs 100 var index_exports = {}; 101 __export(index_exports, { 102 ServerSideRender: () => ServerSideRenderWithPostId, 103 default: () => index_default, 104 useServerSideRender: () => useServerSideRender 105 }); 106 107 // packages/server-side-render/build-module/server-side-render.mjs 108 var import_element2 = __toESM(require_element(), 1); 109 var import_i18n = __toESM(require_i18n(), 1); 110 var import_components = __toESM(require_components(), 1); 111 var import_data = __toESM(require_data(), 1); 112 113 // packages/server-side-render/build-module/hook.mjs 114 var import_compose = __toESM(require_compose(), 1); 115 var import_element = __toESM(require_element(), 1); 116 var import_api_fetch = __toESM(require_api_fetch(), 1); 117 var import_url = __toESM(require_url(), 1); 118 var import_blocks = __toESM(require_blocks(), 1); 119 function rendererPath(block, attributes = null, urlQueryArgs = {}) { 120 return (0, import_url.addQueryArgs)(`/wp/v2/block-renderer/$block}`, { 121 context: "edit", 122 ...null !== attributes ? { attributes } : {}, 123 ...urlQueryArgs 124 }); 125 } 126 function removeBlockSupportAttributes(attributes) { 127 const { 128 backgroundColor, 129 borderColor, 130 fontFamily, 131 fontSize, 132 gradient, 133 textColor, 134 className, 135 ...restAttributes 136 } = attributes; 137 const { 138 border, 139 color, 140 elements, 141 shadow, 142 spacing, 143 typography, 144 ...restStyles 145 } = attributes?.style || {}; 146 return { 147 ...restAttributes, 148 style: restStyles 149 }; 150 } 151 function useServerSideRender(args) { 152 const [response, setResponse] = (0, import_element.useState)({ 153 status: "idle" 154 }); 155 const shouldDebounceRef = (0, import_element.useRef)(false); 156 const { 157 attributes, 158 block, 159 skipBlockSupportAttributes = false, 160 httpMethod = "GET", 161 urlQueryArgs 162 } = args; 163 let sanitizedAttributes = attributes && (0, import_blocks.sanitizeBlockAttributes)(block, attributes); 164 if (skipBlockSupportAttributes && sanitizedAttributes) { 165 sanitizedAttributes = removeBlockSupportAttributes(sanitizedAttributes); 166 } 167 const isPostRequest = "POST" === httpMethod; 168 const urlAttributes = isPostRequest ? null : sanitizedAttributes; 169 const path = rendererPath(block, urlAttributes, urlQueryArgs); 170 const body = isPostRequest ? JSON.stringify({ attributes: sanitizedAttributes ?? null }) : void 0; 171 (0, import_element.useEffect)(() => { 172 const controller = new AbortController(); 173 const debouncedFetch = (0, import_compose.debounce)( 174 function() { 175 { 176 setResponse({ status: "loading" }); 177 (0, import_api_fetch.default)({ 178 path, 179 method: isPostRequest ? "POST" : "GET", 180 body, 181 headers: isPostRequest ? { 182 "Content-Type": "application/json" 183 } : {}, 184 signal: controller.signal 185 }).then((res) => { 186 setResponse({ 187 status: "success", 188 content: res ? res.rendered : "" 189 }); 190 }).catch((error) => { 191 if (error instanceof Error && error.name === "AbortError") { 192 return; 193 } 194 setResponse({ 195 status: "error", 196 error: error instanceof Error ? error.message : String(error) 197 }); 198 }).finally(() => { 199 shouldDebounceRef.current = true; 200 }); 201 } 202 }, 203 shouldDebounceRef.current ? 500 : 0 204 ); 205 debouncedFetch(); 206 return () => { 207 controller.abort(); 208 debouncedFetch.cancel(); 209 }; 210 }, [path, isPostRequest, body]); 211 return response; 212 } 213 214 // packages/server-side-render/build-module/server-side-render.mjs 215 var import_jsx_runtime = __toESM(require_jsx_runtime(), 1); 216 var EMPTY_OBJECT = {}; 217 function DefaultEmptyResponsePlaceholder({ className }) { 218 return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_components.Placeholder, { className, children: (0, import_i18n.__)("Block rendered as empty.") }); 219 } 220 function DefaultErrorResponsePlaceholder({ 221 message, 222 className 223 }) { 224 const errorMessage = (0, import_i18n.sprintf)( 225 // translators: %s: error message describing the problem 226 (0, import_i18n.__)("Error loading block: %s"), 227 message || (0, import_i18n.__)("Unknown error") 228 ); 229 return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_components.Placeholder, { className, children: errorMessage }); 230 } 231 function DefaultLoadingResponsePlaceholder({ 232 children 233 }) { 234 const [showLoader, setShowLoader] = (0, import_element2.useState)(false); 235 (0, import_element2.useEffect)(() => { 236 const timeout = setTimeout(() => { 237 setShowLoader(true); 238 }, 1e3); 239 return () => clearTimeout(timeout); 240 }, []); 241 return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { style: { position: "relative" }, children: [ 242 showLoader && /* @__PURE__ */ (0, import_jsx_runtime.jsx)( 243 "div", 244 { 245 style: { 246 position: "absolute", 247 top: "50%", 248 left: "50%", 249 marginTop: "-9px", 250 marginLeft: "-9px" 251 }, 252 children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_components.Spinner, {}) 253 } 254 ), 255 /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { style: { opacity: showLoader ? "0.3" : 1 }, children }) 256 ] }); 257 } 258 function ServerSideRender(props) { 259 const prevContentRef = (0, import_element2.useRef)(""); 260 const { 261 className, 262 EmptyResponsePlaceholder = DefaultEmptyResponsePlaceholder, 263 ErrorResponsePlaceholder = DefaultErrorResponsePlaceholder, 264 LoadingResponsePlaceholder = DefaultLoadingResponsePlaceholder, 265 ...restProps 266 } = props; 267 const { content, status, error } = useServerSideRender(restProps); 268 (0, import_element2.useEffect)(() => { 269 if (content) { 270 prevContentRef.current = content; 271 } 272 }, [content]); 273 if (status === "loading") { 274 return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(LoadingResponsePlaceholder, { ...props, children: !!prevContentRef.current && /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_element2.RawHTML, { 275 className, 276 // eslint-disable-next-line react-hooks/refs 277 children: prevContentRef.current 278 }) }); 279 } 280 if (status === "success" && !content) { 281 return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(EmptyResponsePlaceholder, { ...props }); 282 } 283 if (status === "error") { 284 return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(ErrorResponsePlaceholder, { message: error, ...props }); 285 } 286 return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_element2.RawHTML, { className, children: content || "" }); 287 } 288 function ServerSideRenderWithPostId({ 289 urlQueryArgs = EMPTY_OBJECT, 290 ...props 291 }) { 292 const currentPostId = (0, import_data.useSelect)((select) => { 293 const editorStore = select("core/editor"); 294 const postId = editorStore?.getCurrentPostId?.(); 295 return postId && typeof postId === "number" ? postId : null; 296 }, []); 297 const newUrlQueryArgs = (0, import_element2.useMemo)(() => { 298 if (!currentPostId) { 299 return urlQueryArgs; 300 } 301 return { 302 post_id: currentPostId, 303 ...urlQueryArgs 304 }; 305 }, [currentPostId, urlQueryArgs]); 306 return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(ServerSideRender, { urlQueryArgs: newUrlQueryArgs, ...props }); 307 } 308 309 // packages/server-side-render/build-module/index.mjs 310 var ServerSideRenderCompat = ServerSideRenderWithPostId; 311 ServerSideRenderCompat.ServerSideRender = ServerSideRenderWithPostId; 312 ServerSideRenderCompat.useServerSideRender = useServerSideRender; 313 var index_default = ServerSideRenderCompat; 314 return __toCommonJS(index_exports); 315 })(); 316 if (typeof wp.serverSideRender === 'object' && wp.serverSideRender.default) { wp.serverSideRender = wp.serverSideRender.default; } 317 (window.wp ||= {}).serverSideRender = wp.serverSideRender; 318 })();
title
Description
Body
title
Description
Body
title
Description
Body
title
Body
| Generated : Thu Aug 13 08:20:23 2026 | Cross-referenced by PHPXref |