[ Index ] |
PHP Cross Reference of WordPress Trunk (Updated Daily) |
[Summary view] [Print] [Text view]
1 /******/ (() => { // webpackBootstrap 2 /******/ "use strict"; 3 /******/ // The require scope 4 /******/ var __webpack_require__ = {}; 5 /******/ 6 /************************************************************************/ 7 /******/ /* webpack/runtime/compat get default export */ 8 /******/ (() => { 9 /******/ // getDefaultExport function for compatibility with non-harmony modules 10 /******/ __webpack_require__.n = (module) => { 11 /******/ var getter = module && module.__esModule ? 12 /******/ () => (module['default']) : 13 /******/ () => (module); 14 /******/ __webpack_require__.d(getter, { a: getter }); 15 /******/ return getter; 16 /******/ }; 17 /******/ })(); 18 /******/ 19 /******/ /* webpack/runtime/define property getters */ 20 /******/ (() => { 21 /******/ // define getter functions for harmony exports 22 /******/ __webpack_require__.d = (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 /******/ (() => { 33 /******/ __webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop)) 34 /******/ })(); 35 /******/ 36 /******/ /* webpack/runtime/make namespace object */ 37 /******/ (() => { 38 /******/ // define __esModule on exports 39 /******/ __webpack_require__.r = (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 MoveToWidgetArea: () => (/* reexport */ MoveToWidgetArea), 55 addWidgetIdToBlock: () => (/* reexport */ addWidgetIdToBlock), 56 getWidgetIdFromBlock: () => (/* reexport */ getWidgetIdFromBlock), 57 registerLegacyWidgetBlock: () => (/* binding */ registerLegacyWidgetBlock), 58 registerLegacyWidgetVariations: () => (/* reexport */ registerLegacyWidgetVariations), 59 registerWidgetGroupBlock: () => (/* binding */ registerWidgetGroupBlock) 60 }); 61 62 // NAMESPACE OBJECT: ./node_modules/@wordpress/widgets/build-module/blocks/legacy-widget/index.js 63 var legacy_widget_namespaceObject = {}; 64 __webpack_require__.r(legacy_widget_namespaceObject); 65 __webpack_require__.d(legacy_widget_namespaceObject, { 66 metadata: () => (metadata), 67 name: () => (legacy_widget_name), 68 settings: () => (settings) 69 }); 70 71 // NAMESPACE OBJECT: ./node_modules/@wordpress/widgets/build-module/blocks/widget-group/index.js 72 var widget_group_namespaceObject = {}; 73 __webpack_require__.r(widget_group_namespaceObject); 74 __webpack_require__.d(widget_group_namespaceObject, { 75 metadata: () => (widget_group_metadata), 76 name: () => (widget_group_name), 77 settings: () => (widget_group_settings) 78 }); 79 80 ;// CONCATENATED MODULE: external ["wp","blocks"] 81 const external_wp_blocks_namespaceObject = window["wp"]["blocks"]; 82 ;// CONCATENATED MODULE: external ["wp","primitives"] 83 const external_wp_primitives_namespaceObject = window["wp"]["primitives"]; 84 ;// CONCATENATED MODULE: external "ReactJSXRuntime" 85 const external_ReactJSXRuntime_namespaceObject = window["ReactJSXRuntime"]; 86 ;// CONCATENATED MODULE: ./node_modules/@wordpress/icons/build-module/library/widget.js 87 /** 88 * WordPress dependencies 89 */ 90 91 92 const widget = /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_primitives_namespaceObject.SVG, { 93 xmlns: "http://www.w3.org/2000/svg", 94 viewBox: "0 0 24 24", 95 children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_primitives_namespaceObject.Path, { 96 d: "M6 3H8V5H16V3H18V5C19.1046 5 20 5.89543 20 7V19C20 20.1046 19.1046 21 18 21H6C4.89543 21 4 20.1046 4 19V7C4 5.89543 4.89543 5 6 5V3ZM18 6.5H6C5.72386 6.5 5.5 6.72386 5.5 7V8H18.5V7C18.5 6.72386 18.2761 6.5 18 6.5ZM18.5 9.5H5.5V19C5.5 19.2761 5.72386 19.5 6 19.5H18C18.2761 19.5 18.5 19.2761 18.5 19V9.5ZM11 11H13V13H11V11ZM7 11V13H9V11H7ZM15 13V11H17V13H15Z" 97 }) 98 }); 99 /* harmony default export */ const library_widget = (widget); 100 101 ;// CONCATENATED MODULE: ./node_modules/clsx/dist/clsx.mjs 102 function r(e){var t,f,n="";if("string"==typeof e||"number"==typeof e)n+=e;else if("object"==typeof e)if(Array.isArray(e)){var o=e.length;for(t=0;t<o;t++)e[t]&&(f=r(e[t]))&&(n&&(n+=" "),n+=f)}else for(f in e)e[f]&&(n&&(n+=" "),n+=f);return n}function clsx(){for(var e,t,f=0,n="",o=arguments.length;f<o;f++)(e=arguments[f])&&(t=r(e))&&(n&&(n+=" "),n+=t);return n}/* harmony default export */ const dist_clsx = (clsx); 103 ;// CONCATENATED MODULE: external ["wp","blockEditor"] 104 const external_wp_blockEditor_namespaceObject = window["wp"]["blockEditor"]; 105 ;// CONCATENATED MODULE: external ["wp","components"] 106 const external_wp_components_namespaceObject = window["wp"]["components"]; 107 ;// CONCATENATED MODULE: ./node_modules/@wordpress/icons/build-module/library/brush.js 108 /** 109 * WordPress dependencies 110 */ 111 112 113 const brush = /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_primitives_namespaceObject.SVG, { 114 xmlns: "http://www.w3.org/2000/svg", 115 viewBox: "0 0 24 24", 116 children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_primitives_namespaceObject.Path, { 117 d: "M4 20h8v-1.5H4V20zM18.9 3.5c-.6-.6-1.5-.6-2.1 0l-7.2 7.2c-.4-.1-.7 0-1.1.1-.5.2-1.5.7-1.9 2.2-.4 1.7-.8 2.2-1.1 2.7-.1.1-.2.3-.3.4l-.6 1.1H6c2 0 3.4-.4 4.7-1.4.8-.6 1.2-1.4 1.3-2.3 0-.3 0-.5-.1-.7L19 5.7c.5-.6.5-1.6-.1-2.2zM9.7 14.7c-.7.5-1.5.8-2.4 1 .2-.5.5-1.2.8-2.3.2-.6.4-1 .8-1.1.5-.1 1 .1 1.3.3.2.2.3.5.2.8 0 .3-.1.9-.7 1.3z" 118 }) 119 }); 120 /* harmony default export */ const library_brush = (brush); 121 122 ;// CONCATENATED MODULE: external ["wp","i18n"] 123 const external_wp_i18n_namespaceObject = window["wp"]["i18n"]; 124 ;// CONCATENATED MODULE: external ["wp","element"] 125 const external_wp_element_namespaceObject = window["wp"]["element"]; 126 ;// CONCATENATED MODULE: external ["wp","data"] 127 const external_wp_data_namespaceObject = window["wp"]["data"]; 128 ;// CONCATENATED MODULE: external ["wp","coreData"] 129 const external_wp_coreData_namespaceObject = window["wp"]["coreData"]; 130 ;// CONCATENATED MODULE: ./node_modules/@wordpress/widgets/build-module/blocks/legacy-widget/edit/widget-type-selector.js 131 /** 132 * WordPress dependencies 133 */ 134 135 136 137 138 139 140 function WidgetTypeSelector({ 141 selectedId, 142 onSelect 143 }) { 144 const widgetTypes = (0,external_wp_data_namespaceObject.useSelect)(select => { 145 var _select$getSettings$w; 146 const hiddenIds = (_select$getSettings$w = select(external_wp_blockEditor_namespaceObject.store).getSettings()?.widgetTypesToHideFromLegacyWidgetBlock) !== null && _select$getSettings$w !== void 0 ? _select$getSettings$w : []; 147 return select(external_wp_coreData_namespaceObject.store).getWidgetTypes({ 148 per_page: -1 149 })?.filter(widgetType => !hiddenIds.includes(widgetType.id)); 150 }, []); 151 if (!widgetTypes) { 152 return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.Spinner, {}); 153 } 154 if (widgetTypes.length === 0) { 155 return (0,external_wp_i18n_namespaceObject.__)('There are no widgets available.'); 156 } 157 return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.SelectControl, { 158 __next40pxDefaultSize: true, 159 __nextHasNoMarginBottom: true, 160 label: (0,external_wp_i18n_namespaceObject.__)('Legacy widget'), 161 value: selectedId !== null && selectedId !== void 0 ? selectedId : '', 162 options: [{ 163 value: '', 164 label: (0,external_wp_i18n_namespaceObject.__)('Select widget') 165 }, ...widgetTypes.map(widgetType => ({ 166 value: widgetType.id, 167 label: widgetType.name 168 }))], 169 onChange: value => { 170 if (value) { 171 const selected = widgetTypes.find(widgetType => widgetType.id === value); 172 onSelect({ 173 selectedId: selected.id, 174 isMulti: selected.is_multi 175 }); 176 } else { 177 onSelect({ 178 selectedId: null 179 }); 180 } 181 } 182 }); 183 } 184 185 ;// CONCATENATED MODULE: ./node_modules/@wordpress/widgets/build-module/blocks/legacy-widget/edit/inspector-card.js 186 187 188 function InspectorCard({ 189 name, 190 description 191 }) { 192 return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)("div", { 193 className: "wp-block-legacy-widget-inspector-card", 194 children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)("h3", { 195 className: "wp-block-legacy-widget-inspector-card__name", 196 children: name 197 }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)("span", { 198 children: description 199 })] 200 }); 201 } 202 203 ;// CONCATENATED MODULE: external ["wp","notices"] 204 const external_wp_notices_namespaceObject = window["wp"]["notices"]; 205 ;// CONCATENATED MODULE: external ["wp","compose"] 206 const external_wp_compose_namespaceObject = window["wp"]["compose"]; 207 ;// CONCATENATED MODULE: external ["wp","apiFetch"] 208 const external_wp_apiFetch_namespaceObject = window["wp"]["apiFetch"]; 209 var external_wp_apiFetch_default = /*#__PURE__*/__webpack_require__.n(external_wp_apiFetch_namespaceObject); 210 ;// CONCATENATED MODULE: ./node_modules/@wordpress/widgets/build-module/blocks/legacy-widget/edit/control.js 211 /* wp:polyfill */ 212 /** 213 * WordPress dependencies 214 */ 215 216 217 218 219 /** 220 * An API for creating and loading a widget control (a <div class="widget"> 221 * element) that is compatible with most third party widget scripts. By not 222 * using React for this, we ensure that we have complete contorl over the DOM 223 * and do not accidentally remove any elements that a third party widget script 224 * has attached an event listener to. 225 * 226 * @property {Element} element The control's DOM element. 227 */ 228 class Control { 229 /** 230 * Creates and loads a new control. 231 * 232 * @access public 233 * @param {Object} params 234 * @param {string} params.id 235 * @param {string} params.idBase 236 * @param {Object} params.instance 237 * @param {Function} params.onChangeInstance 238 * @param {Function} params.onChangeHasPreview 239 * @param {Function} params.onError 240 */ 241 constructor({ 242 id, 243 idBase, 244 instance, 245 onChangeInstance, 246 onChangeHasPreview, 247 onError 248 }) { 249 this.id = id; 250 this.idBase = idBase; 251 this._instance = instance; 252 this._hasPreview = null; 253 this.onChangeInstance = onChangeInstance; 254 this.onChangeHasPreview = onChangeHasPreview; 255 this.onError = onError; 256 257 // We can't use the real widget number as this is calculated by the 258 // server and we may not ever *actually* save this widget. Instead, use 259 // a fake but unique number. 260 this.number = ++lastNumber; 261 this.handleFormChange = (0,external_wp_compose_namespaceObject.debounce)(this.handleFormChange.bind(this), 200); 262 this.handleFormSubmit = this.handleFormSubmit.bind(this); 263 this.initDOM(); 264 this.bindEvents(); 265 this.loadContent(); 266 } 267 268 /** 269 * Clean up the control so that it can be garabge collected. 270 * 271 * @access public 272 */ 273 destroy() { 274 this.unbindEvents(); 275 this.element.remove(); 276 // TODO: How do we make third party widget scripts remove their event 277 // listeners? 278 } 279 280 /** 281 * Creates the control's DOM structure. 282 * 283 * @access private 284 */ 285 initDOM() { 286 var _this$id, _this$idBase; 287 this.element = el('div', { 288 class: 'widget open' 289 }, [el('div', { 290 class: 'widget-inside' 291 }, [this.form = el('form', { 292 class: 'form', 293 method: 'post' 294 }, [ 295 // These hidden form inputs are what most widgets' scripts 296 // use to access data about the widget. 297 el('input', { 298 class: 'widget-id', 299 type: 'hidden', 300 name: 'widget-id', 301 value: (_this$id = this.id) !== null && _this$id !== void 0 ? _this$id : `$this.idBase}-$this.number}` 302 }), el('input', { 303 class: 'id_base', 304 type: 'hidden', 305 name: 'id_base', 306 value: (_this$idBase = this.idBase) !== null && _this$idBase !== void 0 ? _this$idBase : this.id 307 }), el('input', { 308 class: 'widget-width', 309 type: 'hidden', 310 name: 'widget-width', 311 value: '250' 312 }), el('input', { 313 class: 'widget-height', 314 type: 'hidden', 315 name: 'widget-height', 316 value: '200' 317 }), el('input', { 318 class: 'widget_number', 319 type: 'hidden', 320 name: 'widget_number', 321 value: this.idBase ? this.number.toString() : '' 322 }), this.content = el('div', { 323 class: 'widget-content' 324 }), 325 // Non-multi widgets can be saved via a Save button. 326 this.id && el('button', { 327 class: 'button is-primary', 328 type: 'submit' 329 }, (0,external_wp_i18n_namespaceObject.__)('Save'))])])]); 330 } 331 332 /** 333 * Adds the control's event listeners. 334 * 335 * @access private 336 */ 337 bindEvents() { 338 // Prefer jQuery 'change' event instead of the native 'change' event 339 // because many widgets use jQuery's event bus to trigger an update. 340 if (window.jQuery) { 341 const { 342 jQuery: $ 343 } = window; 344 $(this.form).on('change', null, this.handleFormChange); 345 $(this.form).on('input', null, this.handleFormChange); 346 $(this.form).on('submit', this.handleFormSubmit); 347 } else { 348 this.form.addEventListener('change', this.handleFormChange); 349 this.form.addEventListener('input', this.handleFormChange); 350 this.form.addEventListener('submit', this.handleFormSubmit); 351 } 352 } 353 354 /** 355 * Removes the control's event listeners. 356 * 357 * @access private 358 */ 359 unbindEvents() { 360 if (window.jQuery) { 361 const { 362 jQuery: $ 363 } = window; 364 $(this.form).off('change', null, this.handleFormChange); 365 $(this.form).off('input', null, this.handleFormChange); 366 $(this.form).off('submit', this.handleFormSubmit); 367 } else { 368 this.form.removeEventListener('change', this.handleFormChange); 369 this.form.removeEventListener('input', this.handleFormChange); 370 this.form.removeEventListener('submit', this.handleFormSubmit); 371 } 372 } 373 374 /** 375 * Fetches the widget's form HTML from the REST API and loads it into the 376 * control's form. 377 * 378 * @access private 379 */ 380 async loadContent() { 381 try { 382 if (this.id) { 383 const { 384 form 385 } = await saveWidget(this.id); 386 this.content.innerHTML = form; 387 } else if (this.idBase) { 388 const { 389 form, 390 preview 391 } = await encodeWidget({ 392 idBase: this.idBase, 393 instance: this.instance, 394 number: this.number 395 }); 396 this.content.innerHTML = form; 397 this.hasPreview = !isEmptyHTML(preview); 398 399 // If we don't have an instance, perform a save right away. This 400 // happens when creating a new Legacy Widget block. 401 if (!this.instance.hash) { 402 const { 403 instance 404 } = await encodeWidget({ 405 idBase: this.idBase, 406 instance: this.instance, 407 number: this.number, 408 formData: serializeForm(this.form) 409 }); 410 this.instance = instance; 411 } 412 } 413 414 // Trigger 'widget-added' when widget is ready. This event is what 415 // widgets' scripts use to initialize, attach events, etc. The event 416 // must be fired using jQuery's event bus as this is what widget 417 // scripts expect. If jQuery is not loaded, do nothing - some 418 // widgets will still work regardless. 419 if (window.jQuery) { 420 const { 421 jQuery: $ 422 } = window; 423 $(document).trigger('widget-added', [$(this.element)]); 424 } 425 } catch (error) { 426 this.onError(error); 427 } 428 } 429 430 /** 431 * Perform a save when a multi widget's form is changed. Non-multi widgets 432 * are saved manually. 433 * 434 * @access private 435 */ 436 handleFormChange() { 437 if (this.idBase) { 438 this.saveForm(); 439 } 440 } 441 442 /** 443 * Perform a save when the control's form is manually submitted. 444 * 445 * @access private 446 * @param {Event} event 447 */ 448 handleFormSubmit(event) { 449 event.preventDefault(); 450 this.saveForm(); 451 } 452 453 /** 454 * Serialize the control's form, send it to the REST API, and update the 455 * instance with the encoded instance that the REST API returns. 456 * 457 * @access private 458 */ 459 async saveForm() { 460 const formData = serializeForm(this.form); 461 try { 462 if (this.id) { 463 const { 464 form 465 } = await saveWidget(this.id, formData); 466 this.content.innerHTML = form; 467 if (window.jQuery) { 468 const { 469 jQuery: $ 470 } = window; 471 $(document).trigger('widget-updated', [$(this.element)]); 472 } 473 } else if (this.idBase) { 474 const { 475 instance, 476 preview 477 } = await encodeWidget({ 478 idBase: this.idBase, 479 instance: this.instance, 480 number: this.number, 481 formData 482 }); 483 this.instance = instance; 484 this.hasPreview = !isEmptyHTML(preview); 485 } 486 } catch (error) { 487 this.onError(error); 488 } 489 } 490 491 /** 492 * The widget's instance object. 493 * 494 * @access private 495 */ 496 get instance() { 497 return this._instance; 498 } 499 500 /** 501 * The widget's instance object. 502 * 503 * @access private 504 */ 505 set instance(instance) { 506 if (this._instance !== instance) { 507 this._instance = instance; 508 this.onChangeInstance(instance); 509 } 510 } 511 512 /** 513 * Whether or not the widget can be previewed. 514 * 515 * @access public 516 */ 517 get hasPreview() { 518 return this._hasPreview; 519 } 520 521 /** 522 * Whether or not the widget can be previewed. 523 * 524 * @access private 525 */ 526 set hasPreview(hasPreview) { 527 if (this._hasPreview !== hasPreview) { 528 this._hasPreview = hasPreview; 529 this.onChangeHasPreview(hasPreview); 530 } 531 } 532 } 533 let lastNumber = 0; 534 function el(tagName, attributes = {}, content = null) { 535 const element = document.createElement(tagName); 536 for (const [attribute, value] of Object.entries(attributes)) { 537 element.setAttribute(attribute, value); 538 } 539 if (Array.isArray(content)) { 540 for (const child of content) { 541 if (child) { 542 element.appendChild(child); 543 } 544 } 545 } else if (typeof content === 'string') { 546 element.innerText = content; 547 } 548 return element; 549 } 550 async function saveWidget(id, formData = null) { 551 let widget; 552 if (formData) { 553 widget = await external_wp_apiFetch_default()({ 554 path: `/wp/v2/widgets/$id}?context=edit`, 555 method: 'PUT', 556 data: { 557 form_data: formData 558 } 559 }); 560 } else { 561 widget = await external_wp_apiFetch_default()({ 562 path: `/wp/v2/widgets/$id}?context=edit`, 563 method: 'GET' 564 }); 565 } 566 return { 567 form: widget.rendered_form 568 }; 569 } 570 async function encodeWidget({ 571 idBase, 572 instance, 573 number, 574 formData = null 575 }) { 576 const response = await external_wp_apiFetch_default()({ 577 path: `/wp/v2/widget-types/$idBase}/encode`, 578 method: 'POST', 579 data: { 580 instance, 581 number, 582 form_data: formData 583 } 584 }); 585 return { 586 instance: response.instance, 587 form: response.form, 588 preview: response.preview 589 }; 590 } 591 function isEmptyHTML(html) { 592 const element = document.createElement('div'); 593 element.innerHTML = html; 594 return isEmptyNode(element); 595 } 596 function isEmptyNode(node) { 597 switch (node.nodeType) { 598 case node.TEXT_NODE: 599 // Text nodes are empty if it's entirely whitespace. 600 return node.nodeValue.trim() === ''; 601 case node.ELEMENT_NODE: 602 // Elements that are "embedded content" are not empty. 603 // https://dev.w3.org/html5/spec-LC/content-models.html#embedded-content-0 604 if (['AUDIO', 'CANVAS', 'EMBED', 'IFRAME', 'IMG', 'MATH', 'OBJECT', 'SVG', 'VIDEO'].includes(node.tagName)) { 605 return false; 606 } 607 // Elements with no children are empty. 608 if (!node.hasChildNodes()) { 609 return true; 610 } 611 // Elements with children are empty if all their children are empty. 612 return Array.from(node.childNodes).every(isEmptyNode); 613 default: 614 return true; 615 } 616 } 617 function serializeForm(form) { 618 return new window.URLSearchParams(Array.from(new window.FormData(form))).toString(); 619 } 620 621 ;// CONCATENATED MODULE: ./node_modules/@wordpress/widgets/build-module/blocks/legacy-widget/edit/form.js 622 /** 623 * External dependencies 624 */ 625 626 /** 627 * WordPress dependencies 628 */ 629 630 631 632 633 634 635 /** 636 * Internal dependencies 637 */ 638 639 640 641 function Form({ 642 title, 643 isVisible, 644 id, 645 idBase, 646 instance, 647 isWide, 648 onChangeInstance, 649 onChangeHasPreview 650 }) { 651 const ref = (0,external_wp_element_namespaceObject.useRef)(); 652 const isMediumLargeViewport = (0,external_wp_compose_namespaceObject.useViewportMatch)('small'); 653 654 // We only want to remount the control when the instance changes 655 // *externally*. For example, if the user performs an undo. To do this, we 656 // keep track of changes made to instance by the control itself and then 657 // ignore those. 658 const outgoingInstances = (0,external_wp_element_namespaceObject.useRef)(new Set()); 659 const incomingInstances = (0,external_wp_element_namespaceObject.useRef)(new Set()); 660 const { 661 createNotice 662 } = (0,external_wp_data_namespaceObject.useDispatch)(external_wp_notices_namespaceObject.store); 663 (0,external_wp_element_namespaceObject.useEffect)(() => { 664 if (incomingInstances.current.has(instance)) { 665 incomingInstances.current.delete(instance); 666 return; 667 } 668 const control = new Control({ 669 id, 670 idBase, 671 instance, 672 onChangeInstance(nextInstance) { 673 outgoingInstances.current.add(instance); 674 incomingInstances.current.add(nextInstance); 675 onChangeInstance(nextInstance); 676 }, 677 onChangeHasPreview, 678 onError(error) { 679 window.console.error(error); 680 createNotice('error', (0,external_wp_i18n_namespaceObject.sprintf)( /* translators: %s: the name of the affected block. */ 681 (0,external_wp_i18n_namespaceObject.__)('The "%s" block was affected by errors and may not function properly. Check the developer tools for more details.'), idBase || id)); 682 } 683 }); 684 ref.current.appendChild(control.element); 685 return () => { 686 if (outgoingInstances.current.has(instance)) { 687 outgoingInstances.current.delete(instance); 688 return; 689 } 690 control.destroy(); 691 }; 692 }, [id, idBase, instance, onChangeInstance, onChangeHasPreview, isMediumLargeViewport]); 693 if (isWide && isMediumLargeViewport) { 694 return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)("div", { 695 className: dist_clsx({ 696 'wp-block-legacy-widget__container': isVisible 697 }), 698 children: [isVisible && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)("h3", { 699 className: "wp-block-legacy-widget__edit-form-title", 700 children: title 701 }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.Popover, { 702 focusOnMount: false, 703 placement: "right", 704 offset: 32, 705 resize: false, 706 flip: false, 707 shift: true, 708 children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)("div", { 709 ref: ref, 710 className: "wp-block-legacy-widget__edit-form", 711 hidden: !isVisible 712 }) 713 })] 714 }); 715 } 716 return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)("div", { 717 ref: ref, 718 className: "wp-block-legacy-widget__edit-form", 719 hidden: !isVisible, 720 children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)("h3", { 721 className: "wp-block-legacy-widget__edit-form-title", 722 children: title 723 }) 724 }); 725 } 726 727 ;// CONCATENATED MODULE: ./node_modules/@wordpress/widgets/build-module/blocks/legacy-widget/edit/preview.js 728 /** 729 * External dependencies 730 */ 731 732 733 /** 734 * WordPress dependencies 735 */ 736 737 738 739 740 741 742 743 744 function Preview({ 745 idBase, 746 instance, 747 isVisible 748 }) { 749 const [isLoaded, setIsLoaded] = (0,external_wp_element_namespaceObject.useState)(false); 750 const [srcDoc, setSrcDoc] = (0,external_wp_element_namespaceObject.useState)(''); 751 (0,external_wp_element_namespaceObject.useEffect)(() => { 752 const abortController = typeof window.AbortController === 'undefined' ? undefined : new window.AbortController(); 753 async function fetchPreviewHTML() { 754 const restRoute = `/wp/v2/widget-types/$idBase}/render`; 755 return await external_wp_apiFetch_default()({ 756 path: restRoute, 757 method: 'POST', 758 signal: abortController?.signal, 759 data: instance ? { 760 instance 761 } : {} 762 }); 763 } 764 fetchPreviewHTML().then(response => { 765 setSrcDoc(response.preview); 766 }).catch(error => { 767 if ('AbortError' === error.name) { 768 // We don't want to log aborted requests. 769 return; 770 } 771 throw error; 772 }); 773 return () => abortController?.abort(); 774 }, [idBase, instance]); 775 776 // Resize the iframe on either the load event, or when the iframe becomes visible. 777 const ref = (0,external_wp_compose_namespaceObject.useRefEffect)(iframe => { 778 // Only set height if the iframe is loaded, 779 // or it will grow to an unexpected large height in Safari if it's hidden initially. 780 if (!isLoaded) { 781 return; 782 } 783 // If the preview frame has another origin then this won't work. 784 // One possible solution is to add custom script to call `postMessage` in the preview frame. 785 // Or, better yet, we migrate away from iframe. 786 function setHeight() { 787 var _iframe$contentDocume, _iframe$contentDocume2; 788 // Pick the maximum of these two values to account for margin collapsing. 789 const height = Math.max((_iframe$contentDocume = iframe.contentDocument.documentElement?.offsetHeight) !== null && _iframe$contentDocume !== void 0 ? _iframe$contentDocume : 0, (_iframe$contentDocume2 = iframe.contentDocument.body?.offsetHeight) !== null && _iframe$contentDocume2 !== void 0 ? _iframe$contentDocume2 : 0); 790 791 // Fallback to a height of 100px if the height cannot be determined. 792 // This ensures the block is still selectable. 100px should hopefully 793 // be not so big that it's annoying, and not so small that nothing 794 // can be seen. 795 iframe.style.height = `$height !== 0 ? height : 100}px`; 796 } 797 const { 798 IntersectionObserver 799 } = iframe.ownerDocument.defaultView; 800 801 // Observe for intersections that might cause a change in the height of 802 // the iframe, e.g. a Widget Area becoming expanded. 803 const intersectionObserver = new IntersectionObserver(([entry]) => { 804 if (entry.isIntersecting) { 805 setHeight(); 806 } 807 }, { 808 threshold: 1 809 }); 810 intersectionObserver.observe(iframe); 811 iframe.addEventListener('load', setHeight); 812 return () => { 813 intersectionObserver.disconnect(); 814 iframe.removeEventListener('load', setHeight); 815 }; 816 }, [isLoaded]); 817 return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_ReactJSXRuntime_namespaceObject.Fragment, { 818 children: [isVisible && !isLoaded && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.Placeholder, { 819 children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.Spinner, {}) 820 }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)("div", { 821 className: dist_clsx('wp-block-legacy-widget__edit-preview', { 822 'is-offscreen': !isVisible || !isLoaded 823 }), 824 children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.Disabled, { 825 children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)("iframe", { 826 ref: ref, 827 className: "wp-block-legacy-widget__edit-preview-iframe", 828 tabIndex: "-1", 829 title: (0,external_wp_i18n_namespaceObject.__)('Legacy Widget Preview'), 830 srcDoc: srcDoc, 831 onLoad: event => { 832 // To hide the scrollbars of the preview frame for some edge cases, 833 // such as negative margins in the Gallery Legacy Widget. 834 // It can't be scrolled anyway. 835 // TODO: Ideally, this should be fixed in core. 836 event.target.contentDocument.body.style.overflow = 'hidden'; 837 setIsLoaded(true); 838 }, 839 height: 100 840 }) 841 }) 842 })] 843 }); 844 } 845 846 ;// CONCATENATED MODULE: ./node_modules/@wordpress/widgets/build-module/blocks/legacy-widget/edit/no-preview.js 847 /** 848 * WordPress dependencies 849 */ 850 851 852 853 function NoPreview({ 854 name 855 }) { 856 return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)("div", { 857 className: "wp-block-legacy-widget__edit-no-preview", 858 children: [name && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)("h3", { 859 children: name 860 }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)("p", { 861 children: (0,external_wp_i18n_namespaceObject.__)('No preview available.') 862 })] 863 }); 864 } 865 866 ;// CONCATENATED MODULE: ./node_modules/@wordpress/widgets/build-module/blocks/legacy-widget/edit/convert-to-blocks-button.js 867 /** 868 * WordPress dependencies 869 */ 870 871 872 873 874 875 876 function ConvertToBlocksButton({ 877 clientId, 878 rawInstance 879 }) { 880 const { 881 replaceBlocks 882 } = (0,external_wp_data_namespaceObject.useDispatch)(external_wp_blockEditor_namespaceObject.store); 883 return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.ToolbarButton, { 884 onClick: () => { 885 if (rawInstance.title) { 886 replaceBlocks(clientId, [(0,external_wp_blocks_namespaceObject.createBlock)('core/heading', { 887 content: rawInstance.title 888 }), ...(0,external_wp_blocks_namespaceObject.rawHandler)({ 889 HTML: rawInstance.text 890 })]); 891 } else { 892 replaceBlocks(clientId, (0,external_wp_blocks_namespaceObject.rawHandler)({ 893 HTML: rawInstance.text 894 })); 895 } 896 }, 897 children: (0,external_wp_i18n_namespaceObject.__)('Convert to blocks') 898 }); 899 } 900 901 ;// CONCATENATED MODULE: ./node_modules/@wordpress/widgets/build-module/blocks/legacy-widget/edit/index.js 902 /** 903 * External dependencies 904 */ 905 906 907 /** 908 * WordPress dependencies 909 */ 910 911 912 913 914 915 916 917 918 /** 919 * Internal dependencies 920 */ 921 922 923 924 925 926 927 928 929 930 function Edit(props) { 931 const { 932 id, 933 idBase 934 } = props.attributes; 935 const { 936 isWide = false 937 } = props; 938 const blockProps = (0,external_wp_blockEditor_namespaceObject.useBlockProps)({ 939 className: dist_clsx({ 940 'is-wide-widget': isWide 941 }) 942 }); 943 return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)("div", { 944 ...blockProps, 945 children: !id && !idBase ? /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(Empty, { 946 ...props 947 }) : /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(NotEmpty, { 948 ...props 949 }) 950 }); 951 } 952 function Empty({ 953 attributes: { 954 id, 955 idBase 956 }, 957 setAttributes 958 }) { 959 return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.Placeholder, { 960 icon: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_blockEditor_namespaceObject.BlockIcon, { 961 icon: library_brush 962 }), 963 label: (0,external_wp_i18n_namespaceObject.__)('Legacy Widget'), 964 children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.Flex, { 965 children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.FlexBlock, { 966 children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(WidgetTypeSelector, { 967 selectedId: id !== null && id !== void 0 ? id : idBase, 968 onSelect: ({ 969 selectedId, 970 isMulti 971 }) => { 972 if (!selectedId) { 973 setAttributes({ 974 id: null, 975 idBase: null, 976 instance: null 977 }); 978 } else if (isMulti) { 979 setAttributes({ 980 id: null, 981 idBase: selectedId, 982 instance: {} 983 }); 984 } else { 985 setAttributes({ 986 id: selectedId, 987 idBase: null, 988 instance: null 989 }); 990 } 991 } 992 }) 993 }) 994 }) 995 }); 996 } 997 function NotEmpty({ 998 attributes: { 999 id, 1000 idBase, 1001 instance 1002 }, 1003 setAttributes, 1004 clientId, 1005 isSelected, 1006 isWide = false 1007 }) { 1008 const [hasPreview, setHasPreview] = (0,external_wp_element_namespaceObject.useState)(null); 1009 const widgetTypeId = id !== null && id !== void 0 ? id : idBase; 1010 const { 1011 record: widgetType, 1012 hasResolved: hasResolvedWidgetType 1013 } = (0,external_wp_coreData_namespaceObject.useEntityRecord)('root', 'widgetType', widgetTypeId); 1014 const isNavigationMode = (0,external_wp_data_namespaceObject.useSelect)(select => select(external_wp_blockEditor_namespaceObject.store).isNavigationMode(), []); 1015 const setInstance = (0,external_wp_element_namespaceObject.useCallback)(nextInstance => { 1016 setAttributes({ 1017 instance: nextInstance 1018 }); 1019 }, []); 1020 if (!widgetType && hasResolvedWidgetType) { 1021 return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.Placeholder, { 1022 icon: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_blockEditor_namespaceObject.BlockIcon, { 1023 icon: library_brush 1024 }), 1025 label: (0,external_wp_i18n_namespaceObject.__)('Legacy Widget'), 1026 children: (0,external_wp_i18n_namespaceObject.__)('Widget is missing.') 1027 }); 1028 } 1029 if (!hasResolvedWidgetType) { 1030 return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.Placeholder, { 1031 children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.Spinner, {}) 1032 }); 1033 } 1034 const mode = idBase && (isNavigationMode || !isSelected) ? 'preview' : 'edit'; 1035 return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_ReactJSXRuntime_namespaceObject.Fragment, { 1036 children: [idBase === 'text' && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_blockEditor_namespaceObject.BlockControls, { 1037 group: "other", 1038 children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(ConvertToBlocksButton, { 1039 clientId: clientId, 1040 rawInstance: instance.raw 1041 }) 1042 }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_blockEditor_namespaceObject.InspectorControls, { 1043 children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(InspectorCard, { 1044 name: widgetType.name, 1045 description: widgetType.description 1046 }) 1047 }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(Form, { 1048 title: widgetType.name, 1049 isVisible: mode === 'edit', 1050 id: id, 1051 idBase: idBase, 1052 instance: instance, 1053 isWide: isWide, 1054 onChangeInstance: setInstance, 1055 onChangeHasPreview: setHasPreview 1056 }), idBase && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_ReactJSXRuntime_namespaceObject.Fragment, { 1057 children: [hasPreview === null && mode === 'preview' && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.Placeholder, { 1058 children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.Spinner, {}) 1059 }), hasPreview === true && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(Preview, { 1060 idBase: idBase, 1061 instance: instance, 1062 isVisible: mode === 'preview' 1063 }), hasPreview === false && mode === 'preview' && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(NoPreview, { 1064 name: widgetType.name 1065 })] 1066 })] 1067 }); 1068 } 1069 1070 ;// CONCATENATED MODULE: ./node_modules/@wordpress/widgets/build-module/blocks/legacy-widget/transforms.js 1071 /** 1072 * WordPress dependencies 1073 */ 1074 1075 const legacyWidgetTransforms = [{ 1076 block: 'core/calendar', 1077 widget: 'calendar' 1078 }, { 1079 block: 'core/search', 1080 widget: 'search' 1081 }, { 1082 block: 'core/html', 1083 widget: 'custom_html', 1084 transform: ({ 1085 content 1086 }) => ({ 1087 content 1088 }) 1089 }, { 1090 block: 'core/archives', 1091 widget: 'archives', 1092 transform: ({ 1093 count, 1094 dropdown 1095 }) => { 1096 return { 1097 displayAsDropdown: !!dropdown, 1098 showPostCounts: !!count 1099 }; 1100 } 1101 }, { 1102 block: 'core/latest-posts', 1103 widget: 'recent-posts', 1104 transform: ({ 1105 show_date: displayPostDate, 1106 number 1107 }) => { 1108 return { 1109 displayPostDate: !!displayPostDate, 1110 postsToShow: number 1111 }; 1112 } 1113 }, { 1114 block: 'core/latest-comments', 1115 widget: 'recent-comments', 1116 transform: ({ 1117 number 1118 }) => { 1119 return { 1120 commentsToShow: number 1121 }; 1122 } 1123 }, { 1124 block: 'core/tag-cloud', 1125 widget: 'tag_cloud', 1126 transform: ({ 1127 taxonomy, 1128 count 1129 }) => { 1130 return { 1131 showTagCounts: !!count, 1132 taxonomy 1133 }; 1134 } 1135 }, { 1136 block: 'core/categories', 1137 widget: 'categories', 1138 transform: ({ 1139 count, 1140 dropdown, 1141 hierarchical 1142 }) => { 1143 return { 1144 displayAsDropdown: !!dropdown, 1145 showPostCounts: !!count, 1146 showHierarchy: !!hierarchical 1147 }; 1148 } 1149 }, { 1150 block: 'core/audio', 1151 widget: 'media_audio', 1152 transform: ({ 1153 url, 1154 preload, 1155 loop, 1156 attachment_id: id 1157 }) => { 1158 return { 1159 src: url, 1160 id, 1161 preload, 1162 loop 1163 }; 1164 } 1165 }, { 1166 block: 'core/video', 1167 widget: 'media_video', 1168 transform: ({ 1169 url, 1170 preload, 1171 loop, 1172 attachment_id: id 1173 }) => { 1174 return { 1175 src: url, 1176 id, 1177 preload, 1178 loop 1179 }; 1180 } 1181 }, { 1182 block: 'core/image', 1183 widget: 'media_image', 1184 transform: ({ 1185 alt, 1186 attachment_id: id, 1187 caption, 1188 height, 1189 link_classes: linkClass, 1190 link_rel: rel, 1191 link_target_blank: targetBlack, 1192 link_type: linkDestination, 1193 link_url: link, 1194 size: sizeSlug, 1195 url, 1196 width 1197 }) => { 1198 return { 1199 alt, 1200 caption, 1201 height, 1202 id, 1203 link, 1204 linkClass, 1205 linkDestination, 1206 linkTarget: targetBlack ? '_blank' : undefined, 1207 rel, 1208 sizeSlug, 1209 url, 1210 width 1211 }; 1212 } 1213 }, { 1214 block: 'core/gallery', 1215 widget: 'media_gallery', 1216 transform: ({ 1217 ids, 1218 link_type: linkTo, 1219 size, 1220 number 1221 }) => { 1222 return { 1223 ids, 1224 columns: number, 1225 linkTo, 1226 sizeSlug: size, 1227 images: ids.map(id => ({ 1228 id 1229 })) 1230 }; 1231 } 1232 }, { 1233 block: 'core/rss', 1234 widget: 'rss', 1235 transform: ({ 1236 url, 1237 show_author: displayAuthor, 1238 show_date: displayDate, 1239 show_summary: displayExcerpt, 1240 items 1241 }) => { 1242 return { 1243 feedURL: url, 1244 displayAuthor: !!displayAuthor, 1245 displayDate: !!displayDate, 1246 displayExcerpt: !!displayExcerpt, 1247 itemsToShow: items 1248 }; 1249 } 1250 }].map(({ 1251 block, 1252 widget, 1253 transform 1254 }) => { 1255 return { 1256 type: 'block', 1257 blocks: [block], 1258 isMatch: ({ 1259 idBase, 1260 instance 1261 }) => { 1262 return idBase === widget && !!instance?.raw; 1263 }, 1264 transform: ({ 1265 instance 1266 }) => { 1267 const transformedBlock = (0,external_wp_blocks_namespaceObject.createBlock)(block, transform ? transform(instance.raw) : undefined); 1268 if (!instance.raw?.title) { 1269 return transformedBlock; 1270 } 1271 return [(0,external_wp_blocks_namespaceObject.createBlock)('core/heading', { 1272 content: instance.raw.title 1273 }), transformedBlock]; 1274 } 1275 }; 1276 }); 1277 const transforms = { 1278 to: legacyWidgetTransforms 1279 }; 1280 /* harmony default export */ const legacy_widget_transforms = (transforms); 1281 1282 ;// CONCATENATED MODULE: ./node_modules/@wordpress/widgets/build-module/blocks/legacy-widget/index.js 1283 /** 1284 * WordPress dependencies 1285 */ 1286 1287 1288 /** 1289 * Internal dependencies 1290 */ 1291 const metadata = { 1292 $schema: "https://schemas.wp.org/trunk/block.json", 1293 apiVersion: 3, 1294 name: "core/legacy-widget", 1295 title: "Legacy Widget", 1296 category: "widgets", 1297 description: "Display a legacy widget.", 1298 textdomain: "default", 1299 attributes: { 1300 id: { 1301 type: "string", 1302 "default": null 1303 }, 1304 idBase: { 1305 type: "string", 1306 "default": null 1307 }, 1308 instance: { 1309 type: "object", 1310 "default": null 1311 } 1312 }, 1313 supports: { 1314 html: false, 1315 customClassName: false, 1316 reusable: false 1317 }, 1318 editorStyle: "wp-block-legacy-widget-editor" 1319 }; 1320 1321 1322 const { 1323 name: legacy_widget_name 1324 } = metadata; 1325 1326 const settings = { 1327 icon: library_widget, 1328 edit: Edit, 1329 transforms: legacy_widget_transforms 1330 }; 1331 1332 ;// CONCATENATED MODULE: ./node_modules/@wordpress/icons/build-module/library/group.js 1333 /** 1334 * WordPress dependencies 1335 */ 1336 1337 1338 const group = /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_primitives_namespaceObject.SVG, { 1339 viewBox: "0 0 24 24", 1340 xmlns: "http://www.w3.org/2000/svg", 1341 children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_primitives_namespaceObject.Path, { 1342 d: "M18 4h-7c-1.1 0-2 .9-2 2v3H6c-1.1 0-2 .9-2 2v7c0 1.1.9 2 2 2h7c1.1 0 2-.9 2-2v-3h3c1.1 0 2-.9 2-2V6c0-1.1-.9-2-2-2zm-4.5 14c0 .3-.2.5-.5.5H6c-.3 0-.5-.2-.5-.5v-7c0-.3.2-.5.5-.5h3V13c0 1.1.9 2 2 2h2.5v3zm0-4.5H11c-.3 0-.5-.2-.5-.5v-2.5H13c.3 0 .5.2.5.5v2.5zm5-.5c0 .3-.2.5-.5.5h-3V11c0-1.1-.9-2-2-2h-2.5V6c0-.3.2-.5.5-.5h7c.3 0 .5.2.5.5v7z" 1343 }) 1344 }); 1345 /* harmony default export */ const library_group = (group); 1346 1347 ;// CONCATENATED MODULE: ./node_modules/@wordpress/widgets/build-module/blocks/widget-group/edit.js 1348 /** 1349 * WordPress dependencies 1350 */ 1351 1352 1353 1354 1355 1356 1357 1358 1359 function edit_Edit(props) { 1360 const { 1361 clientId 1362 } = props; 1363 const { 1364 innerBlocks 1365 } = (0,external_wp_data_namespaceObject.useSelect)(select => select(external_wp_blockEditor_namespaceObject.store).getBlock(clientId), [clientId]); 1366 return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)("div", { 1367 ...(0,external_wp_blockEditor_namespaceObject.useBlockProps)({ 1368 className: 'widget' 1369 }), 1370 children: innerBlocks.length === 0 ? /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(PlaceholderContent, { 1371 ...props 1372 }) : /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(PreviewContent, { 1373 ...props 1374 }) 1375 }); 1376 } 1377 function PlaceholderContent({ 1378 clientId 1379 }) { 1380 return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_ReactJSXRuntime_namespaceObject.Fragment, { 1381 children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.Placeholder, { 1382 className: "wp-block-widget-group__placeholder", 1383 icon: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_blockEditor_namespaceObject.BlockIcon, { 1384 icon: library_group 1385 }), 1386 label: (0,external_wp_i18n_namespaceObject.__)('Widget Group'), 1387 children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_blockEditor_namespaceObject.ButtonBlockAppender, { 1388 rootClientId: clientId 1389 }) 1390 }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_blockEditor_namespaceObject.InnerBlocks, { 1391 renderAppender: false 1392 })] 1393 }); 1394 } 1395 function PreviewContent({ 1396 attributes, 1397 setAttributes 1398 }) { 1399 var _attributes$title; 1400 return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_ReactJSXRuntime_namespaceObject.Fragment, { 1401 children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_blockEditor_namespaceObject.RichText, { 1402 tagName: "h2", 1403 identifier: "title", 1404 className: "widget-title", 1405 allowedFormats: [], 1406 placeholder: (0,external_wp_i18n_namespaceObject.__)('Title'), 1407 value: (_attributes$title = attributes.title) !== null && _attributes$title !== void 0 ? _attributes$title : '', 1408 onChange: title => setAttributes({ 1409 title 1410 }) 1411 }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_blockEditor_namespaceObject.InnerBlocks, {})] 1412 }); 1413 } 1414 1415 ;// CONCATENATED MODULE: ./node_modules/@wordpress/widgets/build-module/blocks/widget-group/save.js 1416 /** 1417 * WordPress dependencies 1418 */ 1419 1420 1421 1422 1423 function save({ 1424 attributes 1425 }) { 1426 return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_ReactJSXRuntime_namespaceObject.Fragment, { 1427 children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_blockEditor_namespaceObject.RichText.Content, { 1428 tagName: "h2", 1429 className: "widget-title", 1430 value: attributes.title 1431 }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)("div", { 1432 className: "wp-widget-group__inner-blocks", 1433 children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_blockEditor_namespaceObject.InnerBlocks.Content, {}) 1434 })] 1435 }); 1436 } 1437 1438 ;// CONCATENATED MODULE: ./node_modules/@wordpress/widgets/build-module/blocks/widget-group/deprecated.js 1439 /** 1440 * WordPress dependencies 1441 */ 1442 1443 1444 1445 1446 const v1 = { 1447 attributes: { 1448 title: { 1449 type: 'string' 1450 } 1451 }, 1452 supports: { 1453 html: false, 1454 inserter: true, 1455 customClassName: true, 1456 reusable: false 1457 }, 1458 save({ 1459 attributes 1460 }) { 1461 return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_ReactJSXRuntime_namespaceObject.Fragment, { 1462 children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_blockEditor_namespaceObject.RichText.Content, { 1463 tagName: "h2", 1464 className: "widget-title", 1465 value: attributes.title 1466 }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_blockEditor_namespaceObject.InnerBlocks.Content, {})] 1467 }); 1468 } 1469 }; 1470 /* harmony default export */ const deprecated = ([v1]); 1471 1472 ;// CONCATENATED MODULE: ./node_modules/@wordpress/widgets/build-module/blocks/widget-group/index.js 1473 /** 1474 * WordPress dependencies 1475 */ 1476 1477 1478 1479 1480 /** 1481 * Internal dependencies 1482 */ 1483 const widget_group_metadata = { 1484 $schema: "https://schemas.wp.org/trunk/block.json", 1485 apiVersion: 3, 1486 name: "core/widget-group", 1487 title: "Widget Group", 1488 category: "widgets", 1489 attributes: { 1490 title: { 1491 type: "string" 1492 } 1493 }, 1494 supports: { 1495 html: false, 1496 inserter: true, 1497 customClassName: true, 1498 reusable: false 1499 }, 1500 editorStyle: "wp-block-widget-group-editor", 1501 style: "wp-block-widget-group" 1502 }; 1503 1504 1505 1506 const { 1507 name: widget_group_name 1508 } = widget_group_metadata; 1509 1510 const widget_group_settings = { 1511 title: (0,external_wp_i18n_namespaceObject.__)('Widget Group'), 1512 description: (0,external_wp_i18n_namespaceObject.__)('Create a classic widget layout with a title that’s styled by your theme for your widget areas.'), 1513 icon: library_group, 1514 __experimentalLabel: ({ 1515 name: label 1516 }) => label, 1517 edit: edit_Edit, 1518 save: save, 1519 transforms: { 1520 from: [{ 1521 type: 'block', 1522 isMultiBlock: true, 1523 blocks: ['*'], 1524 isMatch(attributes, blocks) { 1525 // Avoid transforming existing `widget-group` blocks. 1526 return !blocks.some(block => block.name === 'core/widget-group'); 1527 }, 1528 __experimentalConvert(blocks) { 1529 // Put the selected blocks inside the new Widget Group's innerBlocks. 1530 let innerBlocks = [...blocks.map(block => { 1531 return (0,external_wp_blocks_namespaceObject.createBlock)(block.name, block.attributes, block.innerBlocks); 1532 })]; 1533 1534 // If the first block is a heading then assume this is intended 1535 // to be the Widget's "title". 1536 const firstHeadingBlock = innerBlocks[0].name === 'core/heading' ? innerBlocks[0] : null; 1537 1538 // Remove the first heading block as we're copying 1539 // it's content into the Widget Group's title attribute. 1540 innerBlocks = innerBlocks.filter(block => block !== firstHeadingBlock); 1541 return (0,external_wp_blocks_namespaceObject.createBlock)('core/widget-group', { 1542 ...(firstHeadingBlock && { 1543 title: firstHeadingBlock.attributes.content 1544 }) 1545 }, innerBlocks); 1546 } 1547 }] 1548 }, 1549 deprecated: deprecated 1550 }; 1551 1552 ;// CONCATENATED MODULE: ./node_modules/@wordpress/icons/build-module/library/move-to.js 1553 /** 1554 * WordPress dependencies 1555 */ 1556 1557 1558 const moveTo = /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_primitives_namespaceObject.SVG, { 1559 xmlns: "http://www.w3.org/2000/svg", 1560 viewBox: "0 0 24 24", 1561 children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_primitives_namespaceObject.Path, { 1562 d: "M19.75 9c0-1.257-.565-2.197-1.39-2.858-.797-.64-1.827-1.017-2.815-1.247-1.802-.42-3.703-.403-4.383-.396L11 4.5V6l.177-.001c.696-.006 2.416-.02 4.028.356.887.207 1.67.518 2.216.957.52.416.829.945.829 1.688 0 .592-.167.966-.407 1.23-.255.281-.656.508-1.236.674-1.19.34-2.82.346-4.607.346h-.077c-1.692 0-3.527 0-4.942.404-.732.209-1.424.545-1.935 1.108-.526.579-.796 1.33-.796 2.238 0 1.257.565 2.197 1.39 2.858.797.64 1.827 1.017 2.815 1.247 1.802.42 3.703.403 4.383.396L13 19.5h.714V22L18 18.5 13.714 15v3H13l-.177.001c-.696.006-2.416.02-4.028-.356-.887-.207-1.67-.518-2.216-.957-.52-.416-.829-.945-.829-1.688 0-.592.167-.966.407-1.23.255-.281.656-.508 1.237-.674 1.189-.34 2.819-.346 4.606-.346h.077c1.692 0 3.527 0 4.941-.404.732-.209 1.425-.545 1.936-1.108.526-.579.796-1.33.796-2.238z" 1563 }) 1564 }); 1565 /* harmony default export */ const move_to = (moveTo); 1566 1567 ;// CONCATENATED MODULE: ./node_modules/@wordpress/widgets/build-module/components/move-to-widget-area/index.js 1568 /** 1569 * WordPress dependencies 1570 */ 1571 1572 1573 1574 1575 function MoveToWidgetArea({ 1576 currentWidgetAreaId, 1577 widgetAreas, 1578 onSelect 1579 }) { 1580 return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.ToolbarGroup, { 1581 children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.ToolbarItem, { 1582 children: toggleProps => /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.DropdownMenu, { 1583 icon: move_to, 1584 label: (0,external_wp_i18n_namespaceObject.__)('Move to widget area'), 1585 toggleProps: toggleProps, 1586 children: ({ 1587 onClose 1588 }) => /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.MenuGroup, { 1589 label: (0,external_wp_i18n_namespaceObject.__)('Move to'), 1590 children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.MenuItemsChoice, { 1591 choices: widgetAreas.map(widgetArea => ({ 1592 value: widgetArea.id, 1593 label: widgetArea.name, 1594 info: widgetArea.description 1595 })), 1596 value: currentWidgetAreaId, 1597 onSelect: value => { 1598 onSelect(value); 1599 onClose(); 1600 } 1601 }) 1602 }) 1603 }) 1604 }) 1605 }); 1606 } 1607 1608 ;// CONCATENATED MODULE: ./node_modules/@wordpress/widgets/build-module/components/index.js 1609 1610 1611 ;// CONCATENATED MODULE: ./node_modules/@wordpress/widgets/build-module/utils.js 1612 // @ts-check 1613 1614 /** 1615 * Get the internal widget id from block. 1616 * 1617 * @typedef {Object} Attributes 1618 * @property {string} __internalWidgetId The internal widget id. 1619 * @typedef {Object} Block 1620 * @property {Attributes} attributes The attributes of the block. 1621 * 1622 * @param {Block} block The block. 1623 * @return {string} The internal widget id. 1624 */ 1625 function getWidgetIdFromBlock(block) { 1626 return block.attributes.__internalWidgetId; 1627 } 1628 1629 /** 1630 * Add internal widget id to block's attributes. 1631 * 1632 * @param {Block} block The block. 1633 * @param {string} widgetId The widget id. 1634 * @return {Block} The updated block. 1635 */ 1636 function addWidgetIdToBlock(block, widgetId) { 1637 return { 1638 ...block, 1639 attributes: { 1640 ...(block.attributes || {}), 1641 __internalWidgetId: widgetId 1642 } 1643 }; 1644 } 1645 1646 ;// CONCATENATED MODULE: ./node_modules/@wordpress/widgets/build-module/register-legacy-widget-variations.js 1647 /** 1648 * WordPress dependencies 1649 */ 1650 1651 1652 1653 function registerLegacyWidgetVariations(settings) { 1654 const unsubscribe = (0,external_wp_data_namespaceObject.subscribe)(() => { 1655 var _settings$widgetTypes; 1656 const hiddenIds = (_settings$widgetTypes = settings?.widgetTypesToHideFromLegacyWidgetBlock) !== null && _settings$widgetTypes !== void 0 ? _settings$widgetTypes : []; 1657 const widgetTypes = (0,external_wp_data_namespaceObject.select)(external_wp_coreData_namespaceObject.store).getWidgetTypes({ 1658 per_page: -1 1659 })?.filter(widgetType => !hiddenIds.includes(widgetType.id)); 1660 if (widgetTypes) { 1661 unsubscribe(); 1662 (0,external_wp_data_namespaceObject.dispatch)(external_wp_blocks_namespaceObject.store).addBlockVariations('core/legacy-widget', widgetTypes.map(widgetType => ({ 1663 name: widgetType.id, 1664 title: widgetType.name, 1665 description: widgetType.description, 1666 attributes: widgetType.is_multi ? { 1667 idBase: widgetType.id, 1668 instance: {} 1669 } : { 1670 id: widgetType.id 1671 } 1672 }))); 1673 } 1674 }); 1675 } 1676 1677 ;// CONCATENATED MODULE: ./node_modules/@wordpress/widgets/build-module/index.js 1678 /** 1679 * WordPress dependencies 1680 */ 1681 1682 1683 /** 1684 * Internal dependencies 1685 */ 1686 1687 1688 1689 1690 1691 /** 1692 * Registers the Legacy Widget block. 1693 * 1694 * Note that for the block to be useful, any scripts required by a widget must 1695 * be loaded into the page. 1696 * 1697 * @param {Object} supports Block support settings. 1698 * @see https://developer.wordpress.org/block-editor/how-to-guides/widgets/legacy-widget-block/ 1699 */ 1700 function registerLegacyWidgetBlock(supports = {}) { 1701 const { 1702 metadata, 1703 settings, 1704 name 1705 } = legacy_widget_namespaceObject; 1706 (0,external_wp_blocks_namespaceObject.registerBlockType)({ 1707 name, 1708 ...metadata 1709 }, { 1710 ...settings, 1711 supports: { 1712 ...settings.supports, 1713 ...supports 1714 } 1715 }); 1716 } 1717 1718 /** 1719 * Registers the Widget Group block. 1720 * 1721 * @param {Object} supports Block support settings. 1722 */ 1723 function registerWidgetGroupBlock(supports = {}) { 1724 const { 1725 metadata, 1726 settings, 1727 name 1728 } = widget_group_namespaceObject; 1729 (0,external_wp_blocks_namespaceObject.registerBlockType)({ 1730 name, 1731 ...metadata 1732 }, { 1733 ...settings, 1734 supports: { 1735 ...settings.supports, 1736 ...supports 1737 } 1738 }); 1739 } 1740 1741 1742 (window.wp = window.wp || {}).widgets = __webpack_exports__; 1743 /******/ })() 1744 ;
title
Description
Body
title
Description
Body
title
Description
Body
title
Body
Generated : Thu Nov 21 08:20:01 2024 | Cross-referenced by PHPXref |