[ Index ]

PHP Cross Reference of WordPress Trunk (Updated Daily)

Search

title

Body

[close]

/wp-includes/js/dist/ -> server-side-render.js (source)

   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  })();


Generated : Tue Nov 3 08:20:36 2026 Cross-referenced by PHPXref