| [ 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 120 // packages/server-side-render/build-module/errors.mjs 121 function parseErrorMessage(error) { 122 if (error?.code === "rest_invalid_param" && error.data?.params?.attributes && 1 === Object.values(error.data.params).length) { 123 return `Invalid attribute: $error.data.params.attributes}`; 124 } 125 if (error instanceof Error) { 126 return error.message; 127 } 128 if (!error) { 129 return ""; 130 } else if (typeof error.message === "string") { 131 return error.message; 132 } else if (typeof error === "string") { 133 return error; 134 } else if ( 135 // Only consider own method, lest we erroneously end up calling 136 // `Object#toString` at the end of the prototype chain, thereby 137 // returning `"[object Object]"`. 138 Object.hasOwn(error, "toString") && typeof error.toString === "function" 139 ) { 140 const result = error.toString(); 141 if (typeof result === "string") { 142 return result; 143 } 144 } 145 return ""; 146 } 147 148 // packages/server-side-render/build-module/hook.mjs 149 function rendererPath(block, attributes = null, urlQueryArgs = {}) { 150 return (0, import_url.addQueryArgs)(`/wp/v2/block-renderer/$block}`, { 151 context: "edit", 152 ...null !== attributes ? { attributes } : {}, 153 ...urlQueryArgs 154 }); 155 } 156 function removeBlockSupportAttributes(attributes) { 157 const { 158 backgroundColor, 159 borderColor, 160 fontFamily, 161 fontSize, 162 gradient, 163 textColor, 164 className, 165 ...restAttributes 166 } = attributes; 167 const { 168 border, 169 color, 170 elements, 171 shadow, 172 spacing, 173 typography, 174 ...restStyles 175 } = attributes?.style || {}; 176 return { 177 ...restAttributes, 178 style: restStyles 179 }; 180 } 181 function useServerSideRender(args) { 182 const [response, setResponse] = (0, import_element.useState)({ 183 status: "idle" 184 }); 185 const shouldDebounceRef = (0, import_element.useRef)(false); 186 const { 187 attributes, 188 block, 189 skipBlockSupportAttributes = false, 190 httpMethod = "GET", 191 urlQueryArgs 192 } = args; 193 let sanitizedAttributes = attributes && (0, import_blocks.sanitizeBlockAttributes)(block, attributes); 194 if (skipBlockSupportAttributes && sanitizedAttributes) { 195 sanitizedAttributes = removeBlockSupportAttributes(sanitizedAttributes); 196 } 197 const isPostRequest = "POST" === httpMethod; 198 const urlAttributes = isPostRequest ? null : sanitizedAttributes; 199 const path = rendererPath(block, urlAttributes, urlQueryArgs); 200 const body = isPostRequest ? JSON.stringify({ attributes: sanitizedAttributes ?? null }) : void 0; 201 (0, import_element.useEffect)(() => { 202 const controller = new AbortController(); 203 const debouncedFetch = (0, import_compose.debounce)( 204 function() { 205 { 206 setResponse({ status: "loading" }); 207 (0, import_api_fetch.default)({ 208 path, 209 method: isPostRequest ? "POST" : "GET", 210 body, 211 headers: isPostRequest ? { 212 "Content-Type": "application/json" 213 } : {}, 214 signal: controller.signal 215 }).then((res) => { 216 setResponse({ 217 status: "success", 218 content: res ? res.rendered : "" 219 }); 220 }).catch((error) => { 221 if (error instanceof Error && error.name === "AbortError") { 222 return; 223 } 224 console.warn(error); 225 setResponse({ 226 status: "error", 227 error: parseErrorMessage(error) 228 }); 229 }).finally(() => { 230 shouldDebounceRef.current = true; 231 }); 232 } 233 }, 234 shouldDebounceRef.current ? 500 : 0 235 ); 236 debouncedFetch(); 237 return () => { 238 controller.abort(); 239 debouncedFetch.cancel(); 240 }; 241 }, [path, isPostRequest, body]); 242 return response; 243 } 244 245 // packages/server-side-render/build-module/server-side-render.mjs 246 var import_jsx_runtime = __toESM(require_jsx_runtime(), 1); 247 var EMPTY_OBJECT = {}; 248 function DefaultEmptyResponsePlaceholder({ className }) { 249 return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_components.Placeholder, { className, children: (0, import_i18n.__)("Block rendered as empty.") }); 250 } 251 function DefaultErrorResponsePlaceholder({ 252 message, 253 className 254 }) { 255 const errorMessage = (0, import_i18n.sprintf)( 256 // translators: %s: error message describing the problem 257 (0, import_i18n.__)("Error loading block: %s"), 258 message || (0, import_i18n.__)("Unknown error") 259 ); 260 return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_components.Placeholder, { className, children: errorMessage }); 261 } 262 function DefaultLoadingResponsePlaceholder({ 263 children 264 }) { 265 const [showLoader, setShowLoader] = (0, import_element2.useState)(false); 266 (0, import_element2.useEffect)(() => { 267 const timeout = setTimeout(() => { 268 setShowLoader(true); 269 }, 1e3); 270 return () => clearTimeout(timeout); 271 }, []); 272 return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { style: { position: "relative" }, children: [ 273 showLoader && /* @__PURE__ */ (0, import_jsx_runtime.jsx)( 274 "div", 275 { 276 style: { 277 position: "absolute", 278 top: "50%", 279 left: "50%", 280 marginTop: "-9px", 281 marginLeft: "-9px" 282 }, 283 children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_components.Spinner, {}) 284 } 285 ), 286 /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { style: { opacity: showLoader ? "0.3" : 1 }, children }) 287 ] }); 288 } 289 function ServerSideRender(props) { 290 const prevContentRef = (0, import_element2.useRef)(""); 291 const { 292 className, 293 EmptyResponsePlaceholder = DefaultEmptyResponsePlaceholder, 294 ErrorResponsePlaceholder = DefaultErrorResponsePlaceholder, 295 LoadingResponsePlaceholder = DefaultLoadingResponsePlaceholder, 296 ...restProps 297 } = props; 298 const { content, status, error } = useServerSideRender(restProps); 299 (0, import_element2.useEffect)(() => { 300 if (content) { 301 prevContentRef.current = content; 302 } 303 }, [content]); 304 if (status === "loading") { 305 return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(LoadingResponsePlaceholder, { ...props, children: !!prevContentRef.current && /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_element2.RawHTML, { 306 className, 307 // eslint-disable-next-line react-hooks/refs 308 children: prevContentRef.current 309 }) }); 310 } 311 if (status === "success" && !content) { 312 return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(EmptyResponsePlaceholder, { ...props }); 313 } 314 if (status === "error") { 315 return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(ErrorResponsePlaceholder, { message: error, ...props }); 316 } 317 return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_element2.RawHTML, { className, children: content || "" }); 318 } 319 function ServerSideRenderWithPostId({ 320 urlQueryArgs = EMPTY_OBJECT, 321 ...props 322 }) { 323 const currentPostId = (0, import_data.useSelect)((select) => { 324 const editorStore = select("core/editor"); 325 const postId = editorStore?.getCurrentPostId?.(); 326 return postId && typeof postId === "number" ? postId : null; 327 }, []); 328 const newUrlQueryArgs = (0, import_element2.useMemo)(() => { 329 if (!currentPostId) { 330 return urlQueryArgs; 331 } 332 return { 333 post_id: currentPostId, 334 ...urlQueryArgs 335 }; 336 }, [currentPostId, urlQueryArgs]); 337 return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(ServerSideRender, { urlQueryArgs: newUrlQueryArgs, ...props }); 338 } 339 340 // packages/server-side-render/build-module/index.mjs 341 var ServerSideRenderCompat = ServerSideRenderWithPostId; 342 ServerSideRenderCompat.ServerSideRender = ServerSideRenderWithPostId; 343 ServerSideRenderCompat.useServerSideRender = useServerSideRender; 344 var index_default = ServerSideRenderCompat; 345 return __toCommonJS(index_exports); 346 })(); 347 if (typeof wp.serverSideRender === 'object' && wp.serverSideRender.default) { wp.serverSideRender = wp.serverSideRender.default; } 348 (window.wp ||= {}).serverSideRender = wp.serverSideRender; 349 })();
title
Description
Body
title
Description
Body
title
Description
Body
title
Body
| Generated : Tue Nov 3 08:20:36 2026 | Cross-referenced by PHPXref |