Changeset 3072776
- Timestamp:
- 04/18/2024 06:24:13 AM (2 years ago)
- Location:
- headless
- Files:
-
- 6 deleted
- 9 edited
- 61 copied
-
tags/2.2.4 (copied) (copied from headless/trunk)
-
tags/2.2.4/LICENSE (copied) (copied from headless/trunk/LICENSE)
-
tags/2.2.4/README.txt (copied) (copied from headless/trunk/README.txt) (2 diffs)
-
tags/2.2.4/classes (copied) (copied from headless/trunk/classes)
-
tags/2.2.4/classes/Ajax.php (copied) (copied from headless/trunk/classes/Ajax.php)
-
tags/2.2.4/classes/BlockPreparations/CoreEmbedBlockPreparation.php (copied) (copied from headless/trunk/classes/BlockPreparations/CoreEmbedBlockPreparation.php)
-
tags/2.2.4/classes/BlockPreparations/EmbedBlockPreparation.php (copied) (copied from headless/trunk/classes/BlockPreparations/EmbedBlockPreparation.php)
-
tags/2.2.4/classes/BlockPreparations/FreeFormBlockPreparation.php (copied) (copied from headless/trunk/classes/BlockPreparations/FreeFormBlockPreparation.php)
-
tags/2.2.4/classes/BlockPreparations/GalleryBlockPreparation.php (copied) (copied from headless/trunk/classes/BlockPreparations/GalleryBlockPreparation.php)
-
tags/2.2.4/classes/BlockPreparations/ImageBlockPreparation.php (copied) (copied from headless/trunk/classes/BlockPreparations/ImageBlockPreparation.php)
-
tags/2.2.4/classes/BlockPreparations/ParagraphBlockPreparation.php (copied) (copied from headless/trunk/classes/BlockPreparations/ParagraphBlockPreparation.php)
-
tags/2.2.4/classes/BlockPreparations/ReferenceBlockPreparation.php (copied) (copied from headless/trunk/classes/BlockPreparations/ReferenceBlockPreparation.php)
-
tags/2.2.4/classes/BlockPreparations/TagCloudPreparation.php (copied) (copied from headless/trunk/classes/BlockPreparations/TagCloudPreparation.php)
-
tags/2.2.4/classes/Components/Assets.php (copied) (copied from headless/trunk/classes/Components/Assets.php)
-
tags/2.2.4/classes/Components/Database.php (copied) (copied from headless/trunk/classes/Components/Database.php)
-
tags/2.2.4/classes/Dashboard.php (copied) (copied from headless/trunk/classes/Dashboard.php)
-
tags/2.2.4/classes/Extensions.php (copied) (copied from headless/trunk/classes/Extensions.php)
-
tags/2.2.4/classes/Extensions/CommentAuthorUser.php (copied) (copied from headless/trunk/classes/Extensions/CommentAuthorUser.php)
-
tags/2.2.4/classes/Extensions/ContentBlocks.php (copied) (copied from headless/trunk/classes/Extensions/ContentBlocks.php) (1 diff)
-
tags/2.2.4/classes/Extensions/FeaturedMedia.php (copied) (copied from headless/trunk/classes/Extensions/FeaturedMedia.php)
-
tags/2.2.4/classes/Extensions/Taxonomies.php (copied) (copied from headless/trunk/classes/Extensions/Taxonomies.php)
-
tags/2.2.4/classes/Headers.php (copied) (copied from headless/trunk/classes/Headers.php)
-
tags/2.2.4/classes/Headquarter.php (copied) (copied from headless/trunk/classes/Headquarter.php)
-
tags/2.2.4/classes/Interfaces/IBlockPreparation.php (copied) (copied from headless/trunk/classes/Interfaces/IBlockPreparation.php)
-
tags/2.2.4/classes/Interfaces/ICommentRouteExtension.php (copied) (copied from headless/trunk/classes/Interfaces/ICommentRouteExtension.php)
-
tags/2.2.4/classes/Interfaces/ITermRouteExtension.php (copied) (copied from headless/trunk/classes/Interfaces/ITermRouteExtension.php)
-
tags/2.2.4/classes/Interfaces/IUserRouteExtension.php (copied) (copied from headless/trunk/classes/Interfaces/IUserRouteExtension.php)
-
tags/2.2.4/classes/Links.php (deleted)
-
tags/2.2.4/classes/Log.php (copied) (copied from headless/trunk/classes/Log.php)
-
tags/2.2.4/classes/Migration.php (copied) (copied from headless/trunk/classes/Migration.php)
-
tags/2.2.4/classes/Model/CommentRouteExtensions.php (copied) (copied from headless/trunk/classes/Model/CommentRouteExtensions.php)
-
tags/2.2.4/classes/Model/Frontend.php (copied) (copied from headless/trunk/classes/Model/Frontend.php)
-
tags/2.2.4/classes/Model/TermRouteExtensions.php (copied) (copied from headless/trunk/classes/Model/TermRouteExtensions.php)
-
tags/2.2.4/classes/Model/UserRouteExtensions.php (copied) (copied from headless/trunk/classes/Model/UserRouteExtensions.php)
-
tags/2.2.4/classes/PluginAssets.php (copied) (copied from headless/trunk/classes/PluginAssets.php)
-
tags/2.2.4/classes/Post.php (copied) (copied from headless/trunk/classes/Post.php)
-
tags/2.2.4/classes/Preview.php (copied) (copied from headless/trunk/classes/Preview.php)
-
tags/2.2.4/classes/Query.php (copied) (copied from headless/trunk/classes/Query.php)
-
tags/2.2.4/classes/Revalidate.php (copied) (copied from headless/trunk/classes/Revalidate.php)
-
tags/2.2.4/classes/Schedule.php (copied) (copied from headless/trunk/classes/Schedule.php)
-
tags/2.2.4/classes/Security.php (copied) (copied from headless/trunk/classes/Security.php)
-
tags/2.2.4/classes/Store (copied) (copied from headless/trunk/classes/Store)
-
tags/2.2.4/classes/Store/RevalidationDatabase.php (copied) (copied from headless/trunk/classes/Store/RevalidationDatabase.php)
-
tags/2.2.4/dist (copied) (copied from headless/trunk/dist)
-
tags/2.2.4/dist/admin.asset.php (copied) (copied from headless/trunk/dist/admin.asset.php) (1 diff)
-
tags/2.2.4/dist/admin.js (copied) (copied from headless/trunk/dist/admin.js) (1 diff)
-
tags/2.2.4/dist/gutenberg.asset.php (copied) (copied from headless/trunk/dist/gutenberg.asset.php) (1 diff)
-
tags/2.2.4/dist/gutenberg.css (copied) (copied from headless/trunk/dist/gutenberg.css) (1 diff)
-
tags/2.2.4/dist/gutenberg.js (copied) (copied from headless/trunk/dist/gutenberg.js) (1 diff)
-
tags/2.2.4/dist/gutenberg.ts.asset.php (deleted)
-
tags/2.2.4/dist/gutenberg.ts.js (deleted)
-
tags/2.2.4/headless.php (copied) (copied from headless/trunk/headless.php) (2 diffs)
-
tags/2.2.4/public-functions.php (copied) (copied from headless/trunk/public-functions.php)
-
tags/2.2.4/vendor (copied) (copied from headless/trunk/vendor)
-
tags/2.2.4/vendor/autoload.php (copied) (copied from headless/trunk/vendor/autoload.php)
-
tags/2.2.4/vendor/composer/ClassLoader.php (copied) (copied from headless/trunk/vendor/composer/ClassLoader.php)
-
tags/2.2.4/vendor/composer/InstalledVersions.php (copied) (copied from headless/trunk/vendor/composer/InstalledVersions.php)
-
tags/2.2.4/vendor/composer/autoload_classmap.php (copied) (copied from headless/trunk/vendor/composer/autoload_classmap.php)
-
tags/2.2.4/vendor/composer/autoload_namespaces.php (copied) (copied from headless/trunk/vendor/composer/autoload_namespaces.php)
-
tags/2.2.4/vendor/composer/autoload_psr4.php (copied) (copied from headless/trunk/vendor/composer/autoload_psr4.php)
-
tags/2.2.4/vendor/composer/autoload_real.php (copied) (copied from headless/trunk/vendor/composer/autoload_real.php)
-
tags/2.2.4/vendor/composer/autoload_static.php (copied) (copied from headless/trunk/vendor/composer/autoload_static.php)
-
tags/2.2.4/vendor/composer/installed.json (copied) (copied from headless/trunk/vendor/composer/installed.json)
-
tags/2.2.4/vendor/composer/installed.php (copied) (copied from headless/trunk/vendor/composer/installed.php) (2 diffs)
-
trunk/README.txt (modified) (2 diffs)
-
trunk/classes/Extensions/ContentBlocks.php (modified) (1 diff)
-
trunk/dist/admin.asset.php (modified) (1 diff)
-
trunk/dist/admin.js (modified) (1 diff)
-
trunk/dist/admin.js.map (deleted)
-
trunk/dist/gutenberg.asset.php (modified) (1 diff)
-
trunk/dist/gutenberg.css (modified) (1 diff)
-
trunk/dist/gutenberg.css.map (deleted)
-
trunk/dist/gutenberg.js (modified) (1 diff)
-
trunk/dist/gutenberg.js.map (deleted)
-
trunk/headless.php (modified) (2 diffs)
-
trunk/vendor/composer/installed.php (modified) (2 diffs)
Legend:
- Unmodified
- Added
- Removed
-
headless/tags/2.2.4/README.txt
r3060647 r3072776 4 4 Tags: gutenberg, block, developer, utils 5 5 Requires at least: 5.0 6 Tested up to: 6. 4.36 Tested up to: 6.5.2 7 7 Requires PHP: 8.0 8 Stable tag: 2.2. 38 Stable tag: 2.2.4 9 9 License: GPLv3 10 10 License URI: http://www.gnu.org/licenses/gpl … … 27 27 28 28 == Changelog == 29 30 = 2.2.4 = 31 * Feature: Add filter "headless_rest_response_data" 32 * Fix: Gutenberg preview in new tab link 29 33 30 34 = 2.2.3 = -
headless/tags/2.2.4/classes/Extensions/ContentBlocks.php
r3020918 r3072776 35 35 } 36 36 37 $response->set_data( $data ); 37 $data = apply_filters(Plugin::FILTER_REST_RESPONSE_DATA, $data ); 38 $response->set_data( $data ); 38 39 39 40 return $response; -
headless/tags/2.2.4/dist/admin.asset.php
r3033669 r3072776 1 <?php return array('dependencies' => array(), 'version' => ' 4395236daaca37a54365');1 <?php return array('dependencies' => array(), 'version' => 'ecdaf49b7e3ddff3eb2a'); -
headless/tags/2.2.4/dist/admin.js
r3033669 r3072776 1 /******/ (function() { // webpackBootstrap 2 /******/ "use strict"; 3 /******/ var __webpack_modules__ = ({ 4 5 /***/ "./src/store/admin-window.ts": 6 /*!***********************************!*\ 7 !*** ./src/store/admin-window.ts ***! 8 \***********************************/ 9 /***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { 10 11 __webpack_require__.r(__webpack_exports__); 12 /* harmony export */ __webpack_require__.d(__webpack_exports__, { 13 /* harmony export */ getPreviewPath: function() { return /* binding */ getPreviewPath; }, 14 /* harmony export */ getPreviewUrls: function() { return /* binding */ getPreviewUrls; } 15 /* harmony export */ }); 16 const getPreviewPath = () => window.HeadlessAdmin.preview_path; 17 const getPreviewUrls = () => { 18 return window.HeadlessAdmin.frontends.map(frontend => { 19 return frontend + getPreviewPath(); 20 }); 21 }; 22 23 /***/ }) 24 25 /******/ }); 26 /************************************************************************/ 27 /******/ // The module cache 28 /******/ var __webpack_module_cache__ = {}; 29 /******/ 30 /******/ // The require function 31 /******/ function __webpack_require__(moduleId) { 32 /******/ // Check if module is in cache 33 /******/ var cachedModule = __webpack_module_cache__[moduleId]; 34 /******/ if (cachedModule !== undefined) { 35 /******/ return cachedModule.exports; 36 /******/ } 37 /******/ // Create a new module (and put it into the cache) 38 /******/ var module = __webpack_module_cache__[moduleId] = { 39 /******/ // no module.id needed 40 /******/ // no module.loaded needed 41 /******/ exports: {} 42 /******/ }; 43 /******/ 44 /******/ // Execute the module function 45 /******/ __webpack_modules__[moduleId](module, module.exports, __webpack_require__); 46 /******/ 47 /******/ // Return the exports of the module 48 /******/ return module.exports; 49 /******/ } 50 /******/ 51 /************************************************************************/ 52 /******/ /* webpack/runtime/define property getters */ 53 /******/ !function() { 54 /******/ // define getter functions for harmony exports 55 /******/ __webpack_require__.d = function(exports, definition) { 56 /******/ for(var key in definition) { 57 /******/ if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) { 58 /******/ Object.defineProperty(exports, key, { enumerable: true, get: definition[key] }); 59 /******/ } 60 /******/ } 61 /******/ }; 62 /******/ }(); 63 /******/ 64 /******/ /* webpack/runtime/hasOwnProperty shorthand */ 65 /******/ !function() { 66 /******/ __webpack_require__.o = function(obj, prop) { return Object.prototype.hasOwnProperty.call(obj, prop); } 67 /******/ }(); 68 /******/ 69 /******/ /* webpack/runtime/make namespace object */ 70 /******/ !function() { 71 /******/ // define __esModule on exports 72 /******/ __webpack_require__.r = function(exports) { 73 /******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) { 74 /******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' }); 75 /******/ } 76 /******/ Object.defineProperty(exports, '__esModule', { value: true }); 77 /******/ }; 78 /******/ }(); 79 /******/ 80 /************************************************************************/ 81 var __webpack_exports__ = {}; 82 // This entry need to be wrapped in an IIFE because it need to be isolated against other modules in the chunk. 83 !function() { 84 /*!**********************!*\ 85 !*** ./src/admin.ts ***! 86 \**********************/ 87 __webpack_require__.r(__webpack_exports__); 88 /* harmony import */ var _store_admin_window__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./store/admin-window */ "./src/store/admin-window.ts"); 89 90 window.addEventListener("DOMContentLoaded", async () => { 91 const results = await Promise.all((0,_store_admin_window__WEBPACK_IMPORTED_MODULE_0__.getPreviewUrls)().map(url => fetch(url, { 92 credentials: "include" 93 }).then(res => res.json()))); 94 }); 95 }(); 96 /******/ })() 97 ; 98 //# sourceMappingURL=admin.js.map 1 !function(){"use strict";window.addEventListener("DOMContentLoaded",(async()=>{await Promise.all(window.HeadlessAdmin.frontends.map((e=>e+window.HeadlessAdmin.preview_path)).map((e=>fetch(e,{credentials:"include"}).then((e=>e.json())))))}))}(); -
headless/tags/2.2.4/dist/gutenberg.asset.php
r3033669 r3072776 1 <?php return array('dependencies' => array('react', 'wp-components', 'wp-data', 'wp-edit-post', 'wp-element', 'wp-plugins'), 'version' => ' d6a44e1effbbfab625f6');1 <?php return array('dependencies' => array('react', 'wp-components', 'wp-data', 'wp-edit-post', 'wp-element', 'wp-plugins'), 'version' => 'a2d2fb477c2bc904a66b'); -
headless/tags/2.2.4/dist/gutenberg.css
r3033669 r3072776 1 /*!*********************************************************************************************************************************************************************************************************************************************************************************************!*\ 2 !*** css ./node_modules/.pnpm/css-loader@6.8.1_webpack@5.88.2/node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[2].use[1]!./node_modules/.pnpm/postcss-loader@6.2.1_postcss@8.4.31_webpack@5.88.2/node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[2].use[2]!./src/styles.css ***! 3 \*********************************************************************************************************************************************************************************************************************************************************************************************/ 4 .block-editor-post-preview__dropdown-content .components-menu-group .edit-post-header-preview__grouping-external { 5 display: none; 6 } 7 #headless-preview-link { 8 display: flex; 9 justify-content: space-between; 10 } 11 12 #headless-preview-link.is-disabled { 13 color: grey; 14 border-color: lightgrey; 15 outline-color: lightgrey; 16 } 17 18 19 20 /*# sourceMappingURL=gutenberg.css.map*/ 1 #headless-preview-link{display:flex;justify-content:space-between}#headless-preview-link.is-disabled{border-color:#d3d3d3;color:grey;outline-color:#d3d3d3} -
headless/tags/2.2.4/dist/gutenberg.js
r3033669 r3072776 1 /******/ (function() { // webpackBootstrap 2 /******/ "use strict"; 3 /******/ var __webpack_modules__ = ({ 4 5 /***/ "./src/components/ReloadPanel.tsx": 6 /*!****************************************!*\ 7 !*** ./src/components/ReloadPanel.tsx ***! 8 \****************************************/ 9 /***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { 10 11 __webpack_require__.r(__webpack_exports__); 12 /* harmony export */ __webpack_require__.d(__webpack_exports__, { 13 /* harmony export */ "default": function() { return /* binding */ ReloadPanel; } 14 /* harmony export */ }); 15 /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react"); 16 /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__); 17 /* harmony import */ var _wordpress_edit_post__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @wordpress/edit-post */ "@wordpress/edit-post"); 18 /* harmony import */ var _wordpress_edit_post__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_wordpress_edit_post__WEBPACK_IMPORTED_MODULE_1__); 19 /* harmony import */ var _wordpress_components__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @wordpress/components */ "@wordpress/components"); 20 /* harmony import */ var _wordpress_components__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_wordpress_components__WEBPACK_IMPORTED_MODULE_2__); 21 /* harmony import */ var _hooks_use_reload__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../hooks/use-reload */ "./src/hooks/use-reload.ts"); 22 /* harmony import */ var _store_window__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../store/window */ "./src/store/window.ts"); 23 /* harmony import */ var _wordpress_element__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @wordpress/element */ "@wordpress/element"); 24 /* harmony import */ var _wordpress_element__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(_wordpress_element__WEBPACK_IMPORTED_MODULE_5__); 25 26 27 28 29 30 31 const buildController = () => { 32 const fns = new Map(); 33 return { 34 add: (frontend, fn) => { 35 fns.set(frontend, fn); 36 }, 37 run: () => { 38 fns.forEach(fn => { 39 fn(); 40 }); 41 } 42 }; 43 }; 44 const FrontendItem = ({ 45 index, 46 baseUrl, 47 controller, 48 onStateChanged 49 }) => { 50 const { 51 state, 52 reload 53 } = (0,_hooks_use_reload__WEBPACK_IMPORTED_MODULE_3__.useReload)(index); 54 const post = (0,_hooks_use_reload__WEBPACK_IMPORTED_MODULE_3__.usePost)(); 55 const url = (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_5__.useMemo)(() => { 56 const link = post.link; 57 const url = new URL(link); 58 ; 59 return baseUrl.replace(/^\/|\/$/g, '') + url.pathname; 60 }, [post.link]); 61 (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_5__.useEffect)(() => { 62 controller.add(index, reload); 63 }, [index]); 64 (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_5__.useEffect)(() => { 65 onStateChanged(index, state); 66 }, [state]); 67 return (0,react__WEBPACK_IMPORTED_MODULE_0__.createElement)("div", { 68 title: url 69 }, (0,react__WEBPACK_IMPORTED_MODULE_0__.createElement)("a", { 70 href: url, 71 target: "_blank" 72 }, "Frontend ", index), state == "loading" && (0,react__WEBPACK_IMPORTED_MODULE_0__.createElement)(react__WEBPACK_IMPORTED_MODULE_0__.Fragment, null, " \uD83E\uDDF9"), state == "success" && (0,react__WEBPACK_IMPORTED_MODULE_0__.createElement)(react__WEBPACK_IMPORTED_MODULE_0__.Fragment, null, " \u2705"), state == "error" && (0,react__WEBPACK_IMPORTED_MODULE_0__.createElement)(react__WEBPACK_IMPORTED_MODULE_0__.Fragment, null, " \uD83D\uDEA8")); 73 }; 74 function ReloadPanel() { 75 const frontends = (0,_store_window__WEBPACK_IMPORTED_MODULE_4__.getFrontends)(); 76 const controller = (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_5__.useMemo)(() => buildController(), []); 77 const [loadingState, setLoadingState] = (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_5__.useState)({}); 78 const canRevalidate = (0,_hooks_use_reload__WEBPACK_IMPORTED_MODULE_3__.useCanRevalidate)(); 79 const handleClick = () => { 80 controller.run(); 81 }; 82 const isLoading = Object.values(loadingState).find(value => value == true); 83 return (0,react__WEBPACK_IMPORTED_MODULE_0__.createElement)(_wordpress_edit_post__WEBPACK_IMPORTED_MODULE_1__.PluginDocumentSettingPanel, { 84 title: "Headless" 85 }, canRevalidate ? (0,react__WEBPACK_IMPORTED_MODULE_0__.createElement)(react__WEBPACK_IMPORTED_MODULE_0__.Fragment, null, (0,react__WEBPACK_IMPORTED_MODULE_0__.createElement)("ol", null, frontends.map((frontend, index) => { 86 return (0,react__WEBPACK_IMPORTED_MODULE_0__.createElement)("li", { 87 key: index 88 }, (0,react__WEBPACK_IMPORTED_MODULE_0__.createElement)(FrontendItem, { 89 baseUrl: frontend, 90 index: index, 91 controller: controller, 92 onStateChanged: (index, state) => { 93 setLoadingState(prev => { 94 const copy = { 95 ...prev 96 }; 97 copy[index] = state == "loading"; 98 return copy; 99 }); 100 } 101 })); 102 })), (0,react__WEBPACK_IMPORTED_MODULE_0__.createElement)(_wordpress_components__WEBPACK_IMPORTED_MODULE_2__.Button, { 103 variant: "secondary", 104 disabled: isLoading || !canRevalidate, 105 onClick: handleClick 106 }, "Revalidate cache")) : (0,react__WEBPACK_IMPORTED_MODULE_0__.createElement)("p", { 107 className: "description" 108 }, "Only published contents can be revalidated.")); 109 } 110 111 /***/ }), 112 113 /***/ "./src/hooks/use-reload.ts": 114 /*!*********************************!*\ 115 !*** ./src/hooks/use-reload.ts ***! 116 \*********************************/ 117 /***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { 118 119 __webpack_require__.r(__webpack_exports__); 120 /* harmony export */ __webpack_require__.d(__webpack_exports__, { 121 /* harmony export */ useCanRevalidate: function() { return /* binding */ useCanRevalidate; }, 122 /* harmony export */ usePost: function() { return /* binding */ usePost; }, 123 /* harmony export */ useReload: function() { return /* binding */ useReload; } 124 /* harmony export */ }); 125 /* harmony import */ var _store_window__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../store/window */ "./src/store/window.ts"); 126 /* harmony import */ var _wordpress_data__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @wordpress/data */ "@wordpress/data"); 127 /* harmony import */ var _wordpress_data__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_wordpress_data__WEBPACK_IMPORTED_MODULE_1__); 128 /* harmony import */ var _wordpress_element__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @wordpress/element */ "@wordpress/element"); 129 /* harmony import */ var _wordpress_element__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_wordpress_element__WEBPACK_IMPORTED_MODULE_2__); 130 131 132 133 const usePost = () => { 134 return (0,_wordpress_data__WEBPACK_IMPORTED_MODULE_1__.useSelect)(select => select("core/editor").getCurrentPost(), []); 135 }; 136 const useCanRevalidate = () => { 137 return usePost().status == "publish"; 138 }; 139 const useReload = frontend => { 140 const [state, setState] = (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_2__.useState)("idle"); 141 const post = usePost(); 142 const path = (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_2__.useMemo)(() => { 143 if (post?.link) { 144 const url = new URL(post?.link); 145 return url.pathname; 146 } else { 147 return ""; 148 } 149 }, [post.link]); 150 return { 151 state, 152 reload: () => { 153 setState("loading"); 154 (async () => { 155 try { 156 const response = await fetch((0,_store_window__WEBPACK_IMPORTED_MODULE_0__.getReloadAjaxUrl)(frontend, path)); 157 const json = await response.json(); 158 if (json.success) { 159 setState("success"); 160 } else { 161 console.error(json); 162 setState("error"); 163 } 164 } catch (e) { 165 setState("error"); 166 } 167 })(); 168 } 169 }; 170 }; 171 172 /***/ }), 173 174 /***/ "./src/preview.ts": 175 /*!************************!*\ 176 !*** ./src/preview.ts ***! 177 \************************/ 178 /***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { 179 180 __webpack_require__.r(__webpack_exports__); 181 /* harmony export */ __webpack_require__.d(__webpack_exports__, { 182 /* harmony export */ writeInterstitialMessage: function() { return /* binding */ writeInterstitialMessage; } 183 /* harmony export */ }); 184 function writeInterstitialMessage(targetDocument) { 185 let markup = ''; 186 markup += ` 187 <style> 188 body { 189 margin: 0; 190 } 191 .editor-post-preview-button__interstitial-message { 192 display: flex; 193 flex-direction: column; 194 align-items: center; 195 justify-content: center; 196 height: 100vh; 197 width: 100vw; 198 } 199 @-webkit-keyframes paint { 200 0% { 201 stroke-dashoffset: 0; 202 } 203 } 204 @-moz-keyframes paint { 205 0% { 206 stroke-dashoffset: 0; 207 } 208 } 209 @-o-keyframes paint { 210 0% { 211 stroke-dashoffset: 0; 212 } 213 } 214 @keyframes paint { 215 0% { 216 stroke-dashoffset: 0; 217 } 218 } 219 .editor-post-preview-button__interstitial-message svg { 220 width: 192px; 221 height: 192px; 222 stroke: #555d66; 223 stroke-width: 0.75; 224 } 225 .editor-post-preview-button__interstitial-message svg .outer, 226 .editor-post-preview-button__interstitial-message svg .inner { 227 stroke-dasharray: 280; 228 stroke-dashoffset: 280; 229 -webkit-animation: paint 1.5s ease infinite alternate; 230 -moz-animation: paint 1.5s ease infinite alternate; 231 -o-animation: paint 1.5s ease infinite alternate; 232 animation: paint 1.5s ease infinite alternate; 233 } 234 p { 235 text-align: center; 236 font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif; 237 } 238 </style> 239 `; 240 markup += ` 241 <div class="editor-post-preview-button__interstitial-message"> 242 <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 96 96"> 243 <path class="outer" d="M48 12c19.9 0 36 16.1 36 36S67.9 84 48 84 12 67.9 12 48s16.1-36 36-36" fill="none" /> 244 <path class="inner" d="M69.5 46.4c0-3.9-1.4-6.7-2.6-8.8-1.6-2.6-3.1-4.9-3.1-7.5 0-2.9 2.2-5.7 5.4-5.7h.4C63.9 19.2 56.4 16 48 16c-11.2 0-21 5.7-26.7 14.4h2.1c3.3 0 8.5-.4 8.5-.4 1.7-.1 1.9 2.4.2 2.6 0 0-1.7.2-3.7.3L40 67.5l7-20.9L42 33c-1.7-.1-3.3-.3-3.3-.3-1.7-.1-1.5-2.7.2-2.6 0 0 5.3.4 8.4.4 3.3 0 8.5-.4 8.5-.4 1.7-.1 1.9 2.4.2 2.6 0 0-1.7.2-3.7.3l11.5 34.3 3.3-10.4c1.6-4.5 2.4-7.8 2.4-10.5zM16.1 48c0 12.6 7.3 23.5 18 28.7L18.8 35c-1.7 4-2.7 8.4-2.7 13zm32.5 2.8L39 78.6c2.9.8 5.9 1.3 9 1.3 3.7 0 7.3-.6 10.6-1.8-.1-.1-.2-.3-.2-.4l-9.8-26.9zM76.2 36c0 3.2-.6 6.9-2.4 11.4L64 75.6c9.5-5.5 15.9-15.8 15.9-27.6 0-5.5-1.4-10.8-3.9-15.3.1 1 .2 2.1.2 3.3z" fill="none" /> 245 </svg> 246 <p>Generating preview…</p> 247 </div> 248 `; 249 targetDocument.write(markup); 250 targetDocument.close(); 251 } 252 253 /***/ }), 254 255 /***/ "./src/store/window.ts": 256 /*!*****************************!*\ 257 !*** ./src/store/window.ts ***! 258 \*****************************/ 259 /***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { 260 261 __webpack_require__.r(__webpack_exports__); 262 /* harmony export */ __webpack_require__.d(__webpack_exports__, { 263 /* harmony export */ getAjaxUrl: function() { return /* binding */ getAjaxUrl; }, 264 /* harmony export */ getFrontends: function() { return /* binding */ getFrontends; }, 265 /* harmony export */ getPreviewUrl: function() { return /* binding */ getPreviewUrl; }, 266 /* harmony export */ getReloadAjaxUrl: function() { return /* binding */ getReloadAjaxUrl; } 267 /* harmony export */ }); 268 const getAjaxUrl = () => window.Headless.ajax; 269 const getReloadAjaxUrl = (frontend, path) => getAjaxUrl() + `?action=${window.Headless.actions.revalidate}&frontend=${frontend}&path=${path}`; 270 const getPreviewUrl = postId => { 271 return window.Headless.preview_url.replace(window.Headless.post_id_placeholder, `${postId}`); 272 }; 273 const getFrontends = () => window.Headless.frontends; 274 275 /***/ }), 276 277 /***/ "./src/styles.css": 278 /*!************************!*\ 279 !*** ./src/styles.css ***! 280 \************************/ 281 /***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { 282 283 __webpack_require__.r(__webpack_exports__); 284 // extracted by mini-css-extract-plugin 285 286 287 /***/ }), 288 289 /***/ "react": 290 /*!************************!*\ 291 !*** external "React" ***! 292 \************************/ 293 /***/ (function(module) { 294 295 module.exports = window["React"]; 296 297 /***/ }), 298 299 /***/ "@wordpress/components": 300 /*!************************************!*\ 301 !*** external ["wp","components"] ***! 302 \************************************/ 303 /***/ (function(module) { 304 305 module.exports = window["wp"]["components"]; 306 307 /***/ }), 308 309 /***/ "@wordpress/data": 310 /*!******************************!*\ 311 !*** external ["wp","data"] ***! 312 \******************************/ 313 /***/ (function(module) { 314 315 module.exports = window["wp"]["data"]; 316 317 /***/ }), 318 319 /***/ "@wordpress/edit-post": 320 /*!**********************************!*\ 321 !*** external ["wp","editPost"] ***! 322 \**********************************/ 323 /***/ (function(module) { 324 325 module.exports = window["wp"]["editPost"]; 326 327 /***/ }), 328 329 /***/ "@wordpress/element": 330 /*!*********************************!*\ 331 !*** external ["wp","element"] ***! 332 \*********************************/ 333 /***/ (function(module) { 334 335 module.exports = window["wp"]["element"]; 336 337 /***/ }), 338 339 /***/ "@wordpress/plugins": 340 /*!*********************************!*\ 341 !*** external ["wp","plugins"] ***! 342 \*********************************/ 343 /***/ (function(module) { 344 345 module.exports = window["wp"]["plugins"]; 346 347 /***/ }) 348 349 /******/ }); 350 /************************************************************************/ 351 /******/ // The module cache 352 /******/ var __webpack_module_cache__ = {}; 353 /******/ 354 /******/ // The require function 355 /******/ function __webpack_require__(moduleId) { 356 /******/ // Check if module is in cache 357 /******/ var cachedModule = __webpack_module_cache__[moduleId]; 358 /******/ if (cachedModule !== undefined) { 359 /******/ return cachedModule.exports; 360 /******/ } 361 /******/ // Create a new module (and put it into the cache) 362 /******/ var module = __webpack_module_cache__[moduleId] = { 363 /******/ // no module.id needed 364 /******/ // no module.loaded needed 365 /******/ exports: {} 366 /******/ }; 367 /******/ 368 /******/ // Execute the module function 369 /******/ __webpack_modules__[moduleId](module, module.exports, __webpack_require__); 370 /******/ 371 /******/ // Return the exports of the module 372 /******/ return module.exports; 373 /******/ } 374 /******/ 375 /************************************************************************/ 376 /******/ /* webpack/runtime/compat get default export */ 377 /******/ !function() { 378 /******/ // getDefaultExport function for compatibility with non-harmony modules 379 /******/ __webpack_require__.n = function(module) { 380 /******/ var getter = module && module.__esModule ? 381 /******/ function() { return module['default']; } : 382 /******/ function() { return module; }; 383 /******/ __webpack_require__.d(getter, { a: getter }); 384 /******/ return getter; 385 /******/ }; 386 /******/ }(); 387 /******/ 388 /******/ /* webpack/runtime/define property getters */ 389 /******/ !function() { 390 /******/ // define getter functions for harmony exports 391 /******/ __webpack_require__.d = function(exports, definition) { 392 /******/ for(var key in definition) { 393 /******/ if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) { 394 /******/ Object.defineProperty(exports, key, { enumerable: true, get: definition[key] }); 395 /******/ } 396 /******/ } 397 /******/ }; 398 /******/ }(); 399 /******/ 400 /******/ /* webpack/runtime/hasOwnProperty shorthand */ 401 /******/ !function() { 402 /******/ __webpack_require__.o = function(obj, prop) { return Object.prototype.hasOwnProperty.call(obj, prop); } 403 /******/ }(); 404 /******/ 405 /******/ /* webpack/runtime/make namespace object */ 406 /******/ !function() { 407 /******/ // define __esModule on exports 408 /******/ __webpack_require__.r = function(exports) { 409 /******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) { 410 /******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' }); 411 /******/ } 412 /******/ Object.defineProperty(exports, '__esModule', { value: true }); 413 /******/ }; 414 /******/ }(); 415 /******/ 416 /************************************************************************/ 417 var __webpack_exports__ = {}; 418 // This entry need to be wrapped in an IIFE because it need to be isolated against other modules in the chunk. 419 !function() { 420 /*!**************************!*\ 421 !*** ./src/gutenberg.ts ***! 422 \**************************/ 423 __webpack_require__.r(__webpack_exports__); 424 /* harmony import */ var _wordpress_plugins__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @wordpress/plugins */ "@wordpress/plugins"); 425 /* harmony import */ var _wordpress_plugins__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_wordpress_plugins__WEBPACK_IMPORTED_MODULE_0__); 426 /* harmony import */ var _components_ReloadPanel__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./components/ReloadPanel */ "./src/components/ReloadPanel.tsx"); 427 /* harmony import */ var _store_window__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./store/window */ "./src/store/window.ts"); 428 /* harmony import */ var _wordpress_data__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @wordpress/data */ "@wordpress/data"); 429 /* harmony import */ var _wordpress_data__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_wordpress_data__WEBPACK_IMPORTED_MODULE_3__); 430 /* harmony import */ var _preview__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./preview */ "./src/preview.ts"); 431 /* harmony import */ var _styles_css__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./styles.css */ "./src/styles.css"); 432 433 434 435 436 437 438 (0,_wordpress_plugins__WEBPACK_IMPORTED_MODULE_0__.registerPlugin)('headless-plugin', { 439 icon: () => null, 440 render: _components_ReloadPanel__WEBPACK_IMPORTED_MODULE_1__["default"] 441 }); 442 document.addEventListener("DOMContentLoaded", function () { 443 const coreEditorSelect = (0,_wordpress_data__WEBPACK_IMPORTED_MODULE_3__.select)("core/editor"); 444 const getCurrentPostId = coreEditorSelect.getCurrentPostId; 445 const isSavingPost = coreEditorSelect.isSavingPost; 446 const isDraft = () => { 447 const status = coreEditorSelect.getCurrentPost().status; 448 return status == "draft" || status == "auto-draft"; 449 }; 450 const coreEditorDispatch = (0,_wordpress_data__WEBPACK_IMPORTED_MODULE_3__.dispatch)("core/editor"); 451 const autosave = coreEditorDispatch.autosave; 452 const savePost = coreEditorDispatch.savePost; 453 454 // -------------------------------------------------------- 455 // create replacement for preview link 456 // -------------------------------------------------------- 457 const a = document.createElement("a"); 458 a.className = "components-button"; 459 a.addEventListener('click', e => { 460 e.preventDefault(); 461 if (isSavingPost()) { 462 return; 463 } 464 const ref = window.open('about:blank', a.target); 465 (0,_preview__WEBPACK_IMPORTED_MODULE_4__.writeInterstitialMessage)(ref.document); 466 const saveFn = isDraft() ? savePost : autosave; 467 saveFn().then(() => { 468 ref.location = a.href; 469 }); 470 }); 471 (0,_wordpress_data__WEBPACK_IMPORTED_MODULE_3__.subscribe)(() => { 472 if (isSavingPost()) { 473 a.classList.add("is-disabled"); 474 } else { 475 a.classList.remove("is-disabled"); 476 } 477 }); 478 479 // -------------------------------------------------------- 480 // hack it with interval updates 481 // -------------------------------------------------------- 482 // workaround script until there's an official solution for https://github.com/WordPress/gutenberg/issues/13998 483 setInterval(checkPreview, 300); 484 function checkPreview() { 485 const postId = getCurrentPostId(); 486 const previewUrl = (0,_store_window__WEBPACK_IMPORTED_MODULE_2__.getPreviewUrl)(postId); 487 488 // replace all preview links 489 const editorPreviewLink = document.querySelectorAll("[target^=wp-preview-]"); 490 if (editorPreviewLink && editorPreviewLink.length) { 491 editorPreviewLink.forEach(link => { 492 link.setAttribute("href", previewUrl); 493 }); 494 } 495 496 // replace notice link 497 const notices = document.querySelectorAll(".components-snackbar-list .components-snackbar__content a.components-button"); 498 notices.forEach(notice => { 499 if (notice.href.includes("?post=" + postId) // custom post types 500 || notice.href.includes("?page_id=" + postId) // pages 501 || notice.href.includes("?p=" + postId) // posts 502 ) { 503 notice.href = previewUrl; 504 notice.target = "wp-preview-" + postId; 505 } 506 }); 507 508 // replace this special preview link 509 const previewGroups = document.querySelectorAll(".edit-post-post-preview-dropdown .components-menu-group"); 510 let externalPreviewGroup = null; 511 previewGroups.forEach(group => { 512 if (group.querySelector(".edit-post-header-preview__grouping-external")) { 513 externalPreviewGroup = group; 514 } 515 }); 516 if (!externalPreviewGroup) { 517 return; 518 } 519 const id = "headless-preview-link"; 520 if (externalPreviewGroup.querySelector("#" + id)) { 521 return; 522 } 523 524 // is hidden via styles.css 525 const gutenbergLink = externalPreviewGroup.querySelector(".edit-post-header-preview__grouping-external a"); 526 const target = gutenbergLink.getAttribute("target"); 527 a.text = gutenbergLink.textContent; 528 const icon = document.createElement("span"); 529 icon.className = "dashicons dashicons-external"; 530 a.append(icon); 531 a.target = target; 532 a.href = previewUrl; 533 a.id = id; 534 externalPreviewGroup.querySelector('[role="group"]').append(a); 535 } 536 }); 537 }(); 538 /******/ })() 539 ; 540 //# sourceMappingURL=gutenberg.js.map 1 !function(){"use strict";var t=window.wp.plugins,e=window.React,n=window.wp.editPost,s=window.wp.components;var a=window.wp.data,i=window.wp.element;const r=()=>(0,a.useSelect)((t=>t("core/editor").getCurrentPost()),[]),o=({index:t,baseUrl:n,controller:s,onStateChanged:a})=>{const{state:o,reload:l}=(t=>{const[e,n]=(0,i.useState)("idle"),s=r(),a=(0,i.useMemo)((()=>s?.link?new URL(s?.link).pathname:""),[s.link]);return{state:e,reload:()=>{n("loading"),(async()=>{try{const e=await fetch(((t,e)=>window.Headless.ajax+`?action=${window.Headless.actions.revalidate}&frontend=${t}&path=${e}`)(t,a)),s=await e.json();s.success?n("success"):(console.error(s),n("error"))}catch(t){n("error")}})()}}})(t),c=r(),d=(0,i.useMemo)((()=>{const t=c.link,e=new URL(t);return n.replace(/^\/|\/$/g,"")+e.pathname}),[c.link]);return(0,i.useEffect)((()=>{s.add(t,l)}),[t]),(0,i.useEffect)((()=>{a(t,o)}),[o]),(0,e.createElement)("div",{title:d},(0,e.createElement)("a",{href:d,target:"_blank"},"Frontend ",t),"loading"==o&&(0,e.createElement)(e.Fragment,null," 🧹"),"success"==o&&(0,e.createElement)(e.Fragment,null," ✅"),"error"==o&&(0,e.createElement)(e.Fragment,null," 🚨"))};(0,t.registerPlugin)("headless-plugin",{icon:()=>null,render:function(){const t=window.Headless.frontends,a=(0,i.useMemo)((()=>(()=>{const t=new Map;return{add:(e,n)=>{t.set(e,n)},run:()=>{t.forEach((t=>{t()}))}}})()),[]),[l,c]=(0,i.useState)({}),d="publish"==r().status,p=Object.values(l).find((t=>1==t));return(0,e.createElement)(n.PluginDocumentSettingPanel,{title:"Headless"},d?(0,e.createElement)(e.Fragment,null,(0,e.createElement)("ol",null,t.map(((t,n)=>(0,e.createElement)("li",{key:n},(0,e.createElement)(o,{baseUrl:t,index:n,controller:a,onStateChanged:(t,e)=>{c((n=>{const s={...n};return s[t]="loading"==e,s}))}}))))),(0,e.createElement)(s.Button,{variant:"secondary",disabled:p||!d,onClick:()=>{a.run()}},"Revalidate cache")):(0,e.createElement)("p",{className:"description"},"Only published contents can be revalidated."))}}),document.addEventListener("DOMContentLoaded",(function(){const t=(0,a.select)("core/editor"),e=t.getCurrentPostId,n=t.isSavingPost,s=(0,a.dispatch)("core/editor"),i=s.autosave,r=s.savePost,o=document.createElement("a");o.className="components-button",o.addEventListener("click",(e=>{if(e.preventDefault(),n())return;const s=window.open("about:blank",o.target);!function(t){let e="";e+='\n\t\t<style>\n\t\t\tbody {\n\t\t\t\tmargin: 0;\n\t\t\t}\n\t\t\t.editor-post-preview-button__interstitial-message {\n\t\t\t\tdisplay: flex;\n\t\t\t\tflex-direction: column;\n\t\t\t\talign-items: center;\n\t\t\t\tjustify-content: center;\n\t\t\t\theight: 100vh;\n\t\t\t\twidth: 100vw;\n\t\t\t}\n\t\t\t@-webkit-keyframes paint {\n\t\t\t\t0% {\n\t\t\t\t\tstroke-dashoffset: 0;\n\t\t\t\t}\n\t\t\t}\n\t\t\t@-moz-keyframes paint {\n\t\t\t\t0% {\n\t\t\t\t\tstroke-dashoffset: 0;\n\t\t\t\t}\n\t\t\t}\n\t\t\t@-o-keyframes paint {\n\t\t\t\t0% {\n\t\t\t\t\tstroke-dashoffset: 0;\n\t\t\t\t}\n\t\t\t}\n\t\t\t@keyframes paint {\n\t\t\t\t0% {\n\t\t\t\t\tstroke-dashoffset: 0;\n\t\t\t\t}\n\t\t\t}\n\t\t\t.editor-post-preview-button__interstitial-message svg {\n\t\t\t\twidth: 192px;\n\t\t\t\theight: 192px;\n\t\t\t\tstroke: #555d66;\n\t\t\t\tstroke-width: 0.75;\n\t\t\t}\n\t\t\t.editor-post-preview-button__interstitial-message svg .outer,\n\t\t\t.editor-post-preview-button__interstitial-message svg .inner {\n\t\t\t\tstroke-dasharray: 280;\n\t\t\t\tstroke-dashoffset: 280;\n\t\t\t\t-webkit-animation: paint 1.5s ease infinite alternate;\n\t\t\t\t-moz-animation: paint 1.5s ease infinite alternate;\n\t\t\t\t-o-animation: paint 1.5s ease infinite alternate;\n\t\t\t\tanimation: paint 1.5s ease infinite alternate;\n\t\t\t}\n\t\t\tp {\n\t\t\t\ttext-align: center;\n\t\t\t\tfont-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif;\n\t\t\t}\n\t\t</style>\n\t',e+='\n <div class="editor-post-preview-button__interstitial-message">\n <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 96 96">\n <path class="outer" d="M48 12c19.9 0 36 16.1 36 36S67.9 84 48 84 12 67.9 12 48s16.1-36 36-36" fill="none" />\n <path class="inner" d="M69.5 46.4c0-3.9-1.4-6.7-2.6-8.8-1.6-2.6-3.1-4.9-3.1-7.5 0-2.9 2.2-5.7 5.4-5.7h.4C63.9 19.2 56.4 16 48 16c-11.2 0-21 5.7-26.7 14.4h2.1c3.3 0 8.5-.4 8.5-.4 1.7-.1 1.9 2.4.2 2.6 0 0-1.7.2-3.7.3L40 67.5l7-20.9L42 33c-1.7-.1-3.3-.3-3.3-.3-1.7-.1-1.5-2.7.2-2.6 0 0 5.3.4 8.4.4 3.3 0 8.5-.4 8.5-.4 1.7-.1 1.9 2.4.2 2.6 0 0-1.7.2-3.7.3l11.5 34.3 3.3-10.4c1.6-4.5 2.4-7.8 2.4-10.5zM16.1 48c0 12.6 7.3 23.5 18 28.7L18.8 35c-1.7 4-2.7 8.4-2.7 13zm32.5 2.8L39 78.6c2.9.8 5.9 1.3 9 1.3 3.7 0 7.3-.6 10.6-1.8-.1-.1-.2-.3-.2-.4l-9.8-26.9zM76.2 36c0 3.2-.6 6.9-2.4 11.4L64 75.6c9.5-5.5 15.9-15.8 15.9-27.6 0-5.5-1.4-10.8-3.9-15.3.1 1 .2 2.1.2 3.3z" fill="none" />\n </svg>\n <p>Generating preview…</p>\n </div>\n ',t.write('\n\t\t<style>\n\t\t\tbody {\n\t\t\t\tmargin: 0;\n\t\t\t}\n\t\t\t.editor-post-preview-button__interstitial-message {\n\t\t\t\tdisplay: flex;\n\t\t\t\tflex-direction: column;\n\t\t\t\talign-items: center;\n\t\t\t\tjustify-content: center;\n\t\t\t\theight: 100vh;\n\t\t\t\twidth: 100vw;\n\t\t\t}\n\t\t\t@-webkit-keyframes paint {\n\t\t\t\t0% {\n\t\t\t\t\tstroke-dashoffset: 0;\n\t\t\t\t}\n\t\t\t}\n\t\t\t@-moz-keyframes paint {\n\t\t\t\t0% {\n\t\t\t\t\tstroke-dashoffset: 0;\n\t\t\t\t}\n\t\t\t}\n\t\t\t@-o-keyframes paint {\n\t\t\t\t0% {\n\t\t\t\t\tstroke-dashoffset: 0;\n\t\t\t\t}\n\t\t\t}\n\t\t\t@keyframes paint {\n\t\t\t\t0% {\n\t\t\t\t\tstroke-dashoffset: 0;\n\t\t\t\t}\n\t\t\t}\n\t\t\t.editor-post-preview-button__interstitial-message svg {\n\t\t\t\twidth: 192px;\n\t\t\t\theight: 192px;\n\t\t\t\tstroke: #555d66;\n\t\t\t\tstroke-width: 0.75;\n\t\t\t}\n\t\t\t.editor-post-preview-button__interstitial-message svg .outer,\n\t\t\t.editor-post-preview-button__interstitial-message svg .inner {\n\t\t\t\tstroke-dasharray: 280;\n\t\t\t\tstroke-dashoffset: 280;\n\t\t\t\t-webkit-animation: paint 1.5s ease infinite alternate;\n\t\t\t\t-moz-animation: paint 1.5s ease infinite alternate;\n\t\t\t\t-o-animation: paint 1.5s ease infinite alternate;\n\t\t\t\tanimation: paint 1.5s ease infinite alternate;\n\t\t\t}\n\t\t\tp {\n\t\t\t\ttext-align: center;\n\t\t\t\tfont-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif;\n\t\t\t}\n\t\t</style>\n\t\n <div class="editor-post-preview-button__interstitial-message">\n <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 96 96">\n <path class="outer" d="M48 12c19.9 0 36 16.1 36 36S67.9 84 48 84 12 67.9 12 48s16.1-36 36-36" fill="none" />\n <path class="inner" d="M69.5 46.4c0-3.9-1.4-6.7-2.6-8.8-1.6-2.6-3.1-4.9-3.1-7.5 0-2.9 2.2-5.7 5.4-5.7h.4C63.9 19.2 56.4 16 48 16c-11.2 0-21 5.7-26.7 14.4h2.1c3.3 0 8.5-.4 8.5-.4 1.7-.1 1.9 2.4.2 2.6 0 0-1.7.2-3.7.3L40 67.5l7-20.9L42 33c-1.7-.1-3.3-.3-3.3-.3-1.7-.1-1.5-2.7.2-2.6 0 0 5.3.4 8.4.4 3.3 0 8.5-.4 8.5-.4 1.7-.1 1.9 2.4.2 2.6 0 0-1.7.2-3.7.3l11.5 34.3 3.3-10.4c1.6-4.5 2.4-7.8 2.4-10.5zM16.1 48c0 12.6 7.3 23.5 18 28.7L18.8 35c-1.7 4-2.7 8.4-2.7 13zm32.5 2.8L39 78.6c2.9.8 5.9 1.3 9 1.3 3.7 0 7.3-.6 10.6-1.8-.1-.1-.2-.3-.2-.4l-9.8-26.9zM76.2 36c0 3.2-.6 6.9-2.4 11.4L64 75.6c9.5-5.5 15.9-15.8 15.9-27.6 0-5.5-1.4-10.8-3.9-15.3.1 1 .2 2.1.2 3.3z" fill="none" />\n </svg>\n <p>Generating preview…</p>\n </div>\n '),t.close()}(s.document),((()=>{const e=t.getCurrentPost().status;return"draft"==e||"auto-draft"==e})()?r:i)().then((()=>{s.location=o.href}))})),(0,a.subscribe)((()=>{n()?o.classList.add("is-disabled"):o.classList.remove("is-disabled")})),setInterval((function(){const t=e(),n=(t=>window.Headless.preview_url.replace(window.Headless.post_id_placeholder,`${t}`))(t),s=document.querySelectorAll("[target^=wp-preview-]");s&&s.length&&s.forEach((t=>{t.setAttribute("href",n)})),document.querySelectorAll(".components-snackbar-list .components-snackbar__content a.components-button").forEach((e=>{(e.href.includes("?post="+t)||e.href.includes("?page_id="+t)||e.href.includes("?p="+t))&&(e.href=n,e.target="wp-preview-"+t)}));const a=document.querySelectorAll(".components-menu-group");let i=null;if(a.forEach((t=>{t.querySelector(".editor-preview-dropdown__button-external")&&(i=t)})),!i)return;const r="headless-preview-link";if(i.querySelector("#"+r))return;const l=i.querySelector(".editor-preview-dropdown__button-external"),c=l.querySelector("svg"),d=l.getAttribute("target");o.text=l.textContent,o.append(c),o.target=d,o.href=n,o.id=r,l.style.display="none",i.querySelector('[role="group"]').append(o)}),300)}))}(); -
headless/tags/2.2.4/headless.php
r3060647 r3072776 5 5 * Plugin URI: https://github.com/palasthotel/headless 6 6 * Description: Adds features to use WordPress as headless CMS 7 * Version: 2.2. 37 * Version: 2.2.4 8 8 * Author: Palasthotel (Edward Bock) <edward.bock@palasthotel.de> 9 9 * Author URI: http://www.palasthotel.de 10 10 * Requires at least: 5.0 11 * Tested up to: 6. 4.311 * Tested up to: 6.5.2 12 12 * Requires PHP: 8.0 13 13 * Text Domain: headless … … 91 91 92 92 const FILTER_REST_RESPONSE_HEADERS = "headless_rest_response_headers"; 93 const FILTER_REST_RESPONSE_DATA = "headless_rest_response_data"; 93 94 94 const FILTER_FRONTENDS = "headless_frontends";95 const FILTER_FRONTENDS = "headless_frontends"; 95 96 const FILTER_REVALIDATE_BY_PATH_URL = "headless_revalidate_by_path_url"; 96 97 const FILTER_REVALIDATE_BY_TAG_URL = "headless_revalidate_by_tag_url"; -
headless/tags/2.2.4/vendor/composer/installed.php
r3060647 r3072776 4 4 'pretty_version' => 'dev-main', 5 5 'version' => 'dev-main', 6 'reference' => ' 67c18db40fcf4819d0817bbbf3b943a88a848d91',6 'reference' => '54dd1eeef2a9fb154922d1ca2caee4fa7eaf4491', 7 7 'type' => 'library', 8 8 'install_path' => __DIR__ . '/../../', … … 14 14 'pretty_version' => 'dev-main', 15 15 'version' => 'dev-main', 16 'reference' => ' 67c18db40fcf4819d0817bbbf3b943a88a848d91',16 'reference' => '54dd1eeef2a9fb154922d1ca2caee4fa7eaf4491', 17 17 'type' => 'library', 18 18 'install_path' => __DIR__ . '/../../', -
headless/trunk/README.txt
r3060647 r3072776 4 4 Tags: gutenberg, block, developer, utils 5 5 Requires at least: 5.0 6 Tested up to: 6. 4.36 Tested up to: 6.5.2 7 7 Requires PHP: 8.0 8 Stable tag: 2.2. 38 Stable tag: 2.2.4 9 9 License: GPLv3 10 10 License URI: http://www.gnu.org/licenses/gpl … … 27 27 28 28 == Changelog == 29 30 = 2.2.4 = 31 * Feature: Add filter "headless_rest_response_data" 32 * Fix: Gutenberg preview in new tab link 29 33 30 34 = 2.2.3 = -
headless/trunk/classes/Extensions/ContentBlocks.php
r3020918 r3072776 35 35 } 36 36 37 $response->set_data( $data ); 37 $data = apply_filters(Plugin::FILTER_REST_RESPONSE_DATA, $data ); 38 $response->set_data( $data ); 38 39 39 40 return $response; -
headless/trunk/dist/admin.asset.php
r3033669 r3072776 1 <?php return array('dependencies' => array(), 'version' => ' 4395236daaca37a54365');1 <?php return array('dependencies' => array(), 'version' => 'ecdaf49b7e3ddff3eb2a'); -
headless/trunk/dist/admin.js
r3033669 r3072776 1 /******/ (function() { // webpackBootstrap 2 /******/ "use strict"; 3 /******/ var __webpack_modules__ = ({ 4 5 /***/ "./src/store/admin-window.ts": 6 /*!***********************************!*\ 7 !*** ./src/store/admin-window.ts ***! 8 \***********************************/ 9 /***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { 10 11 __webpack_require__.r(__webpack_exports__); 12 /* harmony export */ __webpack_require__.d(__webpack_exports__, { 13 /* harmony export */ getPreviewPath: function() { return /* binding */ getPreviewPath; }, 14 /* harmony export */ getPreviewUrls: function() { return /* binding */ getPreviewUrls; } 15 /* harmony export */ }); 16 const getPreviewPath = () => window.HeadlessAdmin.preview_path; 17 const getPreviewUrls = () => { 18 return window.HeadlessAdmin.frontends.map(frontend => { 19 return frontend + getPreviewPath(); 20 }); 21 }; 22 23 /***/ }) 24 25 /******/ }); 26 /************************************************************************/ 27 /******/ // The module cache 28 /******/ var __webpack_module_cache__ = {}; 29 /******/ 30 /******/ // The require function 31 /******/ function __webpack_require__(moduleId) { 32 /******/ // Check if module is in cache 33 /******/ var cachedModule = __webpack_module_cache__[moduleId]; 34 /******/ if (cachedModule !== undefined) { 35 /******/ return cachedModule.exports; 36 /******/ } 37 /******/ // Create a new module (and put it into the cache) 38 /******/ var module = __webpack_module_cache__[moduleId] = { 39 /******/ // no module.id needed 40 /******/ // no module.loaded needed 41 /******/ exports: {} 42 /******/ }; 43 /******/ 44 /******/ // Execute the module function 45 /******/ __webpack_modules__[moduleId](module, module.exports, __webpack_require__); 46 /******/ 47 /******/ // Return the exports of the module 48 /******/ return module.exports; 49 /******/ } 50 /******/ 51 /************************************************************************/ 52 /******/ /* webpack/runtime/define property getters */ 53 /******/ !function() { 54 /******/ // define getter functions for harmony exports 55 /******/ __webpack_require__.d = function(exports, definition) { 56 /******/ for(var key in definition) { 57 /******/ if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) { 58 /******/ Object.defineProperty(exports, key, { enumerable: true, get: definition[key] }); 59 /******/ } 60 /******/ } 61 /******/ }; 62 /******/ }(); 63 /******/ 64 /******/ /* webpack/runtime/hasOwnProperty shorthand */ 65 /******/ !function() { 66 /******/ __webpack_require__.o = function(obj, prop) { return Object.prototype.hasOwnProperty.call(obj, prop); } 67 /******/ }(); 68 /******/ 69 /******/ /* webpack/runtime/make namespace object */ 70 /******/ !function() { 71 /******/ // define __esModule on exports 72 /******/ __webpack_require__.r = function(exports) { 73 /******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) { 74 /******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' }); 75 /******/ } 76 /******/ Object.defineProperty(exports, '__esModule', { value: true }); 77 /******/ }; 78 /******/ }(); 79 /******/ 80 /************************************************************************/ 81 var __webpack_exports__ = {}; 82 // This entry need to be wrapped in an IIFE because it need to be isolated against other modules in the chunk. 83 !function() { 84 /*!**********************!*\ 85 !*** ./src/admin.ts ***! 86 \**********************/ 87 __webpack_require__.r(__webpack_exports__); 88 /* harmony import */ var _store_admin_window__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./store/admin-window */ "./src/store/admin-window.ts"); 89 90 window.addEventListener("DOMContentLoaded", async () => { 91 const results = await Promise.all((0,_store_admin_window__WEBPACK_IMPORTED_MODULE_0__.getPreviewUrls)().map(url => fetch(url, { 92 credentials: "include" 93 }).then(res => res.json()))); 94 }); 95 }(); 96 /******/ })() 97 ; 98 //# sourceMappingURL=admin.js.map 1 !function(){"use strict";window.addEventListener("DOMContentLoaded",(async()=>{await Promise.all(window.HeadlessAdmin.frontends.map((e=>e+window.HeadlessAdmin.preview_path)).map((e=>fetch(e,{credentials:"include"}).then((e=>e.json())))))}))}(); -
headless/trunk/dist/gutenberg.asset.php
r3033669 r3072776 1 <?php return array('dependencies' => array('react', 'wp-components', 'wp-data', 'wp-edit-post', 'wp-element', 'wp-plugins'), 'version' => ' d6a44e1effbbfab625f6');1 <?php return array('dependencies' => array('react', 'wp-components', 'wp-data', 'wp-edit-post', 'wp-element', 'wp-plugins'), 'version' => 'a2d2fb477c2bc904a66b'); -
headless/trunk/dist/gutenberg.css
r3033669 r3072776 1 /*!*********************************************************************************************************************************************************************************************************************************************************************************************!*\ 2 !*** css ./node_modules/.pnpm/css-loader@6.8.1_webpack@5.88.2/node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[2].use[1]!./node_modules/.pnpm/postcss-loader@6.2.1_postcss@8.4.31_webpack@5.88.2/node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[2].use[2]!./src/styles.css ***! 3 \*********************************************************************************************************************************************************************************************************************************************************************************************/ 4 .block-editor-post-preview__dropdown-content .components-menu-group .edit-post-header-preview__grouping-external { 5 display: none; 6 } 7 #headless-preview-link { 8 display: flex; 9 justify-content: space-between; 10 } 11 12 #headless-preview-link.is-disabled { 13 color: grey; 14 border-color: lightgrey; 15 outline-color: lightgrey; 16 } 17 18 19 20 /*# sourceMappingURL=gutenberg.css.map*/ 1 #headless-preview-link{display:flex;justify-content:space-between}#headless-preview-link.is-disabled{border-color:#d3d3d3;color:grey;outline-color:#d3d3d3} -
headless/trunk/dist/gutenberg.js
r3033669 r3072776 1 /******/ (function() { // webpackBootstrap 2 /******/ "use strict"; 3 /******/ var __webpack_modules__ = ({ 4 5 /***/ "./src/components/ReloadPanel.tsx": 6 /*!****************************************!*\ 7 !*** ./src/components/ReloadPanel.tsx ***! 8 \****************************************/ 9 /***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { 10 11 __webpack_require__.r(__webpack_exports__); 12 /* harmony export */ __webpack_require__.d(__webpack_exports__, { 13 /* harmony export */ "default": function() { return /* binding */ ReloadPanel; } 14 /* harmony export */ }); 15 /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react"); 16 /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__); 17 /* harmony import */ var _wordpress_edit_post__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @wordpress/edit-post */ "@wordpress/edit-post"); 18 /* harmony import */ var _wordpress_edit_post__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_wordpress_edit_post__WEBPACK_IMPORTED_MODULE_1__); 19 /* harmony import */ var _wordpress_components__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @wordpress/components */ "@wordpress/components"); 20 /* harmony import */ var _wordpress_components__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_wordpress_components__WEBPACK_IMPORTED_MODULE_2__); 21 /* harmony import */ var _hooks_use_reload__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../hooks/use-reload */ "./src/hooks/use-reload.ts"); 22 /* harmony import */ var _store_window__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../store/window */ "./src/store/window.ts"); 23 /* harmony import */ var _wordpress_element__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @wordpress/element */ "@wordpress/element"); 24 /* harmony import */ var _wordpress_element__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(_wordpress_element__WEBPACK_IMPORTED_MODULE_5__); 25 26 27 28 29 30 31 const buildController = () => { 32 const fns = new Map(); 33 return { 34 add: (frontend, fn) => { 35 fns.set(frontend, fn); 36 }, 37 run: () => { 38 fns.forEach(fn => { 39 fn(); 40 }); 41 } 42 }; 43 }; 44 const FrontendItem = ({ 45 index, 46 baseUrl, 47 controller, 48 onStateChanged 49 }) => { 50 const { 51 state, 52 reload 53 } = (0,_hooks_use_reload__WEBPACK_IMPORTED_MODULE_3__.useReload)(index); 54 const post = (0,_hooks_use_reload__WEBPACK_IMPORTED_MODULE_3__.usePost)(); 55 const url = (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_5__.useMemo)(() => { 56 const link = post.link; 57 const url = new URL(link); 58 ; 59 return baseUrl.replace(/^\/|\/$/g, '') + url.pathname; 60 }, [post.link]); 61 (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_5__.useEffect)(() => { 62 controller.add(index, reload); 63 }, [index]); 64 (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_5__.useEffect)(() => { 65 onStateChanged(index, state); 66 }, [state]); 67 return (0,react__WEBPACK_IMPORTED_MODULE_0__.createElement)("div", { 68 title: url 69 }, (0,react__WEBPACK_IMPORTED_MODULE_0__.createElement)("a", { 70 href: url, 71 target: "_blank" 72 }, "Frontend ", index), state == "loading" && (0,react__WEBPACK_IMPORTED_MODULE_0__.createElement)(react__WEBPACK_IMPORTED_MODULE_0__.Fragment, null, " \uD83E\uDDF9"), state == "success" && (0,react__WEBPACK_IMPORTED_MODULE_0__.createElement)(react__WEBPACK_IMPORTED_MODULE_0__.Fragment, null, " \u2705"), state == "error" && (0,react__WEBPACK_IMPORTED_MODULE_0__.createElement)(react__WEBPACK_IMPORTED_MODULE_0__.Fragment, null, " \uD83D\uDEA8")); 73 }; 74 function ReloadPanel() { 75 const frontends = (0,_store_window__WEBPACK_IMPORTED_MODULE_4__.getFrontends)(); 76 const controller = (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_5__.useMemo)(() => buildController(), []); 77 const [loadingState, setLoadingState] = (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_5__.useState)({}); 78 const canRevalidate = (0,_hooks_use_reload__WEBPACK_IMPORTED_MODULE_3__.useCanRevalidate)(); 79 const handleClick = () => { 80 controller.run(); 81 }; 82 const isLoading = Object.values(loadingState).find(value => value == true); 83 return (0,react__WEBPACK_IMPORTED_MODULE_0__.createElement)(_wordpress_edit_post__WEBPACK_IMPORTED_MODULE_1__.PluginDocumentSettingPanel, { 84 title: "Headless" 85 }, canRevalidate ? (0,react__WEBPACK_IMPORTED_MODULE_0__.createElement)(react__WEBPACK_IMPORTED_MODULE_0__.Fragment, null, (0,react__WEBPACK_IMPORTED_MODULE_0__.createElement)("ol", null, frontends.map((frontend, index) => { 86 return (0,react__WEBPACK_IMPORTED_MODULE_0__.createElement)("li", { 87 key: index 88 }, (0,react__WEBPACK_IMPORTED_MODULE_0__.createElement)(FrontendItem, { 89 baseUrl: frontend, 90 index: index, 91 controller: controller, 92 onStateChanged: (index, state) => { 93 setLoadingState(prev => { 94 const copy = { 95 ...prev 96 }; 97 copy[index] = state == "loading"; 98 return copy; 99 }); 100 } 101 })); 102 })), (0,react__WEBPACK_IMPORTED_MODULE_0__.createElement)(_wordpress_components__WEBPACK_IMPORTED_MODULE_2__.Button, { 103 variant: "secondary", 104 disabled: isLoading || !canRevalidate, 105 onClick: handleClick 106 }, "Revalidate cache")) : (0,react__WEBPACK_IMPORTED_MODULE_0__.createElement)("p", { 107 className: "description" 108 }, "Only published contents can be revalidated.")); 109 } 110 111 /***/ }), 112 113 /***/ "./src/hooks/use-reload.ts": 114 /*!*********************************!*\ 115 !*** ./src/hooks/use-reload.ts ***! 116 \*********************************/ 117 /***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { 118 119 __webpack_require__.r(__webpack_exports__); 120 /* harmony export */ __webpack_require__.d(__webpack_exports__, { 121 /* harmony export */ useCanRevalidate: function() { return /* binding */ useCanRevalidate; }, 122 /* harmony export */ usePost: function() { return /* binding */ usePost; }, 123 /* harmony export */ useReload: function() { return /* binding */ useReload; } 124 /* harmony export */ }); 125 /* harmony import */ var _store_window__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../store/window */ "./src/store/window.ts"); 126 /* harmony import */ var _wordpress_data__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @wordpress/data */ "@wordpress/data"); 127 /* harmony import */ var _wordpress_data__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_wordpress_data__WEBPACK_IMPORTED_MODULE_1__); 128 /* harmony import */ var _wordpress_element__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @wordpress/element */ "@wordpress/element"); 129 /* harmony import */ var _wordpress_element__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_wordpress_element__WEBPACK_IMPORTED_MODULE_2__); 130 131 132 133 const usePost = () => { 134 return (0,_wordpress_data__WEBPACK_IMPORTED_MODULE_1__.useSelect)(select => select("core/editor").getCurrentPost(), []); 135 }; 136 const useCanRevalidate = () => { 137 return usePost().status == "publish"; 138 }; 139 const useReload = frontend => { 140 const [state, setState] = (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_2__.useState)("idle"); 141 const post = usePost(); 142 const path = (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_2__.useMemo)(() => { 143 if (post?.link) { 144 const url = new URL(post?.link); 145 return url.pathname; 146 } else { 147 return ""; 148 } 149 }, [post.link]); 150 return { 151 state, 152 reload: () => { 153 setState("loading"); 154 (async () => { 155 try { 156 const response = await fetch((0,_store_window__WEBPACK_IMPORTED_MODULE_0__.getReloadAjaxUrl)(frontend, path)); 157 const json = await response.json(); 158 if (json.success) { 159 setState("success"); 160 } else { 161 console.error(json); 162 setState("error"); 163 } 164 } catch (e) { 165 setState("error"); 166 } 167 })(); 168 } 169 }; 170 }; 171 172 /***/ }), 173 174 /***/ "./src/preview.ts": 175 /*!************************!*\ 176 !*** ./src/preview.ts ***! 177 \************************/ 178 /***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { 179 180 __webpack_require__.r(__webpack_exports__); 181 /* harmony export */ __webpack_require__.d(__webpack_exports__, { 182 /* harmony export */ writeInterstitialMessage: function() { return /* binding */ writeInterstitialMessage; } 183 /* harmony export */ }); 184 function writeInterstitialMessage(targetDocument) { 185 let markup = ''; 186 markup += ` 187 <style> 188 body { 189 margin: 0; 190 } 191 .editor-post-preview-button__interstitial-message { 192 display: flex; 193 flex-direction: column; 194 align-items: center; 195 justify-content: center; 196 height: 100vh; 197 width: 100vw; 198 } 199 @-webkit-keyframes paint { 200 0% { 201 stroke-dashoffset: 0; 202 } 203 } 204 @-moz-keyframes paint { 205 0% { 206 stroke-dashoffset: 0; 207 } 208 } 209 @-o-keyframes paint { 210 0% { 211 stroke-dashoffset: 0; 212 } 213 } 214 @keyframes paint { 215 0% { 216 stroke-dashoffset: 0; 217 } 218 } 219 .editor-post-preview-button__interstitial-message svg { 220 width: 192px; 221 height: 192px; 222 stroke: #555d66; 223 stroke-width: 0.75; 224 } 225 .editor-post-preview-button__interstitial-message svg .outer, 226 .editor-post-preview-button__interstitial-message svg .inner { 227 stroke-dasharray: 280; 228 stroke-dashoffset: 280; 229 -webkit-animation: paint 1.5s ease infinite alternate; 230 -moz-animation: paint 1.5s ease infinite alternate; 231 -o-animation: paint 1.5s ease infinite alternate; 232 animation: paint 1.5s ease infinite alternate; 233 } 234 p { 235 text-align: center; 236 font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif; 237 } 238 </style> 239 `; 240 markup += ` 241 <div class="editor-post-preview-button__interstitial-message"> 242 <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 96 96"> 243 <path class="outer" d="M48 12c19.9 0 36 16.1 36 36S67.9 84 48 84 12 67.9 12 48s16.1-36 36-36" fill="none" /> 244 <path class="inner" d="M69.5 46.4c0-3.9-1.4-6.7-2.6-8.8-1.6-2.6-3.1-4.9-3.1-7.5 0-2.9 2.2-5.7 5.4-5.7h.4C63.9 19.2 56.4 16 48 16c-11.2 0-21 5.7-26.7 14.4h2.1c3.3 0 8.5-.4 8.5-.4 1.7-.1 1.9 2.4.2 2.6 0 0-1.7.2-3.7.3L40 67.5l7-20.9L42 33c-1.7-.1-3.3-.3-3.3-.3-1.7-.1-1.5-2.7.2-2.6 0 0 5.3.4 8.4.4 3.3 0 8.5-.4 8.5-.4 1.7-.1 1.9 2.4.2 2.6 0 0-1.7.2-3.7.3l11.5 34.3 3.3-10.4c1.6-4.5 2.4-7.8 2.4-10.5zM16.1 48c0 12.6 7.3 23.5 18 28.7L18.8 35c-1.7 4-2.7 8.4-2.7 13zm32.5 2.8L39 78.6c2.9.8 5.9 1.3 9 1.3 3.7 0 7.3-.6 10.6-1.8-.1-.1-.2-.3-.2-.4l-9.8-26.9zM76.2 36c0 3.2-.6 6.9-2.4 11.4L64 75.6c9.5-5.5 15.9-15.8 15.9-27.6 0-5.5-1.4-10.8-3.9-15.3.1 1 .2 2.1.2 3.3z" fill="none" /> 245 </svg> 246 <p>Generating preview…</p> 247 </div> 248 `; 249 targetDocument.write(markup); 250 targetDocument.close(); 251 } 252 253 /***/ }), 254 255 /***/ "./src/store/window.ts": 256 /*!*****************************!*\ 257 !*** ./src/store/window.ts ***! 258 \*****************************/ 259 /***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { 260 261 __webpack_require__.r(__webpack_exports__); 262 /* harmony export */ __webpack_require__.d(__webpack_exports__, { 263 /* harmony export */ getAjaxUrl: function() { return /* binding */ getAjaxUrl; }, 264 /* harmony export */ getFrontends: function() { return /* binding */ getFrontends; }, 265 /* harmony export */ getPreviewUrl: function() { return /* binding */ getPreviewUrl; }, 266 /* harmony export */ getReloadAjaxUrl: function() { return /* binding */ getReloadAjaxUrl; } 267 /* harmony export */ }); 268 const getAjaxUrl = () => window.Headless.ajax; 269 const getReloadAjaxUrl = (frontend, path) => getAjaxUrl() + `?action=${window.Headless.actions.revalidate}&frontend=${frontend}&path=${path}`; 270 const getPreviewUrl = postId => { 271 return window.Headless.preview_url.replace(window.Headless.post_id_placeholder, `${postId}`); 272 }; 273 const getFrontends = () => window.Headless.frontends; 274 275 /***/ }), 276 277 /***/ "./src/styles.css": 278 /*!************************!*\ 279 !*** ./src/styles.css ***! 280 \************************/ 281 /***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { 282 283 __webpack_require__.r(__webpack_exports__); 284 // extracted by mini-css-extract-plugin 285 286 287 /***/ }), 288 289 /***/ "react": 290 /*!************************!*\ 291 !*** external "React" ***! 292 \************************/ 293 /***/ (function(module) { 294 295 module.exports = window["React"]; 296 297 /***/ }), 298 299 /***/ "@wordpress/components": 300 /*!************************************!*\ 301 !*** external ["wp","components"] ***! 302 \************************************/ 303 /***/ (function(module) { 304 305 module.exports = window["wp"]["components"]; 306 307 /***/ }), 308 309 /***/ "@wordpress/data": 310 /*!******************************!*\ 311 !*** external ["wp","data"] ***! 312 \******************************/ 313 /***/ (function(module) { 314 315 module.exports = window["wp"]["data"]; 316 317 /***/ }), 318 319 /***/ "@wordpress/edit-post": 320 /*!**********************************!*\ 321 !*** external ["wp","editPost"] ***! 322 \**********************************/ 323 /***/ (function(module) { 324 325 module.exports = window["wp"]["editPost"]; 326 327 /***/ }), 328 329 /***/ "@wordpress/element": 330 /*!*********************************!*\ 331 !*** external ["wp","element"] ***! 332 \*********************************/ 333 /***/ (function(module) { 334 335 module.exports = window["wp"]["element"]; 336 337 /***/ }), 338 339 /***/ "@wordpress/plugins": 340 /*!*********************************!*\ 341 !*** external ["wp","plugins"] ***! 342 \*********************************/ 343 /***/ (function(module) { 344 345 module.exports = window["wp"]["plugins"]; 346 347 /***/ }) 348 349 /******/ }); 350 /************************************************************************/ 351 /******/ // The module cache 352 /******/ var __webpack_module_cache__ = {}; 353 /******/ 354 /******/ // The require function 355 /******/ function __webpack_require__(moduleId) { 356 /******/ // Check if module is in cache 357 /******/ var cachedModule = __webpack_module_cache__[moduleId]; 358 /******/ if (cachedModule !== undefined) { 359 /******/ return cachedModule.exports; 360 /******/ } 361 /******/ // Create a new module (and put it into the cache) 362 /******/ var module = __webpack_module_cache__[moduleId] = { 363 /******/ // no module.id needed 364 /******/ // no module.loaded needed 365 /******/ exports: {} 366 /******/ }; 367 /******/ 368 /******/ // Execute the module function 369 /******/ __webpack_modules__[moduleId](module, module.exports, __webpack_require__); 370 /******/ 371 /******/ // Return the exports of the module 372 /******/ return module.exports; 373 /******/ } 374 /******/ 375 /************************************************************************/ 376 /******/ /* webpack/runtime/compat get default export */ 377 /******/ !function() { 378 /******/ // getDefaultExport function for compatibility with non-harmony modules 379 /******/ __webpack_require__.n = function(module) { 380 /******/ var getter = module && module.__esModule ? 381 /******/ function() { return module['default']; } : 382 /******/ function() { return module; }; 383 /******/ __webpack_require__.d(getter, { a: getter }); 384 /******/ return getter; 385 /******/ }; 386 /******/ }(); 387 /******/ 388 /******/ /* webpack/runtime/define property getters */ 389 /******/ !function() { 390 /******/ // define getter functions for harmony exports 391 /******/ __webpack_require__.d = function(exports, definition) { 392 /******/ for(var key in definition) { 393 /******/ if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) { 394 /******/ Object.defineProperty(exports, key, { enumerable: true, get: definition[key] }); 395 /******/ } 396 /******/ } 397 /******/ }; 398 /******/ }(); 399 /******/ 400 /******/ /* webpack/runtime/hasOwnProperty shorthand */ 401 /******/ !function() { 402 /******/ __webpack_require__.o = function(obj, prop) { return Object.prototype.hasOwnProperty.call(obj, prop); } 403 /******/ }(); 404 /******/ 405 /******/ /* webpack/runtime/make namespace object */ 406 /******/ !function() { 407 /******/ // define __esModule on exports 408 /******/ __webpack_require__.r = function(exports) { 409 /******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) { 410 /******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' }); 411 /******/ } 412 /******/ Object.defineProperty(exports, '__esModule', { value: true }); 413 /******/ }; 414 /******/ }(); 415 /******/ 416 /************************************************************************/ 417 var __webpack_exports__ = {}; 418 // This entry need to be wrapped in an IIFE because it need to be isolated against other modules in the chunk. 419 !function() { 420 /*!**************************!*\ 421 !*** ./src/gutenberg.ts ***! 422 \**************************/ 423 __webpack_require__.r(__webpack_exports__); 424 /* harmony import */ var _wordpress_plugins__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @wordpress/plugins */ "@wordpress/plugins"); 425 /* harmony import */ var _wordpress_plugins__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_wordpress_plugins__WEBPACK_IMPORTED_MODULE_0__); 426 /* harmony import */ var _components_ReloadPanel__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./components/ReloadPanel */ "./src/components/ReloadPanel.tsx"); 427 /* harmony import */ var _store_window__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./store/window */ "./src/store/window.ts"); 428 /* harmony import */ var _wordpress_data__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @wordpress/data */ "@wordpress/data"); 429 /* harmony import */ var _wordpress_data__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_wordpress_data__WEBPACK_IMPORTED_MODULE_3__); 430 /* harmony import */ var _preview__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./preview */ "./src/preview.ts"); 431 /* harmony import */ var _styles_css__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./styles.css */ "./src/styles.css"); 432 433 434 435 436 437 438 (0,_wordpress_plugins__WEBPACK_IMPORTED_MODULE_0__.registerPlugin)('headless-plugin', { 439 icon: () => null, 440 render: _components_ReloadPanel__WEBPACK_IMPORTED_MODULE_1__["default"] 441 }); 442 document.addEventListener("DOMContentLoaded", function () { 443 const coreEditorSelect = (0,_wordpress_data__WEBPACK_IMPORTED_MODULE_3__.select)("core/editor"); 444 const getCurrentPostId = coreEditorSelect.getCurrentPostId; 445 const isSavingPost = coreEditorSelect.isSavingPost; 446 const isDraft = () => { 447 const status = coreEditorSelect.getCurrentPost().status; 448 return status == "draft" || status == "auto-draft"; 449 }; 450 const coreEditorDispatch = (0,_wordpress_data__WEBPACK_IMPORTED_MODULE_3__.dispatch)("core/editor"); 451 const autosave = coreEditorDispatch.autosave; 452 const savePost = coreEditorDispatch.savePost; 453 454 // -------------------------------------------------------- 455 // create replacement for preview link 456 // -------------------------------------------------------- 457 const a = document.createElement("a"); 458 a.className = "components-button"; 459 a.addEventListener('click', e => { 460 e.preventDefault(); 461 if (isSavingPost()) { 462 return; 463 } 464 const ref = window.open('about:blank', a.target); 465 (0,_preview__WEBPACK_IMPORTED_MODULE_4__.writeInterstitialMessage)(ref.document); 466 const saveFn = isDraft() ? savePost : autosave; 467 saveFn().then(() => { 468 ref.location = a.href; 469 }); 470 }); 471 (0,_wordpress_data__WEBPACK_IMPORTED_MODULE_3__.subscribe)(() => { 472 if (isSavingPost()) { 473 a.classList.add("is-disabled"); 474 } else { 475 a.classList.remove("is-disabled"); 476 } 477 }); 478 479 // -------------------------------------------------------- 480 // hack it with interval updates 481 // -------------------------------------------------------- 482 // workaround script until there's an official solution for https://github.com/WordPress/gutenberg/issues/13998 483 setInterval(checkPreview, 300); 484 function checkPreview() { 485 const postId = getCurrentPostId(); 486 const previewUrl = (0,_store_window__WEBPACK_IMPORTED_MODULE_2__.getPreviewUrl)(postId); 487 488 // replace all preview links 489 const editorPreviewLink = document.querySelectorAll("[target^=wp-preview-]"); 490 if (editorPreviewLink && editorPreviewLink.length) { 491 editorPreviewLink.forEach(link => { 492 link.setAttribute("href", previewUrl); 493 }); 494 } 495 496 // replace notice link 497 const notices = document.querySelectorAll(".components-snackbar-list .components-snackbar__content a.components-button"); 498 notices.forEach(notice => { 499 if (notice.href.includes("?post=" + postId) // custom post types 500 || notice.href.includes("?page_id=" + postId) // pages 501 || notice.href.includes("?p=" + postId) // posts 502 ) { 503 notice.href = previewUrl; 504 notice.target = "wp-preview-" + postId; 505 } 506 }); 507 508 // replace this special preview link 509 const previewGroups = document.querySelectorAll(".edit-post-post-preview-dropdown .components-menu-group"); 510 let externalPreviewGroup = null; 511 previewGroups.forEach(group => { 512 if (group.querySelector(".edit-post-header-preview__grouping-external")) { 513 externalPreviewGroup = group; 514 } 515 }); 516 if (!externalPreviewGroup) { 517 return; 518 } 519 const id = "headless-preview-link"; 520 if (externalPreviewGroup.querySelector("#" + id)) { 521 return; 522 } 523 524 // is hidden via styles.css 525 const gutenbergLink = externalPreviewGroup.querySelector(".edit-post-header-preview__grouping-external a"); 526 const target = gutenbergLink.getAttribute("target"); 527 a.text = gutenbergLink.textContent; 528 const icon = document.createElement("span"); 529 icon.className = "dashicons dashicons-external"; 530 a.append(icon); 531 a.target = target; 532 a.href = previewUrl; 533 a.id = id; 534 externalPreviewGroup.querySelector('[role="group"]').append(a); 535 } 536 }); 537 }(); 538 /******/ })() 539 ; 540 //# sourceMappingURL=gutenberg.js.map 1 !function(){"use strict";var t=window.wp.plugins,e=window.React,n=window.wp.editPost,s=window.wp.components;var a=window.wp.data,i=window.wp.element;const r=()=>(0,a.useSelect)((t=>t("core/editor").getCurrentPost()),[]),o=({index:t,baseUrl:n,controller:s,onStateChanged:a})=>{const{state:o,reload:l}=(t=>{const[e,n]=(0,i.useState)("idle"),s=r(),a=(0,i.useMemo)((()=>s?.link?new URL(s?.link).pathname:""),[s.link]);return{state:e,reload:()=>{n("loading"),(async()=>{try{const e=await fetch(((t,e)=>window.Headless.ajax+`?action=${window.Headless.actions.revalidate}&frontend=${t}&path=${e}`)(t,a)),s=await e.json();s.success?n("success"):(console.error(s),n("error"))}catch(t){n("error")}})()}}})(t),c=r(),d=(0,i.useMemo)((()=>{const t=c.link,e=new URL(t);return n.replace(/^\/|\/$/g,"")+e.pathname}),[c.link]);return(0,i.useEffect)((()=>{s.add(t,l)}),[t]),(0,i.useEffect)((()=>{a(t,o)}),[o]),(0,e.createElement)("div",{title:d},(0,e.createElement)("a",{href:d,target:"_blank"},"Frontend ",t),"loading"==o&&(0,e.createElement)(e.Fragment,null," 🧹"),"success"==o&&(0,e.createElement)(e.Fragment,null," ✅"),"error"==o&&(0,e.createElement)(e.Fragment,null," 🚨"))};(0,t.registerPlugin)("headless-plugin",{icon:()=>null,render:function(){const t=window.Headless.frontends,a=(0,i.useMemo)((()=>(()=>{const t=new Map;return{add:(e,n)=>{t.set(e,n)},run:()=>{t.forEach((t=>{t()}))}}})()),[]),[l,c]=(0,i.useState)({}),d="publish"==r().status,p=Object.values(l).find((t=>1==t));return(0,e.createElement)(n.PluginDocumentSettingPanel,{title:"Headless"},d?(0,e.createElement)(e.Fragment,null,(0,e.createElement)("ol",null,t.map(((t,n)=>(0,e.createElement)("li",{key:n},(0,e.createElement)(o,{baseUrl:t,index:n,controller:a,onStateChanged:(t,e)=>{c((n=>{const s={...n};return s[t]="loading"==e,s}))}}))))),(0,e.createElement)(s.Button,{variant:"secondary",disabled:p||!d,onClick:()=>{a.run()}},"Revalidate cache")):(0,e.createElement)("p",{className:"description"},"Only published contents can be revalidated."))}}),document.addEventListener("DOMContentLoaded",(function(){const t=(0,a.select)("core/editor"),e=t.getCurrentPostId,n=t.isSavingPost,s=(0,a.dispatch)("core/editor"),i=s.autosave,r=s.savePost,o=document.createElement("a");o.className="components-button",o.addEventListener("click",(e=>{if(e.preventDefault(),n())return;const s=window.open("about:blank",o.target);!function(t){let e="";e+='\n\t\t<style>\n\t\t\tbody {\n\t\t\t\tmargin: 0;\n\t\t\t}\n\t\t\t.editor-post-preview-button__interstitial-message {\n\t\t\t\tdisplay: flex;\n\t\t\t\tflex-direction: column;\n\t\t\t\talign-items: center;\n\t\t\t\tjustify-content: center;\n\t\t\t\theight: 100vh;\n\t\t\t\twidth: 100vw;\n\t\t\t}\n\t\t\t@-webkit-keyframes paint {\n\t\t\t\t0% {\n\t\t\t\t\tstroke-dashoffset: 0;\n\t\t\t\t}\n\t\t\t}\n\t\t\t@-moz-keyframes paint {\n\t\t\t\t0% {\n\t\t\t\t\tstroke-dashoffset: 0;\n\t\t\t\t}\n\t\t\t}\n\t\t\t@-o-keyframes paint {\n\t\t\t\t0% {\n\t\t\t\t\tstroke-dashoffset: 0;\n\t\t\t\t}\n\t\t\t}\n\t\t\t@keyframes paint {\n\t\t\t\t0% {\n\t\t\t\t\tstroke-dashoffset: 0;\n\t\t\t\t}\n\t\t\t}\n\t\t\t.editor-post-preview-button__interstitial-message svg {\n\t\t\t\twidth: 192px;\n\t\t\t\theight: 192px;\n\t\t\t\tstroke: #555d66;\n\t\t\t\tstroke-width: 0.75;\n\t\t\t}\n\t\t\t.editor-post-preview-button__interstitial-message svg .outer,\n\t\t\t.editor-post-preview-button__interstitial-message svg .inner {\n\t\t\t\tstroke-dasharray: 280;\n\t\t\t\tstroke-dashoffset: 280;\n\t\t\t\t-webkit-animation: paint 1.5s ease infinite alternate;\n\t\t\t\t-moz-animation: paint 1.5s ease infinite alternate;\n\t\t\t\t-o-animation: paint 1.5s ease infinite alternate;\n\t\t\t\tanimation: paint 1.5s ease infinite alternate;\n\t\t\t}\n\t\t\tp {\n\t\t\t\ttext-align: center;\n\t\t\t\tfont-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif;\n\t\t\t}\n\t\t</style>\n\t',e+='\n <div class="editor-post-preview-button__interstitial-message">\n <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 96 96">\n <path class="outer" d="M48 12c19.9 0 36 16.1 36 36S67.9 84 48 84 12 67.9 12 48s16.1-36 36-36" fill="none" />\n <path class="inner" d="M69.5 46.4c0-3.9-1.4-6.7-2.6-8.8-1.6-2.6-3.1-4.9-3.1-7.5 0-2.9 2.2-5.7 5.4-5.7h.4C63.9 19.2 56.4 16 48 16c-11.2 0-21 5.7-26.7 14.4h2.1c3.3 0 8.5-.4 8.5-.4 1.7-.1 1.9 2.4.2 2.6 0 0-1.7.2-3.7.3L40 67.5l7-20.9L42 33c-1.7-.1-3.3-.3-3.3-.3-1.7-.1-1.5-2.7.2-2.6 0 0 5.3.4 8.4.4 3.3 0 8.5-.4 8.5-.4 1.7-.1 1.9 2.4.2 2.6 0 0-1.7.2-3.7.3l11.5 34.3 3.3-10.4c1.6-4.5 2.4-7.8 2.4-10.5zM16.1 48c0 12.6 7.3 23.5 18 28.7L18.8 35c-1.7 4-2.7 8.4-2.7 13zm32.5 2.8L39 78.6c2.9.8 5.9 1.3 9 1.3 3.7 0 7.3-.6 10.6-1.8-.1-.1-.2-.3-.2-.4l-9.8-26.9zM76.2 36c0 3.2-.6 6.9-2.4 11.4L64 75.6c9.5-5.5 15.9-15.8 15.9-27.6 0-5.5-1.4-10.8-3.9-15.3.1 1 .2 2.1.2 3.3z" fill="none" />\n </svg>\n <p>Generating preview…</p>\n </div>\n ',t.write('\n\t\t<style>\n\t\t\tbody {\n\t\t\t\tmargin: 0;\n\t\t\t}\n\t\t\t.editor-post-preview-button__interstitial-message {\n\t\t\t\tdisplay: flex;\n\t\t\t\tflex-direction: column;\n\t\t\t\talign-items: center;\n\t\t\t\tjustify-content: center;\n\t\t\t\theight: 100vh;\n\t\t\t\twidth: 100vw;\n\t\t\t}\n\t\t\t@-webkit-keyframes paint {\n\t\t\t\t0% {\n\t\t\t\t\tstroke-dashoffset: 0;\n\t\t\t\t}\n\t\t\t}\n\t\t\t@-moz-keyframes paint {\n\t\t\t\t0% {\n\t\t\t\t\tstroke-dashoffset: 0;\n\t\t\t\t}\n\t\t\t}\n\t\t\t@-o-keyframes paint {\n\t\t\t\t0% {\n\t\t\t\t\tstroke-dashoffset: 0;\n\t\t\t\t}\n\t\t\t}\n\t\t\t@keyframes paint {\n\t\t\t\t0% {\n\t\t\t\t\tstroke-dashoffset: 0;\n\t\t\t\t}\n\t\t\t}\n\t\t\t.editor-post-preview-button__interstitial-message svg {\n\t\t\t\twidth: 192px;\n\t\t\t\theight: 192px;\n\t\t\t\tstroke: #555d66;\n\t\t\t\tstroke-width: 0.75;\n\t\t\t}\n\t\t\t.editor-post-preview-button__interstitial-message svg .outer,\n\t\t\t.editor-post-preview-button__interstitial-message svg .inner {\n\t\t\t\tstroke-dasharray: 280;\n\t\t\t\tstroke-dashoffset: 280;\n\t\t\t\t-webkit-animation: paint 1.5s ease infinite alternate;\n\t\t\t\t-moz-animation: paint 1.5s ease infinite alternate;\n\t\t\t\t-o-animation: paint 1.5s ease infinite alternate;\n\t\t\t\tanimation: paint 1.5s ease infinite alternate;\n\t\t\t}\n\t\t\tp {\n\t\t\t\ttext-align: center;\n\t\t\t\tfont-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif;\n\t\t\t}\n\t\t</style>\n\t\n <div class="editor-post-preview-button__interstitial-message">\n <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 96 96">\n <path class="outer" d="M48 12c19.9 0 36 16.1 36 36S67.9 84 48 84 12 67.9 12 48s16.1-36 36-36" fill="none" />\n <path class="inner" d="M69.5 46.4c0-3.9-1.4-6.7-2.6-8.8-1.6-2.6-3.1-4.9-3.1-7.5 0-2.9 2.2-5.7 5.4-5.7h.4C63.9 19.2 56.4 16 48 16c-11.2 0-21 5.7-26.7 14.4h2.1c3.3 0 8.5-.4 8.5-.4 1.7-.1 1.9 2.4.2 2.6 0 0-1.7.2-3.7.3L40 67.5l7-20.9L42 33c-1.7-.1-3.3-.3-3.3-.3-1.7-.1-1.5-2.7.2-2.6 0 0 5.3.4 8.4.4 3.3 0 8.5-.4 8.5-.4 1.7-.1 1.9 2.4.2 2.6 0 0-1.7.2-3.7.3l11.5 34.3 3.3-10.4c1.6-4.5 2.4-7.8 2.4-10.5zM16.1 48c0 12.6 7.3 23.5 18 28.7L18.8 35c-1.7 4-2.7 8.4-2.7 13zm32.5 2.8L39 78.6c2.9.8 5.9 1.3 9 1.3 3.7 0 7.3-.6 10.6-1.8-.1-.1-.2-.3-.2-.4l-9.8-26.9zM76.2 36c0 3.2-.6 6.9-2.4 11.4L64 75.6c9.5-5.5 15.9-15.8 15.9-27.6 0-5.5-1.4-10.8-3.9-15.3.1 1 .2 2.1.2 3.3z" fill="none" />\n </svg>\n <p>Generating preview…</p>\n </div>\n '),t.close()}(s.document),((()=>{const e=t.getCurrentPost().status;return"draft"==e||"auto-draft"==e})()?r:i)().then((()=>{s.location=o.href}))})),(0,a.subscribe)((()=>{n()?o.classList.add("is-disabled"):o.classList.remove("is-disabled")})),setInterval((function(){const t=e(),n=(t=>window.Headless.preview_url.replace(window.Headless.post_id_placeholder,`${t}`))(t),s=document.querySelectorAll("[target^=wp-preview-]");s&&s.length&&s.forEach((t=>{t.setAttribute("href",n)})),document.querySelectorAll(".components-snackbar-list .components-snackbar__content a.components-button").forEach((e=>{(e.href.includes("?post="+t)||e.href.includes("?page_id="+t)||e.href.includes("?p="+t))&&(e.href=n,e.target="wp-preview-"+t)}));const a=document.querySelectorAll(".components-menu-group");let i=null;if(a.forEach((t=>{t.querySelector(".editor-preview-dropdown__button-external")&&(i=t)})),!i)return;const r="headless-preview-link";if(i.querySelector("#"+r))return;const l=i.querySelector(".editor-preview-dropdown__button-external"),c=l.querySelector("svg"),d=l.getAttribute("target");o.text=l.textContent,o.append(c),o.target=d,o.href=n,o.id=r,l.style.display="none",i.querySelector('[role="group"]').append(o)}),300)}))}(); -
headless/trunk/headless.php
r3060647 r3072776 5 5 * Plugin URI: https://github.com/palasthotel/headless 6 6 * Description: Adds features to use WordPress as headless CMS 7 * Version: 2.2. 37 * Version: 2.2.4 8 8 * Author: Palasthotel (Edward Bock) <edward.bock@palasthotel.de> 9 9 * Author URI: http://www.palasthotel.de 10 10 * Requires at least: 5.0 11 * Tested up to: 6. 4.311 * Tested up to: 6.5.2 12 12 * Requires PHP: 8.0 13 13 * Text Domain: headless … … 91 91 92 92 const FILTER_REST_RESPONSE_HEADERS = "headless_rest_response_headers"; 93 const FILTER_REST_RESPONSE_DATA = "headless_rest_response_data"; 93 94 94 const FILTER_FRONTENDS = "headless_frontends";95 const FILTER_FRONTENDS = "headless_frontends"; 95 96 const FILTER_REVALIDATE_BY_PATH_URL = "headless_revalidate_by_path_url"; 96 97 const FILTER_REVALIDATE_BY_TAG_URL = "headless_revalidate_by_tag_url"; -
headless/trunk/vendor/composer/installed.php
r3060647 r3072776 4 4 'pretty_version' => 'dev-main', 5 5 'version' => 'dev-main', 6 'reference' => ' 67c18db40fcf4819d0817bbbf3b943a88a848d91',6 'reference' => '54dd1eeef2a9fb154922d1ca2caee4fa7eaf4491', 7 7 'type' => 'library', 8 8 'install_path' => __DIR__ . '/../../', … … 14 14 'pretty_version' => 'dev-main', 15 15 'version' => 'dev-main', 16 'reference' => ' 67c18db40fcf4819d0817bbbf3b943a88a848d91',16 'reference' => '54dd1eeef2a9fb154922d1ca2caee4fa7eaf4491', 17 17 'type' => 'library', 18 18 'install_path' => __DIR__ . '/../../',
Note: See TracChangeset
for help on using the changeset viewer.