diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-17 07:56:49 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-17 07:56:49 +0000 |
commit | a415c29efee45520ae252d2aa28f1083a521cd7b (patch) | |
tree | f4ade4b6668ecc0765de7e1424f7c1427ad433ff /wp-includes/js/dist/server-side-render.js | |
parent | Initial commit. (diff) | |
download | wordpress-a415c29efee45520ae252d2aa28f1083a521cd7b.tar.xz wordpress-a415c29efee45520ae252d2aa28f1083a521cd7b.zip |
Adding upstream version 6.4.3+dfsg1.upstream/6.4.3+dfsg1
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'wp-includes/js/dist/server-side-render.js')
-rw-r--r-- | wp-includes/js/dist/server-side-render.js | 440 |
1 files changed, 440 insertions, 0 deletions
diff --git a/wp-includes/js/dist/server-side-render.js b/wp-includes/js/dist/server-side-render.js new file mode 100644 index 0000000..bffc7c5 --- /dev/null +++ b/wp-includes/js/dist/server-side-render.js @@ -0,0 +1,440 @@ +/******/ (function() { // webpackBootstrap +/******/ "use strict"; +/******/ var __webpack_modules__ = ({ + +/***/ 5619: +/***/ (function(module) { + + + +// do not edit .js files directly - edit src/index.jst + + + var envHasBigInt64Array = typeof BigInt64Array !== 'undefined'; + + +module.exports = function equal(a, b) { + if (a === b) return true; + + if (a && b && typeof a == 'object' && typeof b == 'object') { + if (a.constructor !== b.constructor) return false; + + var length, i, keys; + if (Array.isArray(a)) { + length = a.length; + if (length != b.length) return false; + for (i = length; i-- !== 0;) + if (!equal(a[i], b[i])) return false; + return true; + } + + + if ((a instanceof Map) && (b instanceof Map)) { + if (a.size !== b.size) return false; + for (i of a.entries()) + if (!b.has(i[0])) return false; + for (i of a.entries()) + if (!equal(i[1], b.get(i[0]))) return false; + return true; + } + + if ((a instanceof Set) && (b instanceof Set)) { + if (a.size !== b.size) return false; + for (i of a.entries()) + if (!b.has(i[0])) return false; + return true; + } + + if (ArrayBuffer.isView(a) && ArrayBuffer.isView(b)) { + length = a.length; + if (length != b.length) return false; + for (i = length; i-- !== 0;) + if (a[i] !== b[i]) return false; + return true; + } + + + if (a.constructor === RegExp) return a.source === b.source && a.flags === b.flags; + if (a.valueOf !== Object.prototype.valueOf) return a.valueOf() === b.valueOf(); + if (a.toString !== Object.prototype.toString) return a.toString() === b.toString(); + + keys = Object.keys(a); + length = keys.length; + if (length !== Object.keys(b).length) return false; + + for (i = length; i-- !== 0;) + if (!Object.prototype.hasOwnProperty.call(b, keys[i])) return false; + + for (i = length; i-- !== 0;) { + var key = keys[i]; + + if (!equal(a[key], b[key])) return false; + } + + return true; + } + + // true if both NaN, false otherwise + return a!==a && b!==b; +}; + + +/***/ }) + +/******/ }); +/************************************************************************/ +/******/ // The module cache +/******/ var __webpack_module_cache__ = {}; +/******/ +/******/ // The require function +/******/ function __webpack_require__(moduleId) { +/******/ // Check if module is in cache +/******/ var cachedModule = __webpack_module_cache__[moduleId]; +/******/ if (cachedModule !== undefined) { +/******/ return cachedModule.exports; +/******/ } +/******/ // Create a new module (and put it into the cache) +/******/ var module = __webpack_module_cache__[moduleId] = { +/******/ // no module.id needed +/******/ // no module.loaded needed +/******/ exports: {} +/******/ }; +/******/ +/******/ // Execute the module function +/******/ __webpack_modules__[moduleId](module, module.exports, __webpack_require__); +/******/ +/******/ // Return the exports of the module +/******/ return module.exports; +/******/ } +/******/ +/************************************************************************/ +/******/ /* webpack/runtime/compat get default export */ +/******/ !function() { +/******/ // getDefaultExport function for compatibility with non-harmony modules +/******/ __webpack_require__.n = function(module) { +/******/ var getter = module && module.__esModule ? +/******/ function() { return module['default']; } : +/******/ function() { return module; }; +/******/ __webpack_require__.d(getter, { a: getter }); +/******/ return getter; +/******/ }; +/******/ }(); +/******/ +/******/ /* webpack/runtime/define property getters */ +/******/ !function() { +/******/ // define getter functions for harmony exports +/******/ __webpack_require__.d = function(exports, definition) { +/******/ for(var key in definition) { +/******/ if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) { +/******/ Object.defineProperty(exports, key, { enumerable: true, get: definition[key] }); +/******/ } +/******/ } +/******/ }; +/******/ }(); +/******/ +/******/ /* webpack/runtime/hasOwnProperty shorthand */ +/******/ !function() { +/******/ __webpack_require__.o = function(obj, prop) { return Object.prototype.hasOwnProperty.call(obj, prop); } +/******/ }(); +/******/ +/************************************************************************/ +var __webpack_exports__ = {}; +// This entry need to be wrapped in an IIFE because it need to be isolated against other modules in the chunk. +!function() { + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + "default": function() { return /* binding */ build_module; } +}); + +;// CONCATENATED MODULE: external ["wp","element"] +var external_wp_element_namespaceObject = window["wp"]["element"]; +;// CONCATENATED MODULE: external ["wp","data"] +var external_wp_data_namespaceObject = window["wp"]["data"]; +// EXTERNAL MODULE: ./node_modules/fast-deep-equal/es6/index.js +var es6 = __webpack_require__(5619); +var es6_default = /*#__PURE__*/__webpack_require__.n(es6); +;// CONCATENATED MODULE: external ["wp","compose"] +var external_wp_compose_namespaceObject = window["wp"]["compose"]; +;// CONCATENATED MODULE: external ["wp","i18n"] +var external_wp_i18n_namespaceObject = window["wp"]["i18n"]; +;// CONCATENATED MODULE: external ["wp","apiFetch"] +var external_wp_apiFetch_namespaceObject = window["wp"]["apiFetch"]; +var external_wp_apiFetch_default = /*#__PURE__*/__webpack_require__.n(external_wp_apiFetch_namespaceObject); +;// CONCATENATED MODULE: external ["wp","url"] +var external_wp_url_namespaceObject = window["wp"]["url"]; +;// CONCATENATED MODULE: external ["wp","components"] +var external_wp_components_namespaceObject = window["wp"]["components"]; +;// CONCATENATED MODULE: external ["wp","blocks"] +var external_wp_blocks_namespaceObject = window["wp"]["blocks"]; +;// CONCATENATED MODULE: ./node_modules/@wordpress/server-side-render/build-module/server-side-render.js + +/** + * External dependencies + */ + + +/** + * WordPress dependencies + */ + + + + + + + +const EMPTY_OBJECT = {}; +function rendererPath(block, attributes = null, urlQueryArgs = {}) { + return (0,external_wp_url_namespaceObject.addQueryArgs)(`/wp/v2/block-renderer/${block}`, { + context: 'edit', + ...(null !== attributes ? { + attributes + } : {}), + ...urlQueryArgs + }); +} +function removeBlockSupportAttributes(attributes) { + const { + backgroundColor, + borderColor, + fontFamily, + fontSize, + gradient, + textColor, + className, + ...restAttributes + } = attributes; + const { + border, + color, + elements, + spacing, + typography, + ...restStyles + } = attributes?.style || EMPTY_OBJECT; + return { + ...restAttributes, + style: restStyles + }; +} +function DefaultEmptyResponsePlaceholder({ + className +}) { + return (0,external_wp_element_namespaceObject.createElement)(external_wp_components_namespaceObject.Placeholder, { + className: className + }, (0,external_wp_i18n_namespaceObject.__)('Block rendered as empty.')); +} +function DefaultErrorResponsePlaceholder({ + response, + className +}) { + const errorMessage = (0,external_wp_i18n_namespaceObject.sprintf)( + // translators: %s: error message describing the problem + (0,external_wp_i18n_namespaceObject.__)('Error loading block: %s'), response.errorMsg); + return (0,external_wp_element_namespaceObject.createElement)(external_wp_components_namespaceObject.Placeholder, { + className: className + }, errorMessage); +} +function DefaultLoadingResponsePlaceholder({ + children, + showLoader +}) { + return (0,external_wp_element_namespaceObject.createElement)("div", { + style: { + position: 'relative' + } + }, showLoader && (0,external_wp_element_namespaceObject.createElement)("div", { + style: { + position: 'absolute', + top: '50%', + left: '50%', + marginTop: '-9px', + marginLeft: '-9px' + } + }, (0,external_wp_element_namespaceObject.createElement)(external_wp_components_namespaceObject.Spinner, null)), (0,external_wp_element_namespaceObject.createElement)("div", { + style: { + opacity: showLoader ? '0.3' : 1 + } + }, children)); +} +function ServerSideRender(props) { + const { + attributes, + block, + className, + httpMethod = 'GET', + urlQueryArgs, + skipBlockSupportAttributes = false, + EmptyResponsePlaceholder = DefaultEmptyResponsePlaceholder, + ErrorResponsePlaceholder = DefaultErrorResponsePlaceholder, + LoadingResponsePlaceholder = DefaultLoadingResponsePlaceholder + } = props; + const isMountedRef = (0,external_wp_element_namespaceObject.useRef)(true); + const [showLoader, setShowLoader] = (0,external_wp_element_namespaceObject.useState)(false); + const fetchRequestRef = (0,external_wp_element_namespaceObject.useRef)(); + const [response, setResponse] = (0,external_wp_element_namespaceObject.useState)(null); + const prevProps = (0,external_wp_compose_namespaceObject.usePrevious)(props); + const [isLoading, setIsLoading] = (0,external_wp_element_namespaceObject.useState)(false); + function fetchData() { + var _sanitizedAttributes, _sanitizedAttributes2; + if (!isMountedRef.current) { + return; + } + setIsLoading(true); + let sanitizedAttributes = attributes && (0,external_wp_blocks_namespaceObject.__experimentalSanitizeBlockAttributes)(block, attributes); + if (skipBlockSupportAttributes) { + sanitizedAttributes = removeBlockSupportAttributes(sanitizedAttributes); + } + + // If httpMethod is 'POST', send the attributes in the request body instead of the URL. + // This allows sending a larger attributes object than in a GET request, where the attributes are in the URL. + const isPostRequest = 'POST' === httpMethod; + const urlAttributes = isPostRequest ? null : (_sanitizedAttributes = sanitizedAttributes) !== null && _sanitizedAttributes !== void 0 ? _sanitizedAttributes : null; + const path = rendererPath(block, urlAttributes, urlQueryArgs); + const data = isPostRequest ? { + attributes: (_sanitizedAttributes2 = sanitizedAttributes) !== null && _sanitizedAttributes2 !== void 0 ? _sanitizedAttributes2 : null + } : null; + + // Store the latest fetch request so that when we process it, we can + // check if it is the current request, to avoid race conditions on slow networks. + const fetchRequest = fetchRequestRef.current = external_wp_apiFetch_default()({ + path, + data, + method: isPostRequest ? 'POST' : 'GET' + }).then(fetchResponse => { + if (isMountedRef.current && fetchRequest === fetchRequestRef.current && fetchResponse) { + setResponse(fetchResponse.rendered); + } + }).catch(error => { + if (isMountedRef.current && fetchRequest === fetchRequestRef.current) { + setResponse({ + error: true, + errorMsg: error.message + }); + } + }).finally(() => { + if (isMountedRef.current && fetchRequest === fetchRequestRef.current) { + setIsLoading(false); + } + }); + return fetchRequest; + } + const debouncedFetchData = (0,external_wp_compose_namespaceObject.useDebounce)(fetchData, 500); + + // When the component unmounts, set isMountedRef to false. This will + // let the async fetch callbacks know when to stop. + (0,external_wp_element_namespaceObject.useEffect)(() => () => { + isMountedRef.current = false; + }, []); + (0,external_wp_element_namespaceObject.useEffect)(() => { + // Don't debounce the first fetch. This ensures that the first render + // shows data as soon as possible. + if (prevProps === undefined) { + fetchData(); + } else if (!es6_default()(prevProps, props)) { + debouncedFetchData(); + } + }); + + /** + * Effect to handle showing the loading placeholder. + * Show it only if there is no previous response or + * the request takes more than one second. + */ + (0,external_wp_element_namespaceObject.useEffect)(() => { + if (!isLoading) { + return; + } + const timeout = setTimeout(() => { + setShowLoader(true); + }, 1000); + return () => clearTimeout(timeout); + }, [isLoading]); + const hasResponse = !!response; + const hasEmptyResponse = response === ''; + const hasError = response?.error; + if (isLoading) { + return (0,external_wp_element_namespaceObject.createElement)(LoadingResponsePlaceholder, { + ...props, + showLoader: showLoader + }, hasResponse && (0,external_wp_element_namespaceObject.createElement)(external_wp_element_namespaceObject.RawHTML, { + className: className + }, response)); + } + if (hasEmptyResponse || !hasResponse) { + return (0,external_wp_element_namespaceObject.createElement)(EmptyResponsePlaceholder, { + ...props + }); + } + if (hasError) { + return (0,external_wp_element_namespaceObject.createElement)(ErrorResponsePlaceholder, { + response: response, + ...props + }); + } + return (0,external_wp_element_namespaceObject.createElement)(external_wp_element_namespaceObject.RawHTML, { + className: className + }, response); +} + +;// CONCATENATED MODULE: ./node_modules/@wordpress/server-side-render/build-module/index.js + +/** + * WordPress dependencies + */ + + + +/** + * Internal dependencies + */ + + +/** + * Constants + */ +const build_module_EMPTY_OBJECT = {}; +const ExportedServerSideRender = (0,external_wp_data_namespaceObject.withSelect)(select => { + // FIXME: @wordpress/server-side-render should not depend on @wordpress/editor. + // It is used by blocks that can be loaded into a *non-post* block editor. + // eslint-disable-next-line @wordpress/data-no-store-string-literals + const coreEditorSelect = select('core/editor'); + if (coreEditorSelect) { + const currentPostId = coreEditorSelect.getCurrentPostId(); + // For templates and template parts we use a custom ID format. + // Since they aren't real posts, we don't want to use their ID + // for server-side rendering. Since they use a string based ID, + // we can assume real post IDs are numbers. + if (currentPostId && typeof currentPostId === 'number') { + return { + currentPostId + }; + } + } + return build_module_EMPTY_OBJECT; +})(({ + urlQueryArgs = build_module_EMPTY_OBJECT, + currentPostId, + ...props +}) => { + const newUrlQueryArgs = (0,external_wp_element_namespaceObject.useMemo)(() => { + if (!currentPostId) { + return urlQueryArgs; + } + return { + post_id: currentPostId, + ...urlQueryArgs + }; + }, [currentPostId, urlQueryArgs]); + return (0,external_wp_element_namespaceObject.createElement)(ServerSideRender, { + urlQueryArgs: newUrlQueryArgs, + ...props + }); +}); +/* harmony default export */ var build_module = (ExportedServerSideRender); + +}(); +(window.wp = window.wp || {}).serverSideRender = __webpack_exports__["default"]; +/******/ })() +;
\ No newline at end of file |