plugins.js (21129B)
1 this["wp"] = this["wp"] || {}; this["wp"]["plugins"] = 2 /******/ (function(modules) { // webpackBootstrap 3 /******/ // The module cache 4 /******/ var installedModules = {}; 5 /******/ 6 /******/ // The require function 7 /******/ function __webpack_require__(moduleId) { 8 /******/ 9 /******/ // Check if module is in cache 10 /******/ if(installedModules[moduleId]) { 11 /******/ return installedModules[moduleId].exports; 12 /******/ } 13 /******/ // Create a new module (and put it into the cache) 14 /******/ var module = installedModules[moduleId] = { 15 /******/ i: moduleId, 16 /******/ l: false, 17 /******/ exports: {} 18 /******/ }; 19 /******/ 20 /******/ // Execute the module function 21 /******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__); 22 /******/ 23 /******/ // Flag the module as loaded 24 /******/ module.l = true; 25 /******/ 26 /******/ // Return the exports of the module 27 /******/ return module.exports; 28 /******/ } 29 /******/ 30 /******/ 31 /******/ // expose the modules object (__webpack_modules__) 32 /******/ __webpack_require__.m = modules; 33 /******/ 34 /******/ // expose the module cache 35 /******/ __webpack_require__.c = installedModules; 36 /******/ 37 /******/ // define getter function for harmony exports 38 /******/ __webpack_require__.d = function(exports, name, getter) { 39 /******/ if(!__webpack_require__.o(exports, name)) { 40 /******/ Object.defineProperty(exports, name, { enumerable: true, get: getter }); 41 /******/ } 42 /******/ }; 43 /******/ 44 /******/ // define __esModule on exports 45 /******/ __webpack_require__.r = function(exports) { 46 /******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) { 47 /******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' }); 48 /******/ } 49 /******/ Object.defineProperty(exports, '__esModule', { value: true }); 50 /******/ }; 51 /******/ 52 /******/ // create a fake namespace object 53 /******/ // mode & 1: value is a module id, require it 54 /******/ // mode & 2: merge all properties of value into the ns 55 /******/ // mode & 4: return value when already ns object 56 /******/ // mode & 8|1: behave like require 57 /******/ __webpack_require__.t = function(value, mode) { 58 /******/ if(mode & 1) value = __webpack_require__(value); 59 /******/ if(mode & 8) return value; 60 /******/ if((mode & 4) && typeof value === 'object' && value && value.__esModule) return value; 61 /******/ var ns = Object.create(null); 62 /******/ __webpack_require__.r(ns); 63 /******/ Object.defineProperty(ns, 'default', { enumerable: true, value: value }); 64 /******/ if(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key)); 65 /******/ return ns; 66 /******/ }; 67 /******/ 68 /******/ // getDefaultExport function for compatibility with non-harmony modules 69 /******/ __webpack_require__.n = function(module) { 70 /******/ var getter = module && module.__esModule ? 71 /******/ function getDefault() { return module['default']; } : 72 /******/ function getModuleExports() { return module; }; 73 /******/ __webpack_require__.d(getter, 'a', getter); 74 /******/ return getter; 75 /******/ }; 76 /******/ 77 /******/ // Object.prototype.hasOwnProperty.call 78 /******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); }; 79 /******/ 80 /******/ // __webpack_public_path__ 81 /******/ __webpack_require__.p = ""; 82 /******/ 83 /******/ 84 /******/ // Load entry module and return exports 85 /******/ return __webpack_require__(__webpack_require__.s = "ey5A"); 86 /******/ }) 87 /************************************************************************/ 88 /******/ ({ 89 90 /***/ "4eJC": 91 /***/ (function(module, exports, __webpack_require__) { 92 93 /** 94 * Memize options object. 95 * 96 * @typedef MemizeOptions 97 * 98 * @property {number} [maxSize] Maximum size of the cache. 99 */ 100 101 /** 102 * Internal cache entry. 103 * 104 * @typedef MemizeCacheNode 105 * 106 * @property {?MemizeCacheNode|undefined} [prev] Previous node. 107 * @property {?MemizeCacheNode|undefined} [next] Next node. 108 * @property {Array<*>} args Function arguments for cache 109 * entry. 110 * @property {*} val Function result. 111 */ 112 113 /** 114 * Properties of the enhanced function for controlling cache. 115 * 116 * @typedef MemizeMemoizedFunction 117 * 118 * @property {()=>void} clear Clear the cache. 119 */ 120 121 /** 122 * Accepts a function to be memoized, and returns a new memoized function, with 123 * optional options. 124 * 125 * @template {Function} F 126 * 127 * @param {F} fn Function to memoize. 128 * @param {MemizeOptions} [options] Options object. 129 * 130 * @return {F & MemizeMemoizedFunction} Memoized function. 131 */ 132 function memize( fn, options ) { 133 var size = 0; 134 135 /** @type {?MemizeCacheNode|undefined} */ 136 var head; 137 138 /** @type {?MemizeCacheNode|undefined} */ 139 var tail; 140 141 options = options || {}; 142 143 function memoized( /* ...args */ ) { 144 var node = head, 145 len = arguments.length, 146 args, i; 147 148 searchCache: while ( node ) { 149 // Perform a shallow equality test to confirm that whether the node 150 // under test is a candidate for the arguments passed. Two arrays 151 // are shallowly equal if their length matches and each entry is 152 // strictly equal between the two sets. Avoid abstracting to a 153 // function which could incur an arguments leaking deoptimization. 154 155 // Check whether node arguments match arguments length 156 if ( node.args.length !== arguments.length ) { 157 node = node.next; 158 continue; 159 } 160 161 // Check whether node arguments match arguments values 162 for ( i = 0; i < len; i++ ) { 163 if ( node.args[ i ] !== arguments[ i ] ) { 164 node = node.next; 165 continue searchCache; 166 } 167 } 168 169 // At this point we can assume we've found a match 170 171 // Surface matched node to head if not already 172 if ( node !== head ) { 173 // As tail, shift to previous. Must only shift if not also 174 // head, since if both head and tail, there is no previous. 175 if ( node === tail ) { 176 tail = node.prev; 177 } 178 179 // Adjust siblings to point to each other. If node was tail, 180 // this also handles new tail's empty `next` assignment. 181 /** @type {MemizeCacheNode} */ ( node.prev ).next = node.next; 182 if ( node.next ) { 183 node.next.prev = node.prev; 184 } 185 186 node.next = head; 187 node.prev = null; 188 /** @type {MemizeCacheNode} */ ( head ).prev = node; 189 head = node; 190 } 191 192 // Return immediately 193 return node.val; 194 } 195 196 // No cached value found. Continue to insertion phase: 197 198 // Create a copy of arguments (avoid leaking deoptimization) 199 args = new Array( len ); 200 for ( i = 0; i < len; i++ ) { 201 args[ i ] = arguments[ i ]; 202 } 203 204 node = { 205 args: args, 206 207 // Generate the result from original function 208 val: fn.apply( null, args ), 209 }; 210 211 // Don't need to check whether node is already head, since it would 212 // have been returned above already if it was 213 214 // Shift existing head down list 215 if ( head ) { 216 head.prev = node; 217 node.next = head; 218 } else { 219 // If no head, follows that there's no tail (at initial or reset) 220 tail = node; 221 } 222 223 // Trim tail if we're reached max size and are pending cache insertion 224 if ( size === /** @type {MemizeOptions} */ ( options ).maxSize ) { 225 tail = /** @type {MemizeCacheNode} */ ( tail ).prev; 226 /** @type {MemizeCacheNode} */ ( tail ).next = null; 227 } else { 228 size++; 229 } 230 231 head = node; 232 233 return node.val; 234 } 235 236 memoized.clear = function() { 237 head = null; 238 tail = null; 239 size = 0; 240 }; 241 242 if ( false ) {} 243 244 // Ignore reason: There's not a clear solution to create an intersection of 245 // the function with additional properties, where the goal is to retain the 246 // function signature of the incoming argument and add control properties 247 // on the return value. 248 249 // @ts-ignore 250 return memoized; 251 } 252 253 module.exports = memize; 254 255 256 /***/ }), 257 258 /***/ "GRId": 259 /***/ (function(module, exports) { 260 261 (function() { module.exports = window["wp"]["element"]; }()); 262 263 /***/ }), 264 265 /***/ "K9lf": 266 /***/ (function(module, exports) { 267 268 (function() { module.exports = window["wp"]["compose"]; }()); 269 270 /***/ }), 271 272 /***/ "Tqx9": 273 /***/ (function(module, exports) { 274 275 (function() { module.exports = window["wp"]["primitives"]; }()); 276 277 /***/ }), 278 279 /***/ "YLtl": 280 /***/ (function(module, exports) { 281 282 (function() { module.exports = window["lodash"]; }()); 283 284 /***/ }), 285 286 /***/ "ey5A": 287 /***/ (function(module, __webpack_exports__, __webpack_require__) { 288 289 "use strict"; 290 // ESM COMPAT FLAG 291 __webpack_require__.r(__webpack_exports__); 292 293 // EXPORTS 294 __webpack_require__.d(__webpack_exports__, "PluginArea", function() { return /* reexport */ plugin_area; }); 295 __webpack_require__.d(__webpack_exports__, "withPluginContext", function() { return /* reexport */ withPluginContext; }); 296 __webpack_require__.d(__webpack_exports__, "registerPlugin", function() { return /* reexport */ registerPlugin; }); 297 __webpack_require__.d(__webpack_exports__, "unregisterPlugin", function() { return /* reexport */ unregisterPlugin; }); 298 __webpack_require__.d(__webpack_exports__, "getPlugin", function() { return /* reexport */ getPlugin; }); 299 __webpack_require__.d(__webpack_exports__, "getPlugins", function() { return /* reexport */ getPlugins; }); 300 301 // EXTERNAL MODULE: external ["wp","element"] 302 var external_wp_element_ = __webpack_require__("GRId"); 303 304 // EXTERNAL MODULE: external "lodash" 305 var external_lodash_ = __webpack_require__("YLtl"); 306 307 // EXTERNAL MODULE: ./node_modules/memize/index.js 308 var memize = __webpack_require__("4eJC"); 309 var memize_default = /*#__PURE__*/__webpack_require__.n(memize); 310 311 // EXTERNAL MODULE: external ["wp","hooks"] 312 var external_wp_hooks_ = __webpack_require__("g56x"); 313 314 // EXTERNAL MODULE: ./node_modules/@babel/runtime/helpers/esm/extends.js 315 var esm_extends = __webpack_require__("wx14"); 316 317 // EXTERNAL MODULE: external ["wp","compose"] 318 var external_wp_compose_ = __webpack_require__("K9lf"); 319 320 // CONCATENATED MODULE: ./node_modules/@wordpress/plugins/build-module/components/plugin-context/index.js 321 322 323 324 /** 325 * WordPress dependencies 326 */ 327 328 329 const { 330 Consumer, 331 Provider 332 } = Object(external_wp_element_["createContext"])({ 333 name: null, 334 icon: null 335 }); 336 337 /** 338 * A Higher Order Component used to inject Plugin context to the 339 * wrapped component. 340 * 341 * @param {Function} mapContextToProps Function called on every context change, 342 * expected to return object of props to 343 * merge with the component's own props. 344 * 345 * @return {WPComponent} Enhanced component with injected context as props. 346 */ 347 348 const withPluginContext = mapContextToProps => Object(external_wp_compose_["createHigherOrderComponent"])(OriginalComponent => { 349 return props => Object(external_wp_element_["createElement"])(Consumer, null, context => Object(external_wp_element_["createElement"])(OriginalComponent, Object(esm_extends["a" /* default */])({}, props, mapContextToProps(context, props)))); 350 }, 'withPluginContext'); 351 352 // EXTERNAL MODULE: external ["wp","primitives"] 353 var external_wp_primitives_ = __webpack_require__("Tqx9"); 354 355 // CONCATENATED MODULE: ./node_modules/@wordpress/icons/build-module/library/plugins.js 356 357 358 /** 359 * WordPress dependencies 360 */ 361 362 const plugins = Object(external_wp_element_["createElement"])(external_wp_primitives_["SVG"], { 363 xmlns: "http://www.w3.org/2000/svg", 364 viewBox: "0 0 24 24" 365 }, Object(external_wp_element_["createElement"])(external_wp_primitives_["Path"], { 366 d: "M10.5 4v4h3V4H15v4h1.5a1 1 0 011 1v4l-3 4v2a1 1 0 01-1 1h-3a1 1 0 01-1-1v-2l-3-4V9a1 1 0 011-1H9V4h1.5zm.5 12.5v2h2v-2l3-4v-3H8v3l3 4z" 367 })); 368 /* harmony default export */ var library_plugins = (plugins); 369 370 // CONCATENATED MODULE: ./node_modules/@wordpress/plugins/build-module/api/index.js 371 /* eslint no-console: [ 'error', { allow: [ 'error' ] } ] */ 372 373 /** 374 * WordPress dependencies 375 */ 376 377 378 /** 379 * External dependencies 380 */ 381 382 383 /** 384 * Defined behavior of a plugin type. 385 * 386 * @typedef {Object} WPPlugin 387 * 388 * @property {string} name A string identifying the plugin. Must be 389 * unique across all registered plugins. 390 * @property {string|WPElement|Function} [icon] An icon to be shown in the UI. It can 391 * be a slug of the Dashicon, or an element 392 * (or function returning an element) if you 393 * choose to render your own SVG. 394 * @property {Function} render A component containing the UI elements 395 * to be rendered. 396 * @property {string} [scope] The optional scope to be used when rendering inside 397 * a plugin area. No scope by default. 398 */ 399 400 /** 401 * Plugin definitions keyed by plugin name. 402 * 403 * @type {Object.<string,WPPlugin>} 404 */ 405 406 const api_plugins = {}; 407 /** 408 * Registers a plugin to the editor. 409 * 410 * @param {string} name A string identifying the plugin.Must be 411 * unique across all registered plugins. 412 * @param {WPPlugin} settings The settings for this plugin. 413 * 414 * @example 415 * ```js 416 * // Using ES5 syntax 417 * var el = wp.element.createElement; 418 * var Fragment = wp.element.Fragment; 419 * var PluginSidebar = wp.editPost.PluginSidebar; 420 * var PluginSidebarMoreMenuItem = wp.editPost.PluginSidebarMoreMenuItem; 421 * var registerPlugin = wp.plugins.registerPlugin; 422 * var moreIcon = wp.element.createElement( 'svg' ); //... svg element. 423 * 424 * function Component() { 425 * return el( 426 * Fragment, 427 * {}, 428 * el( 429 * PluginSidebarMoreMenuItem, 430 * { 431 * target: 'sidebar-name', 432 * }, 433 * 'My Sidebar' 434 * ), 435 * el( 436 * PluginSidebar, 437 * { 438 * name: 'sidebar-name', 439 * title: 'My Sidebar', 440 * }, 441 * 'Content of the sidebar' 442 * ) 443 * ); 444 * } 445 * registerPlugin( 'plugin-name', { 446 * icon: moreIcon, 447 * render: Component, 448 * scope: 'my-page', 449 * } ); 450 * ``` 451 * 452 * @example 453 * ```js 454 * // Using ESNext syntax 455 * import { PluginSidebar, PluginSidebarMoreMenuItem } from '@wordpress/edit-post'; 456 * import { registerPlugin } from '@wordpress/plugins'; 457 * import { more } from '@wordpress/icons'; 458 * 459 * const Component = () => ( 460 * <> 461 * <PluginSidebarMoreMenuItem 462 * target="sidebar-name" 463 * > 464 * My Sidebar 465 * </PluginSidebarMoreMenuItem> 466 * <PluginSidebar 467 * name="sidebar-name" 468 * title="My Sidebar" 469 * > 470 * Content of the sidebar 471 * </PluginSidebar> 472 * </> 473 * ); 474 * 475 * registerPlugin( 'plugin-name', { 476 * icon: more, 477 * render: Component, 478 * scope: 'my-page', 479 * } ); 480 * ``` 481 * 482 * @return {WPPlugin} The final plugin settings object. 483 */ 484 485 function registerPlugin(name, settings) { 486 if (typeof settings !== 'object') { 487 console.error('No settings object provided!'); 488 return null; 489 } 490 491 if (typeof name !== 'string') { 492 console.error('Plugin name must be string.'); 493 return null; 494 } 495 496 if (!/^[a-z][a-z0-9-]*$/.test(name)) { 497 console.error('Plugin name must include only lowercase alphanumeric characters or dashes, and start with a letter. Example: "my-plugin".'); 498 return null; 499 } 500 501 if (api_plugins[name]) { 502 console.error(`Plugin "${name}" is already registered.`); 503 } 504 505 settings = Object(external_wp_hooks_["applyFilters"])('plugins.registerPlugin', settings, name); 506 const { 507 render, 508 scope 509 } = settings; 510 511 if (!Object(external_lodash_["isFunction"])(render)) { 512 console.error('The "render" property must be specified and must be a valid function.'); 513 return null; 514 } 515 516 if (scope) { 517 if (typeof scope !== 'string') { 518 console.error('Plugin scope must be string.'); 519 return null; 520 } 521 522 if (!/^[a-z][a-z0-9-]*$/.test(scope)) { 523 console.error('Plugin scope must include only lowercase alphanumeric characters or dashes, and start with a letter. Example: "my-page".'); 524 return null; 525 } 526 } 527 528 api_plugins[name] = { 529 name, 530 icon: library_plugins, 531 ...settings 532 }; 533 Object(external_wp_hooks_["doAction"])('plugins.pluginRegistered', settings, name); 534 return settings; 535 } 536 /** 537 * Unregisters a plugin by name. 538 * 539 * @param {string} name Plugin name. 540 * 541 * @example 542 * ```js 543 * // Using ES5 syntax 544 * var unregisterPlugin = wp.plugins.unregisterPlugin; 545 * 546 * unregisterPlugin( 'plugin-name' ); 547 * ``` 548 * 549 * @example 550 * ```js 551 * // Using ESNext syntax 552 * import { unregisterPlugin } from '@wordpress/plugins'; 553 * 554 * unregisterPlugin( 'plugin-name' ); 555 * ``` 556 * 557 * @return {?WPPlugin} The previous plugin settings object, if it has been 558 * successfully unregistered; otherwise `undefined`. 559 */ 560 561 function unregisterPlugin(name) { 562 if (!api_plugins[name]) { 563 console.error('Plugin "' + name + '" is not registered.'); 564 return; 565 } 566 567 const oldPlugin = api_plugins[name]; 568 delete api_plugins[name]; 569 Object(external_wp_hooks_["doAction"])('plugins.pluginUnregistered', oldPlugin, name); 570 return oldPlugin; 571 } 572 /** 573 * Returns a registered plugin settings. 574 * 575 * @param {string} name Plugin name. 576 * 577 * @return {?WPPlugin} Plugin setting. 578 */ 579 580 function getPlugin(name) { 581 return api_plugins[name]; 582 } 583 /** 584 * Returns all registered plugins without a scope or for a given scope. 585 * 586 * @param {string} [scope] The scope to be used when rendering inside 587 * a plugin area. No scope by default. 588 * 589 * @return {WPPlugin[]} The list of plugins without a scope or for a given scope. 590 */ 591 592 function getPlugins(scope) { 593 return Object.values(api_plugins).filter(plugin => plugin.scope === scope); 594 } 595 596 // CONCATENATED MODULE: ./node_modules/@wordpress/plugins/build-module/components/plugin-area/index.js 597 598 599 /** 600 * External dependencies 601 */ 602 603 604 /** 605 * WordPress dependencies 606 */ 607 608 609 610 /** 611 * Internal dependencies 612 */ 613 614 615 616 /** 617 * A component that renders all plugin fills in a hidden div. 618 * 619 * @example 620 * ```js 621 * // Using ES5 syntax 622 * var el = wp.element.createElement; 623 * var PluginArea = wp.plugins.PluginArea; 624 * 625 * function Layout() { 626 * return el( 627 * 'div', 628 * { scope: 'my-page' }, 629 * 'Content of the page', 630 * PluginArea 631 * ); 632 * } 633 * ``` 634 * 635 * @example 636 * ```js 637 * // Using ESNext syntax 638 * import { PluginArea } from '@wordpress/plugins'; 639 * 640 * const Layout = () => ( 641 * <div> 642 * Content of the page 643 * <PluginArea scope="my-page" /> 644 * </div> 645 * ); 646 * ``` 647 * 648 * @return {WPComponent} The component to be rendered. 649 */ 650 651 class plugin_area_PluginArea extends external_wp_element_["Component"] { 652 constructor() { 653 super(...arguments); 654 this.setPlugins = this.setPlugins.bind(this); 655 this.memoizedContext = memize_default()((name, icon) => { 656 return { 657 name, 658 icon 659 }; 660 }); 661 this.state = this.getCurrentPluginsState(); 662 } 663 664 getCurrentPluginsState() { 665 return { 666 plugins: Object(external_lodash_["map"])(getPlugins(this.props.scope), ({ 667 icon, 668 name, 669 render 670 }) => { 671 return { 672 Plugin: render, 673 context: this.memoizedContext(name, icon) 674 }; 675 }) 676 }; 677 } 678 679 componentDidMount() { 680 Object(external_wp_hooks_["addAction"])('plugins.pluginRegistered', 'core/plugins/plugin-area/plugins-registered', this.setPlugins); 681 Object(external_wp_hooks_["addAction"])('plugins.pluginUnregistered', 'core/plugins/plugin-area/plugins-unregistered', this.setPlugins); 682 } 683 684 componentWillUnmount() { 685 Object(external_wp_hooks_["removeAction"])('plugins.pluginRegistered', 'core/plugins/plugin-area/plugins-registered'); 686 Object(external_wp_hooks_["removeAction"])('plugins.pluginUnregistered', 'core/plugins/plugin-area/plugins-unregistered'); 687 } 688 689 setPlugins() { 690 this.setState(this.getCurrentPluginsState); 691 } 692 693 render() { 694 return Object(external_wp_element_["createElement"])("div", { 695 style: { 696 display: 'none' 697 } 698 }, Object(external_lodash_["map"])(this.state.plugins, ({ 699 context, 700 Plugin 701 }) => Object(external_wp_element_["createElement"])(Provider, { 702 key: context.name, 703 value: context 704 }, Object(external_wp_element_["createElement"])(Plugin, null)))); 705 } 706 707 } 708 709 /* harmony default export */ var plugin_area = (plugin_area_PluginArea); 710 711 // CONCATENATED MODULE: ./node_modules/@wordpress/plugins/build-module/components/index.js 712 713 714 715 // CONCATENATED MODULE: ./node_modules/@wordpress/plugins/build-module/index.js 716 717 718 719 720 /***/ }), 721 722 /***/ "g56x": 723 /***/ (function(module, exports) { 724 725 (function() { module.exports = window["wp"]["hooks"]; }()); 726 727 /***/ }), 728 729 /***/ "wx14": 730 /***/ (function(module, __webpack_exports__, __webpack_require__) { 731 732 "use strict"; 733 /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return _extends; }); 734 function _extends() { 735 _extends = Object.assign || function (target) { 736 for (var i = 1; i < arguments.length; i++) { 737 var source = arguments[i]; 738 739 for (var key in source) { 740 if (Object.prototype.hasOwnProperty.call(source, key)) { 741 target[key] = source[key]; 742 } 743 } 744 } 745 746 return target; 747 }; 748 749 return _extends.apply(this, arguments); 750 } 751 752 /***/ }) 753 754 /******/ });