PluginProbe
Gutenberg / 24.0.0
Gutenberg v24.0.0
24.0.0 23.9.1 23.9.0 23.8.0 23.7.2 23.7.1 23.7.0 23.6.1 23.6.2 23.6.0 23.5.3 23.5.2 23.5.1 23.5.0 23.4.0 23.3.2 23.3.1 23.3.0 23.2.0 23.2.1 23.2.2 23.1.1 23.1.0 23.0.1 12.6.0 All 403 releases
gutenberg / build / scripts / server-side-render / index.js

index.js in Gutenberg 24.0.0, at build/scripts/server-side-render/index.js

320 lines 11.3 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
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 })();
319 //# sourceMappingURL=index.js.map
320