[ Index ] |
PHP Cross Reference of WordPress |
[Summary view] [Print] [Text view]
1 /******/ (function() { // webpackBootstrap 2 /******/ "use strict"; 3 /******/ // The require scope 4 /******/ var __webpack_require__ = {}; 5 /******/ 6 /************************************************************************/ 7 /******/ /* webpack/runtime/compat get default export */ 8 /******/ !function() { 9 /******/ // getDefaultExport function for compatibility with non-harmony modules 10 /******/ __webpack_require__.n = function(module) { 11 /******/ var getter = module && module.__esModule ? 12 /******/ function() { return module['default']; } : 13 /******/ function() { return module; }; 14 /******/ __webpack_require__.d(getter, { a: getter }); 15 /******/ return getter; 16 /******/ }; 17 /******/ }(); 18 /******/ 19 /******/ /* webpack/runtime/define property getters */ 20 /******/ !function() { 21 /******/ // define getter functions for harmony exports 22 /******/ __webpack_require__.d = function(exports, definition) { 23 /******/ for(var key in definition) { 24 /******/ if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) { 25 /******/ Object.defineProperty(exports, key, { enumerable: true, get: definition[key] }); 26 /******/ } 27 /******/ } 28 /******/ }; 29 /******/ }(); 30 /******/ 31 /******/ /* webpack/runtime/hasOwnProperty shorthand */ 32 /******/ !function() { 33 /******/ __webpack_require__.o = function(obj, prop) { return Object.prototype.hasOwnProperty.call(obj, prop); } 34 /******/ }(); 35 /******/ 36 /******/ /* webpack/runtime/make namespace object */ 37 /******/ !function() { 38 /******/ // define __esModule on exports 39 /******/ __webpack_require__.r = function(exports) { 40 /******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) { 41 /******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' }); 42 /******/ } 43 /******/ Object.defineProperty(exports, '__esModule', { value: true }); 44 /******/ }; 45 /******/ }(); 46 /******/ 47 /************************************************************************/ 48 var __webpack_exports__ = {}; 49 // ESM COMPAT FLAG 50 __webpack_require__.r(__webpack_exports__); 51 52 // EXPORTS 53 __webpack_require__.d(__webpack_exports__, { 54 "store": function() { return /* reexport */ store; } 55 }); 56 57 // NAMESPACE OBJECT: ./node_modules/@wordpress/block-directory/build-module/store/selectors.js 58 var selectors_namespaceObject = {}; 59 __webpack_require__.r(selectors_namespaceObject); 60 __webpack_require__.d(selectors_namespaceObject, { 61 "getDownloadableBlocks": function() { return getDownloadableBlocks; }, 62 "getErrorNoticeForBlock": function() { return getErrorNoticeForBlock; }, 63 "getErrorNotices": function() { return getErrorNotices; }, 64 "getInstalledBlockTypes": function() { return getInstalledBlockTypes; }, 65 "getNewBlockTypes": function() { return getNewBlockTypes; }, 66 "getUnusedBlockTypes": function() { return getUnusedBlockTypes; }, 67 "isInstalling": function() { return isInstalling; }, 68 "isRequestingDownloadableBlocks": function() { return isRequestingDownloadableBlocks; } 69 }); 70 71 // NAMESPACE OBJECT: ./node_modules/@wordpress/block-directory/build-module/store/actions.js 72 var actions_namespaceObject = {}; 73 __webpack_require__.r(actions_namespaceObject); 74 __webpack_require__.d(actions_namespaceObject, { 75 "addInstalledBlockType": function() { return addInstalledBlockType; }, 76 "clearErrorNotice": function() { return clearErrorNotice; }, 77 "fetchDownloadableBlocks": function() { return fetchDownloadableBlocks; }, 78 "installBlockType": function() { return installBlockType; }, 79 "receiveDownloadableBlocks": function() { return receiveDownloadableBlocks; }, 80 "removeInstalledBlockType": function() { return removeInstalledBlockType; }, 81 "setErrorNotice": function() { return setErrorNotice; }, 82 "setIsInstalling": function() { return setIsInstalling; }, 83 "uninstallBlockType": function() { return uninstallBlockType; } 84 }); 85 86 // NAMESPACE OBJECT: ./node_modules/@wordpress/block-directory/build-module/store/resolvers.js 87 var resolvers_namespaceObject = {}; 88 __webpack_require__.r(resolvers_namespaceObject); 89 __webpack_require__.d(resolvers_namespaceObject, { 90 "getDownloadableBlocks": function() { return resolvers_getDownloadableBlocks; } 91 }); 92 93 ;// CONCATENATED MODULE: external ["wp","element"] 94 var external_wp_element_namespaceObject = window["wp"]["element"]; 95 ;// CONCATENATED MODULE: external ["wp","plugins"] 96 var external_wp_plugins_namespaceObject = window["wp"]["plugins"]; 97 ;// CONCATENATED MODULE: external ["wp","hooks"] 98 var external_wp_hooks_namespaceObject = window["wp"]["hooks"]; 99 ;// CONCATENATED MODULE: external ["wp","blocks"] 100 var external_wp_blocks_namespaceObject = window["wp"]["blocks"]; 101 ;// CONCATENATED MODULE: external ["wp","data"] 102 var external_wp_data_namespaceObject = window["wp"]["data"]; 103 ;// CONCATENATED MODULE: external ["wp","editor"] 104 var external_wp_editor_namespaceObject = window["wp"]["editor"]; 105 ;// CONCATENATED MODULE: external "lodash" 106 var external_lodash_namespaceObject = window["lodash"]; 107 ;// CONCATENATED MODULE: ./node_modules/@wordpress/block-directory/build-module/store/reducer.js 108 /** 109 * External dependencies 110 */ 111 112 /** 113 * WordPress dependencies 114 */ 115 116 117 /** 118 * Reducer returning an array of downloadable blocks. 119 * 120 * @param {Object} state Current state. 121 * @param {Object} action Dispatched action. 122 * 123 * @return {Object} Updated state. 124 */ 125 126 const downloadableBlocks = function () { 127 let state = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; 128 let action = arguments.length > 1 ? arguments[1] : undefined; 129 130 switch (action.type) { 131 case 'FETCH_DOWNLOADABLE_BLOCKS': 132 return { ...state, 133 [action.filterValue]: { 134 isRequesting: true 135 } 136 }; 137 138 case 'RECEIVE_DOWNLOADABLE_BLOCKS': 139 return { ...state, 140 [action.filterValue]: { 141 results: action.downloadableBlocks, 142 isRequesting: false 143 } 144 }; 145 } 146 147 return state; 148 }; 149 /** 150 * Reducer managing the installation and deletion of blocks. 151 * 152 * @param {Object} state Current state. 153 * @param {Object} action Dispatched action. 154 * 155 * @return {Object} Updated state. 156 */ 157 158 const blockManagement = function () { 159 let state = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : { 160 installedBlockTypes: [], 161 isInstalling: {} 162 }; 163 let action = arguments.length > 1 ? arguments[1] : undefined; 164 165 switch (action.type) { 166 case 'ADD_INSTALLED_BLOCK_TYPE': 167 return { ...state, 168 installedBlockTypes: [...state.installedBlockTypes, action.item] 169 }; 170 171 case 'REMOVE_INSTALLED_BLOCK_TYPE': 172 return { ...state, 173 installedBlockTypes: state.installedBlockTypes.filter(blockType => blockType.name !== action.item.name) 174 }; 175 176 case 'SET_INSTALLING_BLOCK': 177 return { ...state, 178 isInstalling: { ...state.isInstalling, 179 [action.blockId]: action.isInstalling 180 } 181 }; 182 } 183 184 return state; 185 }; 186 /** 187 * Reducer returning an object of error notices. 188 * 189 * @param {Object} state Current state. 190 * @param {Object} action Dispatched action. 191 * 192 * @return {Object} Updated state. 193 */ 194 195 const errorNotices = function () { 196 let state = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; 197 let action = arguments.length > 1 ? arguments[1] : undefined; 198 199 switch (action.type) { 200 case 'SET_ERROR_NOTICE': 201 return { ...state, 202 [action.blockId]: { 203 message: action.message, 204 isFatal: action.isFatal 205 } 206 }; 207 208 case 'CLEAR_ERROR_NOTICE': 209 return (0,external_lodash_namespaceObject.omit)(state, action.blockId); 210 } 211 212 return state; 213 }; 214 /* harmony default export */ var reducer = ((0,external_wp_data_namespaceObject.combineReducers)({ 215 downloadableBlocks, 216 blockManagement, 217 errorNotices 218 })); 219 220 ;// CONCATENATED MODULE: external ["wp","blockEditor"] 221 var external_wp_blockEditor_namespaceObject = window["wp"]["blockEditor"]; 222 ;// CONCATENATED MODULE: ./node_modules/@wordpress/block-directory/build-module/store/utils/has-block-type.js 223 /** 224 * Check if a block list contains a specific block type. Recursively searches 225 * through `innerBlocks` if they exist. 226 * 227 * @param {Object} blockType A block object to search for. 228 * @param {Object[]} blocks The list of blocks to look through. 229 * 230 * @return {boolean} Whether the blockType is found. 231 */ 232 function hasBlockType(blockType) { 233 let blocks = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : []; 234 235 if (!blocks.length) { 236 return false; 237 } 238 239 if (blocks.some(_ref => { 240 let { 241 name 242 } = _ref; 243 return name === blockType.name; 244 })) { 245 return true; 246 } 247 248 for (let i = 0; i < blocks.length; i++) { 249 if (hasBlockType(blockType, blocks[i].innerBlocks)) { 250 return true; 251 } 252 } 253 254 return false; 255 } 256 257 ;// CONCATENATED MODULE: ./node_modules/@wordpress/block-directory/build-module/store/selectors.js 258 /** 259 * WordPress dependencies 260 */ 261 262 263 /** 264 * Internal dependencies 265 */ 266 267 268 /** 269 * Returns true if application is requesting for downloadable blocks. 270 * 271 * @param {Object} state Global application state. 272 * @param {string} filterValue Search string. 273 * 274 * @return {boolean} Whether a request is in progress for the blocks list. 275 */ 276 277 function isRequestingDownloadableBlocks(state, filterValue) { 278 var _state$downloadableBl, _state$downloadableBl2; 279 280 return (_state$downloadableBl = (_state$downloadableBl2 = state.downloadableBlocks[filterValue]) === null || _state$downloadableBl2 === void 0 ? void 0 : _state$downloadableBl2.isRequesting) !== null && _state$downloadableBl !== void 0 ? _state$downloadableBl : false; 281 } 282 /** 283 * Returns the available uninstalled blocks. 284 * 285 * @param {Object} state Global application state. 286 * @param {string} filterValue Search string. 287 * 288 * @return {Array} Downloadable blocks. 289 */ 290 291 function getDownloadableBlocks(state, filterValue) { 292 var _state$downloadableBl3, _state$downloadableBl4; 293 294 return (_state$downloadableBl3 = (_state$downloadableBl4 = state.downloadableBlocks[filterValue]) === null || _state$downloadableBl4 === void 0 ? void 0 : _state$downloadableBl4.results) !== null && _state$downloadableBl3 !== void 0 ? _state$downloadableBl3 : []; 295 } 296 /** 297 * Returns the block types that have been installed on the server in this 298 * session. 299 * 300 * @param {Object} state Global application state. 301 * 302 * @return {Array} Block type items 303 */ 304 305 function getInstalledBlockTypes(state) { 306 return state.blockManagement.installedBlockTypes; 307 } 308 /** 309 * Returns block types that have been installed on the server and used in the 310 * current post. 311 * 312 * @param {Object} state Global application state. 313 * 314 * @return {Array} Block type items. 315 */ 316 317 const getNewBlockTypes = (0,external_wp_data_namespaceObject.createRegistrySelector)(select => state => { 318 const usedBlockTree = select(external_wp_blockEditor_namespaceObject.store).getBlocks(); 319 const installedBlockTypes = getInstalledBlockTypes(state); 320 return installedBlockTypes.filter(blockType => hasBlockType(blockType, usedBlockTree)); 321 }); 322 /** 323 * Returns the block types that have been installed on the server but are not 324 * used in the current post. 325 * 326 * @param {Object} state Global application state. 327 * 328 * @return {Array} Block type items. 329 */ 330 331 const getUnusedBlockTypes = (0,external_wp_data_namespaceObject.createRegistrySelector)(select => state => { 332 const usedBlockTree = select(external_wp_blockEditor_namespaceObject.store).getBlocks(); 333 const installedBlockTypes = getInstalledBlockTypes(state); 334 return installedBlockTypes.filter(blockType => !hasBlockType(blockType, usedBlockTree)); 335 }); 336 /** 337 * Returns true if a block plugin install is in progress. 338 * 339 * @param {Object} state Global application state. 340 * @param {string} blockId Id of the block. 341 * 342 * @return {boolean} Whether this block is currently being installed. 343 */ 344 345 function isInstalling(state, blockId) { 346 return state.blockManagement.isInstalling[blockId] || false; 347 } 348 /** 349 * Returns all block error notices. 350 * 351 * @param {Object} state Global application state. 352 * 353 * @return {Object} Object with error notices. 354 */ 355 356 function getErrorNotices(state) { 357 return state.errorNotices; 358 } 359 /** 360 * Returns the error notice for a given block. 361 * 362 * @param {Object} state Global application state. 363 * @param {string} blockId The ID of the block plugin. eg: my-block 364 * 365 * @return {string|boolean} The error text, or false if no error. 366 */ 367 368 function getErrorNoticeForBlock(state, blockId) { 369 return state.errorNotices[blockId]; 370 } 371 372 ;// CONCATENATED MODULE: external ["wp","i18n"] 373 var external_wp_i18n_namespaceObject = window["wp"]["i18n"]; 374 ;// CONCATENATED MODULE: external ["wp","apiFetch"] 375 var external_wp_apiFetch_namespaceObject = window["wp"]["apiFetch"]; 376 var external_wp_apiFetch_default = /*#__PURE__*/__webpack_require__.n(external_wp_apiFetch_namespaceObject); 377 ;// CONCATENATED MODULE: external ["wp","notices"] 378 var external_wp_notices_namespaceObject = window["wp"]["notices"]; 379 ;// CONCATENATED MODULE: external ["wp","url"] 380 var external_wp_url_namespaceObject = window["wp"]["url"]; 381 ;// CONCATENATED MODULE: ./node_modules/@wordpress/block-directory/build-module/store/load-assets.js 382 /** 383 * WordPress dependencies 384 */ 385 386 /** 387 * Load an asset for a block. 388 * 389 * This function returns a Promise that will resolve once the asset is loaded, 390 * or in the case of Stylesheets and Inline JavaScript, will resolve immediately. 391 * 392 * @param {HTMLElement} el A HTML Element asset to inject. 393 * 394 * @return {Promise} Promise which will resolve when the asset is loaded. 395 */ 396 397 const loadAsset = el => { 398 return new Promise((resolve, reject) => { 399 /* 400 * Reconstruct the passed element, this is required as inserting the Node directly 401 * won't always fire the required onload events, even if the asset wasn't already loaded. 402 */ 403 const newNode = document.createElement(el.nodeName); 404 ['id', 'rel', 'src', 'href', 'type'].forEach(attr => { 405 if (el[attr]) { 406 newNode[attr] = el[attr]; 407 } 408 }); // Append inline <script> contents. 409 410 if (el.innerHTML) { 411 newNode.appendChild(document.createTextNode(el.innerHTML)); 412 } 413 414 newNode.onload = () => resolve(true); 415 416 newNode.onerror = () => reject(new Error('Error loading asset.')); 417 418 document.body.appendChild(newNode); // Resolve Stylesheets and Inline JavaScript immediately. 419 420 if ('link' === newNode.nodeName.toLowerCase() || 'script' === newNode.nodeName.toLowerCase() && !newNode.src) { 421 resolve(); 422 } 423 }); 424 }; 425 /** 426 * Load the asset files for a block 427 */ 428 429 async function loadAssets() { 430 /* 431 * Fetch the current URL (post-new.php, or post.php?post=1&action=edit) and compare the 432 * JavaScript and CSS assets loaded between the pages. This imports the required assets 433 * for the block into the current page while not requiring that we know them up-front. 434 * In the future this can be improved by reliance upon block.json and/or a script-loader 435 * dependency API. 436 */ 437 const response = await external_wp_apiFetch_default()({ 438 url: document.location.href, 439 parse: false 440 }); 441 const data = await response.text(); 442 const doc = new window.DOMParser().parseFromString(data, 'text/html'); 443 const newAssets = Array.from(doc.querySelectorAll('link[rel="stylesheet"],script')).filter(asset => asset.id && !document.getElementById(asset.id)); 444 /* 445 * Load each asset in order, as they may depend upon an earlier loaded script. 446 * Stylesheets and Inline Scripts will resolve immediately upon insertion. 447 */ 448 449 for (const newAsset of newAssets) { 450 await loadAsset(newAsset); 451 } 452 } 453 454 ;// CONCATENATED MODULE: ./node_modules/@wordpress/block-directory/build-module/store/utils/get-plugin-url.js 455 /** 456 * Get the plugin's direct API link out of a block-directory response. 457 * 458 * @param {Object} block The block object 459 * 460 * @return {string} The plugin URL, if exists. 461 */ 462 function getPluginUrl(block) { 463 if (!block) { 464 return false; 465 } 466 467 const link = block.links['wp:plugin'] || block.links.self; 468 469 if (link && link.length) { 470 return link[0].href; 471 } 472 473 return false; 474 } 475 476 ;// CONCATENATED MODULE: ./node_modules/@wordpress/block-directory/build-module/store/actions.js 477 /** 478 * External dependencies 479 */ 480 481 /** 482 * WordPress dependencies 483 */ 484 485 486 487 488 489 490 /** 491 * Internal dependencies 492 */ 493 494 495 496 /** 497 * Returns an action object used in signalling that the downloadable blocks 498 * have been requested and are loading. 499 * 500 * @param {string} filterValue Search string. 501 * 502 * @return {Object} Action object. 503 */ 504 505 function fetchDownloadableBlocks(filterValue) { 506 return { 507 type: 'FETCH_DOWNLOADABLE_BLOCKS', 508 filterValue 509 }; 510 } 511 /** 512 * Returns an action object used in signalling that the downloadable blocks 513 * have been updated. 514 * 515 * @param {Array} downloadableBlocks Downloadable blocks. 516 * @param {string} filterValue Search string. 517 * 518 * @return {Object} Action object. 519 */ 520 521 function receiveDownloadableBlocks(downloadableBlocks, filterValue) { 522 return { 523 type: 'RECEIVE_DOWNLOADABLE_BLOCKS', 524 downloadableBlocks, 525 filterValue 526 }; 527 } 528 /** 529 * Action triggered to install a block plugin. 530 * 531 * @param {Object} block The block item returned by search. 532 * 533 * @return {boolean} Whether the block was successfully installed & loaded. 534 */ 535 536 const installBlockType = block => async _ref => { 537 let { 538 registry, 539 dispatch 540 } = _ref; 541 const { 542 id, 543 name 544 } = block; 545 let success = false; 546 dispatch.clearErrorNotice(id); 547 548 try { 549 dispatch.setIsInstalling(id, true); // If we have a wp:plugin link, the plugin is installed but inactive. 550 551 const url = getPluginUrl(block); 552 let links = {}; 553 554 if (url) { 555 await external_wp_apiFetch_default()({ 556 method: 'PUT', 557 url, 558 data: { 559 status: 'active' 560 } 561 }); 562 } else { 563 const response = await external_wp_apiFetch_default()({ 564 method: 'POST', 565 path: 'wp/v2/plugins', 566 data: { 567 slug: id, 568 status: 'active' 569 } 570 }); // Add the `self` link for newly-installed blocks. 571 572 links = response._links; 573 } 574 575 dispatch.addInstalledBlockType({ ...block, 576 links: { ...block.links, 577 ...links 578 } 579 }); // Ensures that the block metadata is propagated to the editor when registered on the server. 580 581 const metadataFields = ['api_version', 'title', 'category', 'parent', 'icon', 'description', 'keywords', 'attributes', 'provides_context', 'uses_context', 'supports', 'styles', 'example', 'variations']; 582 await external_wp_apiFetch_default()({ 583 path: (0,external_wp_url_namespaceObject.addQueryArgs)(`/wp/v2/block-types/$name}`, { 584 _fields: metadataFields 585 }) 586 }) // Ignore when the block is not registered on the server. 587 .catch(() => {}).then(response => { 588 if (!response) { 589 return; 590 } 591 592 (0,external_wp_blocks_namespaceObject.unstable__bootstrapServerSideBlockDefinitions)({ 593 [name]: (0,external_lodash_namespaceObject.pick)(response, metadataFields) 594 }); 595 }); 596 await loadAssets(); 597 const registeredBlocks = registry.select(external_wp_blocks_namespaceObject.store).getBlockTypes(); 598 599 if (!registeredBlocks.some(i => i.name === name)) { 600 throw new Error((0,external_wp_i18n_namespaceObject.__)('Error registering block. Try reloading the page.')); 601 } 602 603 registry.dispatch(external_wp_notices_namespaceObject.store).createInfoNotice((0,external_wp_i18n_namespaceObject.sprintf)( // translators: %s is the block title. 604 (0,external_wp_i18n_namespaceObject.__)('Block %s installed and added.'), block.title), { 605 speak: true, 606 type: 'snackbar' 607 }); 608 success = true; 609 } catch (error) { 610 let message = error.message || (0,external_wp_i18n_namespaceObject.__)('An error occurred.'); // Errors we throw are fatal. 611 612 613 let isFatal = error instanceof Error; // Specific API errors that are fatal. 614 615 const fatalAPIErrors = { 616 folder_exists: (0,external_wp_i18n_namespaceObject.__)('This block is already installed. Try reloading the page.'), 617 unable_to_connect_to_filesystem: (0,external_wp_i18n_namespaceObject.__)('Error installing block. You can reload the page and try again.') 618 }; 619 620 if (fatalAPIErrors[error.code]) { 621 isFatal = true; 622 message = fatalAPIErrors[error.code]; 623 } 624 625 dispatch.setErrorNotice(id, message, isFatal); 626 registry.dispatch(external_wp_notices_namespaceObject.store).createErrorNotice(message, { 627 speak: true, 628 isDismissible: true 629 }); 630 } 631 632 dispatch.setIsInstalling(id, false); 633 return success; 634 }; 635 /** 636 * Action triggered to uninstall a block plugin. 637 * 638 * @param {Object} block The blockType object. 639 */ 640 641 const uninstallBlockType = block => async _ref2 => { 642 let { 643 registry, 644 dispatch 645 } = _ref2; 646 647 try { 648 const url = getPluginUrl(block); 649 await external_wp_apiFetch_default()({ 650 method: 'PUT', 651 url, 652 data: { 653 status: 'inactive' 654 } 655 }); 656 await external_wp_apiFetch_default()({ 657 method: 'DELETE', 658 url 659 }); 660 dispatch.removeInstalledBlockType(block); 661 } catch (error) { 662 registry.dispatch(external_wp_notices_namespaceObject.store).createErrorNotice(error.message || (0,external_wp_i18n_namespaceObject.__)('An error occurred.')); 663 } 664 }; 665 /** 666 * Returns an action object used to add a block type to the "newly installed" 667 * tracking list. 668 * 669 * @param {Object} item The block item with the block id and name. 670 * 671 * @return {Object} Action object. 672 */ 673 674 function addInstalledBlockType(item) { 675 return { 676 type: 'ADD_INSTALLED_BLOCK_TYPE', 677 item 678 }; 679 } 680 /** 681 * Returns an action object used to remove a block type from the "newly installed" 682 * tracking list. 683 * 684 * @param {string} item The block item with the block id and name. 685 * 686 * @return {Object} Action object. 687 */ 688 689 function removeInstalledBlockType(item) { 690 return { 691 type: 'REMOVE_INSTALLED_BLOCK_TYPE', 692 item 693 }; 694 } 695 /** 696 * Returns an action object used to indicate install in progress. 697 * 698 * @param {string} blockId 699 * @param {boolean} isInstalling 700 * 701 * @return {Object} Action object. 702 */ 703 704 function setIsInstalling(blockId, isInstalling) { 705 return { 706 type: 'SET_INSTALLING_BLOCK', 707 blockId, 708 isInstalling 709 }; 710 } 711 /** 712 * Sets an error notice to be displayed to the user for a given block. 713 * 714 * @param {string} blockId The ID of the block plugin. eg: my-block 715 * @param {string} message The message shown in the notice. 716 * @param {boolean} isFatal Whether the user can recover from the error. 717 * 718 * @return {Object} Action object. 719 */ 720 721 function setErrorNotice(blockId, message) { 722 let isFatal = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false; 723 return { 724 type: 'SET_ERROR_NOTICE', 725 blockId, 726 message, 727 isFatal 728 }; 729 } 730 /** 731 * Sets the error notice to empty for specific block. 732 * 733 * @param {string} blockId The ID of the block plugin. eg: my-block 734 * 735 * @return {Object} Action object. 736 */ 737 738 function clearErrorNotice(blockId) { 739 return { 740 type: 'CLEAR_ERROR_NOTICE', 741 blockId 742 }; 743 } 744 745 ;// CONCATENATED MODULE: ./node_modules/@wordpress/block-directory/build-module/store/resolvers.js 746 /** 747 * External dependencies 748 */ 749 750 /** 751 * WordPress dependencies 752 */ 753 754 755 /** 756 * Internal dependencies 757 */ 758 759 760 const resolvers_getDownloadableBlocks = filterValue => async _ref => { 761 let { 762 dispatch 763 } = _ref; 764 765 if (!filterValue) { 766 return; 767 } 768 769 try { 770 dispatch(fetchDownloadableBlocks(filterValue)); 771 const results = await external_wp_apiFetch_default()({ 772 path: `wp/v2/block-directory/search?term=$filterValue}` 773 }); 774 const blocks = results.map(result => (0,external_lodash_namespaceObject.mapKeys)(result, (value, key) => (0,external_lodash_namespaceObject.camelCase)(key))); 775 dispatch(receiveDownloadableBlocks(blocks, filterValue)); 776 } catch {} 777 }; 778 779 ;// CONCATENATED MODULE: ./node_modules/@wordpress/block-directory/build-module/store/index.js 780 /** 781 * WordPress dependencies 782 */ 783 784 /** 785 * Internal dependencies 786 */ 787 788 789 790 791 792 /** 793 * Module Constants 794 */ 795 796 const STORE_NAME = 'core/block-directory'; 797 /** 798 * Block editor data store configuration. 799 * 800 * @see https://github.com/WordPress/gutenberg/blob/HEAD/packages/data/README.md#registerStore 801 * 802 * @type {Object} 803 */ 804 805 const storeConfig = { 806 reducer: reducer, 807 selectors: selectors_namespaceObject, 808 actions: actions_namespaceObject, 809 resolvers: resolvers_namespaceObject 810 }; 811 /** 812 * Store definition for the block directory namespace. 813 * 814 * @see https://github.com/WordPress/gutenberg/blob/HEAD/packages/data/README.md#createReduxStore 815 * 816 * @type {Object} 817 */ 818 819 const store = (0,external_wp_data_namespaceObject.createReduxStore)(STORE_NAME, storeConfig); 820 (0,external_wp_data_namespaceObject.register)(store); 821 822 ;// CONCATENATED MODULE: ./node_modules/@wordpress/block-directory/build-module/components/auto-block-uninstaller/index.js 823 /** 824 * WordPress dependencies 825 */ 826 827 828 829 830 /** 831 * Internal dependencies 832 */ 833 834 835 function AutoBlockUninstaller() { 836 const { 837 uninstallBlockType 838 } = (0,external_wp_data_namespaceObject.useDispatch)(store); 839 const shouldRemoveBlockTypes = (0,external_wp_data_namespaceObject.useSelect)(select => { 840 const { 841 isAutosavingPost, 842 isSavingPost 843 } = select(external_wp_editor_namespaceObject.store); 844 return isSavingPost() && !isAutosavingPost(); 845 }, []); 846 const unusedBlockTypes = (0,external_wp_data_namespaceObject.useSelect)(select => select(store).getUnusedBlockTypes(), []); 847 (0,external_wp_element_namespaceObject.useEffect)(() => { 848 if (shouldRemoveBlockTypes && unusedBlockTypes.length) { 849 unusedBlockTypes.forEach(blockType => { 850 uninstallBlockType(blockType); 851 (0,external_wp_blocks_namespaceObject.unregisterBlockType)(blockType.name); 852 }); 853 } 854 }, [shouldRemoveBlockTypes]); 855 return null; 856 } 857 858 ;// CONCATENATED MODULE: external ["wp","components"] 859 var external_wp_components_namespaceObject = window["wp"]["components"]; 860 ;// CONCATENATED MODULE: external ["wp","compose"] 861 var external_wp_compose_namespaceObject = window["wp"]["compose"]; 862 ;// CONCATENATED MODULE: external ["wp","coreData"] 863 var external_wp_coreData_namespaceObject = window["wp"]["coreData"]; 864 ;// CONCATENATED MODULE: ./node_modules/@babel/runtime/helpers/esm/extends.js 865 function _extends() { 866 _extends = Object.assign || function (target) { 867 for (var i = 1; i < arguments.length; i++) { 868 var source = arguments[i]; 869 870 for (var key in source) { 871 if (Object.prototype.hasOwnProperty.call(source, key)) { 872 target[key] = source[key]; 873 } 874 } 875 } 876 877 return target; 878 }; 879 880 return _extends.apply(this, arguments); 881 } 882 ;// CONCATENATED MODULE: external ["wp","htmlEntities"] 883 var external_wp_htmlEntities_namespaceObject = window["wp"]["htmlEntities"]; 884 ;// CONCATENATED MODULE: ./node_modules/@wordpress/icons/build-module/icon/index.js 885 /** 886 * WordPress dependencies 887 */ 888 889 /** @typedef {{icon: JSX.Element, size?: number} & import('@wordpress/primitives').SVGProps} IconProps */ 890 891 /** 892 * Return an SVG icon. 893 * 894 * @param {IconProps} props icon is the SVG component to render 895 * size is a number specifiying the icon size in pixels 896 * Other props will be passed to wrapped SVG component 897 * 898 * @return {JSX.Element} Icon component 899 */ 900 901 function Icon(_ref) { 902 let { 903 icon, 904 size = 24, 905 ...props 906 } = _ref; 907 return (0,external_wp_element_namespaceObject.cloneElement)(icon, { 908 width: size, 909 height: size, 910 ...props 911 }); 912 } 913 914 /* harmony default export */ var icon = (Icon); 915 916 ;// CONCATENATED MODULE: external ["wp","primitives"] 917 var external_wp_primitives_namespaceObject = window["wp"]["primitives"]; 918 ;// CONCATENATED MODULE: ./node_modules/@wordpress/icons/build-module/library/star-filled.js 919 920 921 /** 922 * WordPress dependencies 923 */ 924 925 const starFilled = (0,external_wp_element_namespaceObject.createElement)(external_wp_primitives_namespaceObject.SVG, { 926 xmlns: "http://www.w3.org/2000/svg", 927 viewBox: "0 0 24 24" 928 }, (0,external_wp_element_namespaceObject.createElement)(external_wp_primitives_namespaceObject.Path, { 929 d: "M11.776 4.454a.25.25 0 01.448 0l2.069 4.192a.25.25 0 00.188.137l4.626.672a.25.25 0 01.139.426l-3.348 3.263a.25.25 0 00-.072.222l.79 4.607a.25.25 0 01-.362.263l-4.138-2.175a.25.25 0 00-.232 0l-4.138 2.175a.25.25 0 01-.363-.263l.79-4.607a.25.25 0 00-.071-.222L4.754 9.881a.25.25 0 01.139-.426l4.626-.672a.25.25 0 00.188-.137l2.069-4.192z" 930 })); 931 /* harmony default export */ var star_filled = (starFilled); 932 933 ;// CONCATENATED MODULE: ./node_modules/@wordpress/icons/build-module/library/star-half.js 934 935 936 /** 937 * WordPress dependencies 938 */ 939 940 const starHalf = (0,external_wp_element_namespaceObject.createElement)(external_wp_primitives_namespaceObject.SVG, { 941 xmlns: "http://www.w3.org/2000/svg", 942 viewBox: "0 0 24 24" 943 }, (0,external_wp_element_namespaceObject.createElement)(external_wp_primitives_namespaceObject.Path, { 944 d: "M9.518 8.783a.25.25 0 00.188-.137l2.069-4.192a.25.25 0 01.448 0l2.07 4.192a.25.25 0 00.187.137l4.626.672a.25.25 0 01.139.427l-3.347 3.262a.25.25 0 00-.072.222l.79 4.607a.25.25 0 01-.363.264l-4.137-2.176a.25.25 0 00-.233 0l-4.138 2.175a.25.25 0 01-.362-.263l.79-4.607a.25.25 0 00-.072-.222L4.753 9.882a.25.25 0 01.14-.427l4.625-.672zM12 14.533c.28 0 .559.067.814.2l1.895.997-.362-2.11a1.75 1.75 0 01.504-1.55l1.533-1.495-2.12-.308a1.75 1.75 0 01-1.317-.957L12 7.39v7.143z" 945 })); 946 /* harmony default export */ var star_half = (starHalf); 947 948 ;// CONCATENATED MODULE: ./node_modules/@wordpress/icons/build-module/library/star-empty.js 949 950 951 /** 952 * WordPress dependencies 953 */ 954 955 const starEmpty = (0,external_wp_element_namespaceObject.createElement)(external_wp_primitives_namespaceObject.SVG, { 956 xmlns: "http://www.w3.org/2000/svg", 957 viewBox: "0 0 24 24" 958 }, (0,external_wp_element_namespaceObject.createElement)(external_wp_primitives_namespaceObject.Path, { 959 fillRule: "evenodd", 960 d: "M9.706 8.646a.25.25 0 01-.188.137l-4.626.672a.25.25 0 00-.139.427l3.348 3.262a.25.25 0 01.072.222l-.79 4.607a.25.25 0 00.362.264l4.138-2.176a.25.25 0 01.233 0l4.137 2.175a.25.25 0 00.363-.263l-.79-4.607a.25.25 0 01.072-.222l3.347-3.262a.25.25 0 00-.139-.427l-4.626-.672a.25.25 0 01-.188-.137l-2.069-4.192a.25.25 0 00-.448 0L9.706 8.646zM12 7.39l-.948 1.921a1.75 1.75 0 01-1.317.957l-2.12.308 1.534 1.495c.412.402.6.982.503 1.55l-.362 2.11 1.896-.997a1.75 1.75 0 011.629 0l1.895.997-.362-2.11a1.75 1.75 0 01.504-1.55l1.533-1.495-2.12-.308a1.75 1.75 0 01-1.317-.957L12 7.39z", 961 clipRule: "evenodd" 962 })); 963 /* harmony default export */ var star_empty = (starEmpty); 964 965 ;// CONCATENATED MODULE: ./node_modules/@wordpress/block-directory/build-module/components/block-ratings/stars.js 966 967 968 /** 969 * External dependencies 970 */ 971 972 /** 973 * WordPress dependencies 974 */ 975 976 977 978 979 function Stars(_ref) { 980 let { 981 rating 982 } = _ref; 983 const stars = Math.round(rating / 0.5) * 0.5; 984 const fullStarCount = Math.floor(rating); 985 const halfStarCount = Math.ceil(rating - fullStarCount); 986 const emptyStarCount = 5 - (fullStarCount + halfStarCount); 987 return (0,external_wp_element_namespaceObject.createElement)("span", { 988 "aria-label": (0,external_wp_i18n_namespaceObject.sprintf)( 989 /* translators: %s: number of stars. */ 990 (0,external_wp_i18n_namespaceObject.__)('%s out of 5 stars'), stars) 991 }, (0,external_lodash_namespaceObject.times)(fullStarCount, i => (0,external_wp_element_namespaceObject.createElement)(icon, { 992 key: `full_stars_$i}`, 993 className: "block-directory-block-ratings__star-full", 994 icon: star_filled, 995 size: 16 996 })), (0,external_lodash_namespaceObject.times)(halfStarCount, i => (0,external_wp_element_namespaceObject.createElement)(icon, { 997 key: `half_stars_$i}`, 998 className: "block-directory-block-ratings__star-half-full", 999 icon: star_half, 1000 size: 16 1001 })), (0,external_lodash_namespaceObject.times)(emptyStarCount, i => (0,external_wp_element_namespaceObject.createElement)(icon, { 1002 key: `empty_stars_$i}`, 1003 className: "block-directory-block-ratings__star-empty", 1004 icon: star_empty, 1005 size: 16 1006 }))); 1007 } 1008 1009 /* harmony default export */ var stars = (Stars); 1010 1011 ;// CONCATENATED MODULE: ./node_modules/@wordpress/block-directory/build-module/components/block-ratings/index.js 1012 1013 1014 /** 1015 * Internal dependencies 1016 */ 1017 1018 const BlockRatings = _ref => { 1019 let { 1020 rating 1021 } = _ref; 1022 return (0,external_wp_element_namespaceObject.createElement)("span", { 1023 className: "block-directory-block-ratings" 1024 }, (0,external_wp_element_namespaceObject.createElement)(stars, { 1025 rating: rating 1026 })); 1027 }; 1028 /* harmony default export */ var block_ratings = (BlockRatings); 1029 1030 ;// CONCATENATED MODULE: ./node_modules/@wordpress/block-directory/build-module/components/downloadable-block-icon/index.js 1031 1032 1033 /** 1034 * WordPress dependencies 1035 */ 1036 1037 1038 function DownloadableBlockIcon(_ref) { 1039 let { 1040 icon 1041 } = _ref; 1042 const className = 'block-directory-downloadable-block-icon'; 1043 return icon.match(/\.(jpeg|jpg|gif|png|svg)(?:\?.*)?$/) !== null ? (0,external_wp_element_namespaceObject.createElement)("img", { 1044 className: className, 1045 src: icon, 1046 alt: "" 1047 }) : (0,external_wp_element_namespaceObject.createElement)(external_wp_blockEditor_namespaceObject.BlockIcon, { 1048 className: className, 1049 icon: icon, 1050 showColors: true 1051 }); 1052 } 1053 1054 /* harmony default export */ var downloadable_block_icon = (DownloadableBlockIcon); 1055 1056 ;// CONCATENATED MODULE: ./node_modules/@wordpress/block-directory/build-module/components/downloadable-block-notice/index.js 1057 1058 1059 /** 1060 * WordPress dependencies 1061 */ 1062 1063 1064 /** 1065 * Internal dependencies 1066 */ 1067 1068 1069 const DownloadableBlockNotice = _ref => { 1070 let { 1071 block 1072 } = _ref; 1073 const errorNotice = (0,external_wp_data_namespaceObject.useSelect)(select => select(store).getErrorNoticeForBlock(block.id), [block]); 1074 1075 if (!errorNotice) { 1076 return null; 1077 } 1078 1079 return (0,external_wp_element_namespaceObject.createElement)("div", { 1080 className: "block-directory-downloadable-block-notice" 1081 }, (0,external_wp_element_namespaceObject.createElement)("div", { 1082 className: "block-directory-downloadable-block-notice__content" 1083 }, errorNotice.message, errorNotice.isFatal ? ' ' + (0,external_wp_i18n_namespaceObject.__)('Try reloading the page.') : null)); 1084 }; 1085 /* harmony default export */ var downloadable_block_notice = (DownloadableBlockNotice); 1086 1087 ;// CONCATENATED MODULE: ./node_modules/@wordpress/block-directory/build-module/components/downloadable-block-list-item/index.js 1088 1089 1090 1091 /** 1092 * WordPress dependencies 1093 */ 1094 1095 1096 1097 1098 1099 1100 /** 1101 * Internal dependencies 1102 */ 1103 1104 1105 1106 1107 // Return the appropriate block item label, given the block data and status. 1108 1109 function getDownloadableBlockLabel(_ref, _ref2) { 1110 let { 1111 title, 1112 rating, 1113 ratingCount 1114 } = _ref; 1115 let { 1116 hasNotice, 1117 isInstalled, 1118 isInstalling 1119 } = _ref2; 1120 const stars = Math.round(rating / 0.5) * 0.5; 1121 1122 if (!isInstalled && hasNotice) { 1123 /* translators: %1$s: block title */ 1124 return (0,external_wp_i18n_namespaceObject.sprintf)('Retry installing %s.', (0,external_wp_htmlEntities_namespaceObject.decodeEntities)(title)); 1125 } 1126 1127 if (isInstalled) { 1128 /* translators: %1$s: block title */ 1129 return (0,external_wp_i18n_namespaceObject.sprintf)('Add %s.', (0,external_wp_htmlEntities_namespaceObject.decodeEntities)(title)); 1130 } 1131 1132 if (isInstalling) { 1133 /* translators: %1$s: block title */ 1134 return (0,external_wp_i18n_namespaceObject.sprintf)('Installing %s.', (0,external_wp_htmlEntities_namespaceObject.decodeEntities)(title)); 1135 } // No ratings yet, just use the title. 1136 1137 1138 if (ratingCount < 1) { 1139 /* translators: %1$s: block title */ 1140 return (0,external_wp_i18n_namespaceObject.sprintf)('Install %s.', (0,external_wp_htmlEntities_namespaceObject.decodeEntities)(title)); 1141 } 1142 1143 return (0,external_wp_i18n_namespaceObject.sprintf)( 1144 /* translators: %1$s: block title, %2$s: average rating, %3$s: total ratings count. */ 1145 (0,external_wp_i18n_namespaceObject._n)('Install %1$s. %2$s stars with %3$s review.', 'Install %1$s. %2$s stars with %3$s reviews.', ratingCount), (0,external_wp_htmlEntities_namespaceObject.decodeEntities)(title), stars, ratingCount); 1146 } 1147 1148 function DownloadableBlockListItem(_ref3) { 1149 let { 1150 composite, 1151 item, 1152 onClick 1153 } = _ref3; 1154 const { 1155 author, 1156 description, 1157 icon, 1158 rating, 1159 title 1160 } = item; // getBlockType returns a block object if this block exists, or null if not. 1161 1162 const isInstalled = !!(0,external_wp_blocks_namespaceObject.getBlockType)(item.name); 1163 const { 1164 hasNotice, 1165 isInstalling, 1166 isInstallable 1167 } = (0,external_wp_data_namespaceObject.useSelect)(select => { 1168 const { 1169 getErrorNoticeForBlock, 1170 isInstalling: isBlockInstalling 1171 } = select(store); 1172 const notice = getErrorNoticeForBlock(item.id); 1173 const hasFatal = notice && notice.isFatal; 1174 return { 1175 hasNotice: !!notice, 1176 isInstalling: isBlockInstalling(item.id), 1177 isInstallable: !hasFatal 1178 }; 1179 }, [item]); 1180 let statusText = ''; 1181 1182 if (isInstalled) { 1183 statusText = (0,external_wp_i18n_namespaceObject.__)('Installed!'); 1184 } else if (isInstalling) { 1185 statusText = (0,external_wp_i18n_namespaceObject.__)('Installing…'); 1186 } 1187 1188 return (0,external_wp_element_namespaceObject.createElement)(external_wp_components_namespaceObject.__unstableCompositeItem, _extends({ 1189 __experimentalIsFocusable: true, 1190 role: "option", 1191 as: external_wp_components_namespaceObject.Button 1192 }, composite, { 1193 className: "block-directory-downloadable-block-list-item", 1194 onClick: event => { 1195 event.preventDefault(); 1196 onClick(); 1197 }, 1198 isBusy: isInstalling, 1199 disabled: isInstalling || !isInstallable, 1200 label: getDownloadableBlockLabel(item, { 1201 hasNotice, 1202 isInstalled, 1203 isInstalling 1204 }), 1205 showTooltip: true, 1206 tooltipPosition: "top center" 1207 }), (0,external_wp_element_namespaceObject.createElement)("div", { 1208 className: "block-directory-downloadable-block-list-item__icon" 1209 }, (0,external_wp_element_namespaceObject.createElement)(downloadable_block_icon, { 1210 icon: icon, 1211 title: title 1212 }), isInstalling ? (0,external_wp_element_namespaceObject.createElement)("span", { 1213 className: "block-directory-downloadable-block-list-item__spinner" 1214 }, (0,external_wp_element_namespaceObject.createElement)(external_wp_components_namespaceObject.Spinner, null)) : (0,external_wp_element_namespaceObject.createElement)(block_ratings, { 1215 rating: rating 1216 })), (0,external_wp_element_namespaceObject.createElement)("span", { 1217 className: "block-directory-downloadable-block-list-item__details" 1218 }, (0,external_wp_element_namespaceObject.createElement)("span", { 1219 className: "block-directory-downloadable-block-list-item__title" 1220 }, (0,external_wp_element_namespaceObject.createInterpolateElement)((0,external_wp_i18n_namespaceObject.sprintf)( 1221 /* translators: %1$s: block title, %2$s: author name. */ 1222 (0,external_wp_i18n_namespaceObject.__)('%1$s <span>by %2$s</span>'), (0,external_wp_htmlEntities_namespaceObject.decodeEntities)(title), author), { 1223 span: (0,external_wp_element_namespaceObject.createElement)("span", { 1224 className: "block-directory-downloadable-block-list-item__author" 1225 }) 1226 })), hasNotice ? (0,external_wp_element_namespaceObject.createElement)(downloadable_block_notice, { 1227 block: item 1228 }) : (0,external_wp_element_namespaceObject.createElement)(external_wp_element_namespaceObject.Fragment, null, (0,external_wp_element_namespaceObject.createElement)("span", { 1229 className: "block-directory-downloadable-block-list-item__desc" 1230 }, !!statusText ? statusText : (0,external_wp_htmlEntities_namespaceObject.decodeEntities)(description)), isInstallable && !(isInstalled || isInstalling) && (0,external_wp_element_namespaceObject.createElement)(external_wp_components_namespaceObject.VisuallyHidden, null, (0,external_wp_i18n_namespaceObject.__)('Install block'))))); 1231 } 1232 1233 /* harmony default export */ var downloadable_block_list_item = (DownloadableBlockListItem); 1234 1235 ;// CONCATENATED MODULE: ./node_modules/@wordpress/block-directory/build-module/components/downloadable-blocks-list/index.js 1236 1237 1238 1239 /** 1240 * External dependencies 1241 */ 1242 1243 /** 1244 * WordPress dependencies 1245 */ 1246 1247 1248 1249 1250 1251 /** 1252 * Internal dependencies 1253 */ 1254 1255 1256 1257 1258 function DownloadableBlocksList(_ref) { 1259 let { 1260 items, 1261 onHover = external_lodash_namespaceObject.noop, 1262 onSelect 1263 } = _ref; 1264 const composite = (0,external_wp_components_namespaceObject.__unstableUseCompositeState)(); 1265 const { 1266 installBlockType 1267 } = (0,external_wp_data_namespaceObject.useDispatch)(store); 1268 1269 if (!items.length) { 1270 return null; 1271 } 1272 1273 return (0,external_wp_element_namespaceObject.createElement)(external_wp_components_namespaceObject.__unstableComposite, _extends({}, composite, { 1274 role: "listbox", 1275 className: "block-directory-downloadable-blocks-list", 1276 "aria-label": (0,external_wp_i18n_namespaceObject.__)('Blocks available for install') 1277 }), items.map(item => { 1278 return (0,external_wp_element_namespaceObject.createElement)(downloadable_block_list_item, { 1279 key: item.id, 1280 composite: composite, 1281 onClick: () => { 1282 // Check if the block is registered (`getBlockType` 1283 // will return an object). If so, insert the block. 1284 // This prevents installing existing plugins. 1285 if ((0,external_wp_blocks_namespaceObject.getBlockType)(item.name)) { 1286 onSelect(item); 1287 } else { 1288 installBlockType(item).then(success => { 1289 if (success) { 1290 onSelect(item); 1291 } 1292 }); 1293 } 1294 1295 onHover(null); 1296 }, 1297 onHover: onHover, 1298 item: item 1299 }); 1300 })); 1301 } 1302 1303 /* harmony default export */ var downloadable_blocks_list = (DownloadableBlocksList); 1304 1305 ;// CONCATENATED MODULE: external ["wp","a11y"] 1306 var external_wp_a11y_namespaceObject = window["wp"]["a11y"]; 1307 ;// CONCATENATED MODULE: ./node_modules/@wordpress/block-directory/build-module/components/downloadable-blocks-panel/inserter-panel.js 1308 1309 1310 /** 1311 * WordPress dependencies 1312 */ 1313 1314 1315 1316 1317 function DownloadableBlocksInserterPanel(_ref) { 1318 let { 1319 children, 1320 downloadableItems, 1321 hasLocalBlocks 1322 } = _ref; 1323 const count = downloadableItems.length; 1324 (0,external_wp_element_namespaceObject.useEffect)(() => { 1325 (0,external_wp_a11y_namespaceObject.speak)((0,external_wp_i18n_namespaceObject.sprintf)( 1326 /* translators: %d: number of available blocks. */ 1327 (0,external_wp_i18n_namespaceObject._n)('%d additional block is available to install.', '%d additional blocks are available to install.', count), count)); 1328 }, [count]); 1329 return (0,external_wp_element_namespaceObject.createElement)(external_wp_element_namespaceObject.Fragment, null, !hasLocalBlocks && (0,external_wp_element_namespaceObject.createElement)("p", { 1330 className: "block-directory-downloadable-blocks-panel__no-local" 1331 }, (0,external_wp_i18n_namespaceObject.__)('No results available from your installed blocks.')), (0,external_wp_element_namespaceObject.createElement)("div", { 1332 className: "block-editor-inserter__quick-inserter-separator" 1333 }), (0,external_wp_element_namespaceObject.createElement)("div", { 1334 className: "block-directory-downloadable-blocks-panel" 1335 }, (0,external_wp_element_namespaceObject.createElement)("div", { 1336 className: "block-directory-downloadable-blocks-panel__header" 1337 }, (0,external_wp_element_namespaceObject.createElement)("h2", { 1338 className: "block-directory-downloadable-blocks-panel__title" 1339 }, (0,external_wp_i18n_namespaceObject.__)('Available to install')), (0,external_wp_element_namespaceObject.createElement)("p", { 1340 className: "block-directory-downloadable-blocks-panel__description" 1341 }, (0,external_wp_i18n_namespaceObject.__)('Select a block to install and add it to your post.'))), children)); 1342 } 1343 1344 /* harmony default export */ var inserter_panel = (DownloadableBlocksInserterPanel); 1345 1346 ;// CONCATENATED MODULE: ./node_modules/@wordpress/icons/build-module/library/block-default.js 1347 1348 1349 /** 1350 * WordPress dependencies 1351 */ 1352 1353 const blockDefault = (0,external_wp_element_namespaceObject.createElement)(external_wp_primitives_namespaceObject.SVG, { 1354 xmlns: "http://www.w3.org/2000/svg", 1355 viewBox: "0 0 24 24" 1356 }, (0,external_wp_element_namespaceObject.createElement)(external_wp_primitives_namespaceObject.Path, { 1357 d: "M19 8h-1V6h-5v2h-2V6H6v2H5c-1.1 0-2 .9-2 2v8c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2v-8c0-1.1-.9-2-2-2zm.5 10c0 .3-.2.5-.5.5H5c-.3 0-.5-.2-.5-.5v-8c0-.3.2-.5.5-.5h14c.3 0 .5.2.5.5v8z" 1358 })); 1359 /* harmony default export */ var block_default = (blockDefault); 1360 1361 ;// CONCATENATED MODULE: ./node_modules/@wordpress/block-directory/build-module/components/downloadable-blocks-panel/no-results.js 1362 1363 1364 /** 1365 * WordPress dependencies 1366 */ 1367 1368 1369 1370 function DownloadableBlocksNoResults() { 1371 return (0,external_wp_element_namespaceObject.createElement)("div", { 1372 className: "block-editor-inserter__no-results" 1373 }, (0,external_wp_element_namespaceObject.createElement)(icon, { 1374 className: "block-editor-inserter__no-results-icon", 1375 icon: block_default 1376 }), (0,external_wp_element_namespaceObject.createElement)("p", null, (0,external_wp_i18n_namespaceObject.__)('No results found.'))); 1377 } 1378 1379 /* harmony default export */ var no_results = (DownloadableBlocksNoResults); 1380 1381 ;// CONCATENATED MODULE: ./node_modules/@wordpress/block-directory/build-module/components/downloadable-blocks-panel/index.js 1382 1383 1384 /** 1385 * WordPress dependencies 1386 */ 1387 1388 1389 1390 1391 1392 1393 /** 1394 * Internal dependencies 1395 */ 1396 1397 1398 1399 1400 1401 1402 function DownloadableBlocksPanel(_ref) { 1403 let { 1404 downloadableItems, 1405 onSelect, 1406 onHover, 1407 hasLocalBlocks, 1408 hasPermission, 1409 isLoading, 1410 isTyping 1411 } = _ref; 1412 1413 if (typeof hasPermission === 'undefined' || isLoading || isTyping) { 1414 return (0,external_wp_element_namespaceObject.createElement)(external_wp_element_namespaceObject.Fragment, null, hasPermission && !hasLocalBlocks && (0,external_wp_element_namespaceObject.createElement)(external_wp_element_namespaceObject.Fragment, null, (0,external_wp_element_namespaceObject.createElement)("p", { 1415 className: "block-directory-downloadable-blocks-panel__no-local" 1416 }, (0,external_wp_i18n_namespaceObject.__)('No results available from your installed blocks.')), (0,external_wp_element_namespaceObject.createElement)("div", { 1417 className: "block-editor-inserter__quick-inserter-separator" 1418 })), (0,external_wp_element_namespaceObject.createElement)("div", { 1419 className: "block-directory-downloadable-blocks-panel has-blocks-loading" 1420 }, (0,external_wp_element_namespaceObject.createElement)(external_wp_components_namespaceObject.Spinner, null))); 1421 } 1422 1423 if (false === hasPermission) { 1424 if (!hasLocalBlocks) { 1425 return (0,external_wp_element_namespaceObject.createElement)(no_results, null); 1426 } 1427 1428 return null; 1429 } 1430 1431 return !!downloadableItems.length ? (0,external_wp_element_namespaceObject.createElement)(inserter_panel, { 1432 downloadableItems: downloadableItems, 1433 hasLocalBlocks: hasLocalBlocks 1434 }, (0,external_wp_element_namespaceObject.createElement)(downloadable_blocks_list, { 1435 items: downloadableItems, 1436 onSelect: onSelect, 1437 onHover: onHover 1438 })) : !hasLocalBlocks && (0,external_wp_element_namespaceObject.createElement)(no_results, null); 1439 } 1440 1441 /* harmony default export */ var downloadable_blocks_panel = ((0,external_wp_compose_namespaceObject.compose)([(0,external_wp_data_namespaceObject.withSelect)((select, _ref2) => { 1442 let { 1443 filterValue, 1444 rootClientId = null 1445 } = _ref2; 1446 const { 1447 getDownloadableBlocks, 1448 isRequestingDownloadableBlocks 1449 } = select(store); 1450 const { 1451 canInsertBlockType 1452 } = select(external_wp_blockEditor_namespaceObject.store); 1453 const hasPermission = select(external_wp_coreData_namespaceObject.store).canUser('read', 'block-directory/search'); 1454 1455 function getInstallableBlocks(term) { 1456 return getDownloadableBlocks(term).filter(block => canInsertBlockType(block, rootClientId, true)); 1457 } 1458 1459 const downloadableItems = hasPermission ? getInstallableBlocks(filterValue) : []; 1460 const isLoading = isRequestingDownloadableBlocks(filterValue); 1461 return { 1462 downloadableItems, 1463 hasPermission, 1464 isLoading 1465 }; 1466 })])(DownloadableBlocksPanel)); 1467 1468 ;// CONCATENATED MODULE: ./node_modules/@wordpress/block-directory/build-module/plugins/inserter-menu-downloadable-blocks-panel/index.js 1469 1470 1471 /** 1472 * External dependencies 1473 */ 1474 1475 /** 1476 * WordPress dependencies 1477 */ 1478 1479 1480 1481 /** 1482 * Internal dependencies 1483 */ 1484 1485 1486 1487 function InserterMenuDownloadableBlocksPanel() { 1488 const [debouncedFilterValue, setFilterValue] = (0,external_wp_element_namespaceObject.useState)(''); 1489 const debouncedSetFilterValue = (0,external_lodash_namespaceObject.debounce)(setFilterValue, 400); 1490 return (0,external_wp_element_namespaceObject.createElement)(external_wp_blockEditor_namespaceObject.__unstableInserterMenuExtension, null, _ref => { 1491 let { 1492 onSelect, 1493 onHover, 1494 filterValue, 1495 hasItems, 1496 rootClientId 1497 } = _ref; 1498 1499 if (debouncedFilterValue !== filterValue) { 1500 debouncedSetFilterValue(filterValue); 1501 } 1502 1503 if (!debouncedFilterValue) { 1504 return null; 1505 } 1506 1507 return (0,external_wp_element_namespaceObject.createElement)(downloadable_blocks_panel, { 1508 onSelect: onSelect, 1509 onHover: onHover, 1510 rootClientId: rootClientId, 1511 filterValue: debouncedFilterValue, 1512 hasLocalBlocks: hasItems, 1513 isTyping: filterValue !== debouncedFilterValue 1514 }); 1515 }); 1516 } 1517 1518 /* harmony default export */ var inserter_menu_downloadable_blocks_panel = (InserterMenuDownloadableBlocksPanel); 1519 1520 ;// CONCATENATED MODULE: external ["wp","editPost"] 1521 var external_wp_editPost_namespaceObject = window["wp"]["editPost"]; 1522 ;// CONCATENATED MODULE: ./node_modules/@wordpress/block-directory/build-module/components/compact-list/index.js 1523 1524 1525 /** 1526 * WordPress dependencies 1527 */ 1528 1529 /** 1530 * Internal dependencies 1531 */ 1532 1533 1534 function CompactList(_ref) { 1535 let { 1536 items 1537 } = _ref; 1538 1539 if (!items.length) { 1540 return null; 1541 } 1542 1543 return (0,external_wp_element_namespaceObject.createElement)("ul", { 1544 className: "block-directory-compact-list" 1545 }, items.map(_ref2 => { 1546 let { 1547 icon, 1548 id, 1549 title, 1550 author 1551 } = _ref2; 1552 return (0,external_wp_element_namespaceObject.createElement)("li", { 1553 key: id, 1554 className: "block-directory-compact-list__item" 1555 }, (0,external_wp_element_namespaceObject.createElement)(downloadable_block_icon, { 1556 icon: icon, 1557 title: title 1558 }), (0,external_wp_element_namespaceObject.createElement)("div", { 1559 className: "block-directory-compact-list__item-details" 1560 }, (0,external_wp_element_namespaceObject.createElement)("div", { 1561 className: "block-directory-compact-list__item-title" 1562 }, title), (0,external_wp_element_namespaceObject.createElement)("div", { 1563 className: "block-directory-compact-list__item-author" 1564 }, (0,external_wp_i18n_namespaceObject.sprintf)( 1565 /* translators: %s: Name of the block author. */ 1566 (0,external_wp_i18n_namespaceObject.__)('By %s'), author)))); 1567 })); 1568 } 1569 1570 ;// CONCATENATED MODULE: ./node_modules/@wordpress/block-directory/build-module/plugins/installed-blocks-pre-publish-panel/index.js 1571 1572 1573 /** 1574 * WordPress dependencies 1575 */ 1576 1577 1578 1579 1580 /** 1581 * Internal dependencies 1582 */ 1583 1584 1585 1586 function InstalledBlocksPrePublishPanel() { 1587 const newBlockTypes = (0,external_wp_data_namespaceObject.useSelect)(select => select(store).getNewBlockTypes(), []); 1588 1589 if (!newBlockTypes.length) { 1590 return null; 1591 } 1592 1593 return (0,external_wp_element_namespaceObject.createElement)(external_wp_editPost_namespaceObject.PluginPrePublishPanel, { 1594 icon: block_default, 1595 title: (0,external_wp_i18n_namespaceObject.sprintf)( // translators: %d: number of blocks (number). 1596 (0,external_wp_i18n_namespaceObject._n)('Added: %d block', 'Added: %d blocks', newBlockTypes.length), newBlockTypes.length), 1597 initialOpen: true 1598 }, (0,external_wp_element_namespaceObject.createElement)("p", { 1599 className: "installed-blocks-pre-publish-panel__copy" 1600 }, (0,external_wp_i18n_namespaceObject._n)('The following block has been added to your site.', 'The following blocks have been added to your site.', newBlockTypes.length)), (0,external_wp_element_namespaceObject.createElement)(CompactList, { 1601 items: newBlockTypes 1602 })); 1603 } 1604 1605 ;// CONCATENATED MODULE: ./node_modules/@wordpress/block-directory/build-module/plugins/get-install-missing/install-button.js 1606 1607 1608 /** 1609 * WordPress dependencies 1610 */ 1611 1612 1613 1614 1615 1616 /** 1617 * Internal dependencies 1618 */ 1619 1620 1621 function InstallButton(_ref) { 1622 let { 1623 attributes, 1624 block, 1625 clientId 1626 } = _ref; 1627 const isInstallingBlock = (0,external_wp_data_namespaceObject.useSelect)(select => select(store).isInstalling(block.id), [block.id]); 1628 const { 1629 installBlockType 1630 } = (0,external_wp_data_namespaceObject.useDispatch)(store); 1631 const { 1632 replaceBlock 1633 } = (0,external_wp_data_namespaceObject.useDispatch)(external_wp_blockEditor_namespaceObject.store); 1634 return (0,external_wp_element_namespaceObject.createElement)(external_wp_components_namespaceObject.Button, { 1635 onClick: () => installBlockType(block).then(success => { 1636 if (success) { 1637 const blockType = (0,external_wp_blocks_namespaceObject.getBlockType)(block.name); 1638 const [originalBlock] = (0,external_wp_blocks_namespaceObject.parse)(attributes.originalContent); 1639 1640 if (originalBlock && blockType) { 1641 replaceBlock(clientId, (0,external_wp_blocks_namespaceObject.createBlock)(blockType.name, originalBlock.attributes, originalBlock.innerBlocks)); 1642 } 1643 } 1644 }), 1645 disabled: isInstallingBlock, 1646 isBusy: isInstallingBlock, 1647 variant: "primary" 1648 }, (0,external_wp_i18n_namespaceObject.sprintf)( 1649 /* translators: %s: block name */ 1650 (0,external_wp_i18n_namespaceObject.__)('Install %s'), block.title)); 1651 } 1652 1653 ;// CONCATENATED MODULE: ./node_modules/@wordpress/block-directory/build-module/plugins/get-install-missing/index.js 1654 1655 1656 1657 /** 1658 * WordPress dependencies 1659 */ 1660 1661 1662 1663 1664 1665 1666 1667 /** 1668 * Internal dependencies 1669 */ 1670 1671 1672 1673 1674 const getInstallMissing = OriginalComponent => props => { 1675 const { 1676 originalName 1677 } = props.attributes; // Disable reason: This is a valid component, but it's mistaken for a callback. 1678 // eslint-disable-next-line react-hooks/rules-of-hooks 1679 1680 const { 1681 block, 1682 hasPermission 1683 } = (0,external_wp_data_namespaceObject.useSelect)(select => { 1684 const { 1685 getDownloadableBlocks 1686 } = select(store); 1687 const blocks = getDownloadableBlocks('block:' + originalName).filter(_ref => { 1688 let { 1689 name 1690 } = _ref; 1691 return originalName === name; 1692 }); 1693 return { 1694 hasPermission: select(external_wp_coreData_namespaceObject.store).canUser('read', 'block-directory/search'), 1695 block: blocks.length && blocks[0] 1696 }; 1697 }, [originalName]); // The user can't install blocks, or the block isn't available for download. 1698 1699 if (!hasPermission || !block) { 1700 return (0,external_wp_element_namespaceObject.createElement)(OriginalComponent, props); 1701 } 1702 1703 return (0,external_wp_element_namespaceObject.createElement)(ModifiedWarning, _extends({}, props, { 1704 originalBlock: block 1705 })); 1706 }; 1707 1708 const ModifiedWarning = _ref2 => { 1709 let { 1710 originalBlock, 1711 ...props 1712 } = _ref2; 1713 const { 1714 originalName, 1715 originalUndelimitedContent 1716 } = props.attributes; 1717 const { 1718 replaceBlock 1719 } = (0,external_wp_data_namespaceObject.useDispatch)(external_wp_blockEditor_namespaceObject.store); 1720 1721 const convertToHTML = () => { 1722 replaceBlock(props.clientId, (0,external_wp_blocks_namespaceObject.createBlock)('core/html', { 1723 content: originalUndelimitedContent 1724 })); 1725 }; 1726 1727 const hasContent = !!originalUndelimitedContent; 1728 const hasHTMLBlock = (0,external_wp_blocks_namespaceObject.getBlockType)('core/html'); 1729 let messageHTML = (0,external_wp_i18n_namespaceObject.sprintf)( 1730 /* translators: %s: block name */ 1731 (0,external_wp_i18n_namespaceObject.__)('Your site doesn’t include support for the %s block. You can try installing the block or remove it entirely.'), originalBlock.title || originalName); 1732 const actions = [(0,external_wp_element_namespaceObject.createElement)(InstallButton, { 1733 key: "install", 1734 block: originalBlock, 1735 attributes: props.attributes, 1736 clientId: props.clientId 1737 })]; 1738 1739 if (hasContent && hasHTMLBlock) { 1740 messageHTML = (0,external_wp_i18n_namespaceObject.sprintf)( 1741 /* translators: %s: block name */ 1742 (0,external_wp_i18n_namespaceObject.__)('Your site doesn’t include support for the %s block. You can try installing the block, convert it to a Custom HTML block, or remove it entirely.'), originalBlock.title || originalName); 1743 actions.push((0,external_wp_element_namespaceObject.createElement)(external_wp_components_namespaceObject.Button, { 1744 key: "convert", 1745 onClick: convertToHTML, 1746 variant: "link" 1747 }, (0,external_wp_i18n_namespaceObject.__)('Keep as HTML'))); 1748 } 1749 1750 return (0,external_wp_element_namespaceObject.createElement)("div", (0,external_wp_blockEditor_namespaceObject.useBlockProps)(), (0,external_wp_element_namespaceObject.createElement)(external_wp_blockEditor_namespaceObject.Warning, { 1751 actions: actions 1752 }, messageHTML), (0,external_wp_element_namespaceObject.createElement)(external_wp_element_namespaceObject.RawHTML, null, originalUndelimitedContent)); 1753 }; 1754 1755 /* harmony default export */ var get_install_missing = (getInstallMissing); 1756 1757 ;// CONCATENATED MODULE: ./node_modules/@wordpress/block-directory/build-module/plugins/index.js 1758 1759 1760 /** 1761 * WordPress dependencies 1762 */ 1763 1764 1765 /** 1766 * Internal dependencies 1767 */ 1768 1769 1770 1771 1772 1773 (0,external_wp_plugins_namespaceObject.registerPlugin)('block-directory', { 1774 render() { 1775 return (0,external_wp_element_namespaceObject.createElement)(external_wp_element_namespaceObject.Fragment, null, (0,external_wp_element_namespaceObject.createElement)(AutoBlockUninstaller, null), (0,external_wp_element_namespaceObject.createElement)(inserter_menu_downloadable_blocks_panel, null), (0,external_wp_element_namespaceObject.createElement)(InstalledBlocksPrePublishPanel, null)); 1776 } 1777 1778 }); 1779 (0,external_wp_hooks_namespaceObject.addFilter)('blocks.registerBlockType', 'block-directory/fallback', (settings, name) => { 1780 if (name !== 'core/missing') { 1781 return settings; 1782 } 1783 1784 settings.edit = get_install_missing(settings.edit); 1785 return settings; 1786 }); 1787 1788 ;// CONCATENATED MODULE: ./node_modules/@wordpress/block-directory/build-module/index.js 1789 /** 1790 * Internal dependencies 1791 */ 1792 1793 1794 1795 (window.wp = window.wp || {}).blockDirectory = __webpack_exports__; 1796 /******/ })() 1797 ;
title
Description
Body
title
Description
Body
title
Description
Body
title
Body
Generated: Sun Oct 13 01:00:02 2024 | Cross-referenced by PHPXref 0.7.1 |