[ 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/make namespace object */ 8 /******/ !function() { 9 /******/ // define __esModule on exports 10 /******/ __webpack_require__.r = function(exports) { 11 /******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) { 12 /******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' }); 13 /******/ } 14 /******/ Object.defineProperty(exports, '__esModule', { value: true }); 15 /******/ }; 16 /******/ }(); 17 /******/ 18 /************************************************************************/ 19 var __webpack_exports__ = {}; 20 // ESM COMPAT FLAG 21 __webpack_require__.r(__webpack_exports__); 22 23 ;// CONCATENATED MODULE: external ["wp","richText"] 24 var external_wp_richText_namespaceObject = window["wp"]["richText"]; 25 ;// CONCATENATED MODULE: external ["wp","element"] 26 var external_wp_element_namespaceObject = window["wp"]["element"]; 27 ;// CONCATENATED MODULE: external ["wp","i18n"] 28 var external_wp_i18n_namespaceObject = window["wp"]["i18n"]; 29 ;// CONCATENATED MODULE: external ["wp","blockEditor"] 30 var external_wp_blockEditor_namespaceObject = window["wp"]["blockEditor"]; 31 ;// CONCATENATED MODULE: external ["wp","primitives"] 32 var external_wp_primitives_namespaceObject = window["wp"]["primitives"]; 33 ;// CONCATENATED MODULE: ./node_modules/@wordpress/icons/build-module/library/format-bold.js 34 35 36 /** 37 * WordPress dependencies 38 */ 39 40 const formatBold = (0,external_wp_element_namespaceObject.createElement)(external_wp_primitives_namespaceObject.SVG, { 41 xmlns: "http://www.w3.org/2000/svg", 42 viewBox: "0 0 24 24" 43 }, (0,external_wp_element_namespaceObject.createElement)(external_wp_primitives_namespaceObject.Path, { 44 d: "M14.7 11.3c1-.6 1.5-1.6 1.5-3 0-2.3-1.3-3.4-4-3.4H7v14h5.8c1.4 0 2.5-.3 3.3-1 .8-.7 1.2-1.7 1.2-2.9.1-1.9-.8-3.1-2.6-3.7zm-5.1-4h2.3c.6 0 1.1.1 1.4.4.3.3.5.7.5 1.2s-.2 1-.5 1.2c-.3.3-.8.4-1.4.4H9.6V7.3zm4.6 9c-.4.3-1 .4-1.7.4H9.6v-3.9h2.9c.7 0 1.3.2 1.7.5.4.3.6.8.6 1.5s-.2 1.2-.6 1.5z" 45 })); 46 /* harmony default export */ var format_bold = (formatBold); 47 48 ;// CONCATENATED MODULE: ./node_modules/@wordpress/format-library/build-module/bold/index.js 49 50 51 /** 52 * WordPress dependencies 53 */ 54 55 56 57 58 const bold_name = 'core/bold'; 59 60 const title = (0,external_wp_i18n_namespaceObject.__)('Bold'); 61 62 const bold = { 63 name: bold_name, 64 title, 65 tagName: 'strong', 66 className: null, 67 68 edit(_ref) { 69 let { 70 isActive, 71 value, 72 onChange, 73 onFocus 74 } = _ref; 75 76 function onToggle() { 77 onChange((0,external_wp_richText_namespaceObject.toggleFormat)(value, { 78 type: bold_name, 79 title 80 })); 81 } 82 83 function onClick() { 84 onChange((0,external_wp_richText_namespaceObject.toggleFormat)(value, { 85 type: bold_name 86 })); 87 onFocus(); 88 } 89 90 return (0,external_wp_element_namespaceObject.createElement)(external_wp_element_namespaceObject.Fragment, null, (0,external_wp_element_namespaceObject.createElement)(external_wp_blockEditor_namespaceObject.RichTextShortcut, { 91 type: "primary", 92 character: "b", 93 onUse: onToggle 94 }), (0,external_wp_element_namespaceObject.createElement)(external_wp_blockEditor_namespaceObject.RichTextToolbarButton, { 95 name: "bold", 96 icon: format_bold, 97 title: title, 98 onClick: onClick, 99 isActive: isActive, 100 shortcutType: "primary", 101 shortcutCharacter: "b" 102 }), (0,external_wp_element_namespaceObject.createElement)(external_wp_blockEditor_namespaceObject.__unstableRichTextInputEvent, { 103 inputType: "formatBold", 104 onInput: onToggle 105 })); 106 } 107 108 }; 109 110 ;// CONCATENATED MODULE: ./node_modules/@wordpress/icons/build-module/library/code.js 111 112 113 /** 114 * WordPress dependencies 115 */ 116 117 const code = (0,external_wp_element_namespaceObject.createElement)(external_wp_primitives_namespaceObject.SVG, { 118 viewBox: "0 0 24 24", 119 xmlns: "http://www.w3.org/2000/svg" 120 }, (0,external_wp_element_namespaceObject.createElement)(external_wp_primitives_namespaceObject.Path, { 121 d: "M20.8 10.7l-4.3-4.3-1.1 1.1 4.3 4.3c.1.1.1.3 0 .4l-4.3 4.3 1.1 1.1 4.3-4.3c.7-.8.7-1.9 0-2.6zM4.2 11.8l4.3-4.3-1-1-4.3 4.3c-.7.7-.7 1.8 0 2.5l4.3 4.3 1.1-1.1-4.3-4.3c-.2-.1-.2-.3-.1-.4z" 122 })); 123 /* harmony default export */ var library_code = (code); 124 125 ;// CONCATENATED MODULE: ./node_modules/@wordpress/format-library/build-module/code/index.js 126 127 128 /** 129 * WordPress dependencies 130 */ 131 132 133 134 135 const code_name = 'core/code'; 136 137 const code_title = (0,external_wp_i18n_namespaceObject.__)('Inline code'); 138 139 const code_code = { 140 name: code_name, 141 title: code_title, 142 tagName: 'code', 143 className: null, 144 145 __unstableInputRule(value) { 146 const BACKTICK = '`'; 147 const { 148 start, 149 text 150 } = value; 151 const characterBefore = text.slice(start - 1, start); // Quick check the text for the necessary character. 152 153 if (characterBefore !== BACKTICK) { 154 return value; 155 } 156 157 const textBefore = text.slice(0, start - 1); 158 const indexBefore = textBefore.lastIndexOf(BACKTICK); 159 160 if (indexBefore === -1) { 161 return value; 162 } 163 164 const startIndex = indexBefore; 165 const endIndex = start - 2; 166 167 if (startIndex === endIndex) { 168 return value; 169 } 170 171 value = (0,external_wp_richText_namespaceObject.remove)(value, startIndex, startIndex + 1); 172 value = (0,external_wp_richText_namespaceObject.remove)(value, endIndex, endIndex + 1); 173 value = (0,external_wp_richText_namespaceObject.applyFormat)(value, { 174 type: code_name 175 }, startIndex, endIndex); 176 return value; 177 }, 178 179 edit(_ref) { 180 let { 181 value, 182 onChange, 183 onFocus, 184 isActive 185 } = _ref; 186 187 function onClick() { 188 onChange((0,external_wp_richText_namespaceObject.toggleFormat)(value, { 189 type: code_name, 190 title: code_title 191 })); 192 onFocus(); 193 } 194 195 return (0,external_wp_element_namespaceObject.createElement)(external_wp_blockEditor_namespaceObject.RichTextToolbarButton, { 196 icon: library_code, 197 title: code_title, 198 onClick: onClick, 199 isActive: isActive, 200 role: "menuitemcheckbox" 201 }); 202 } 203 204 }; 205 206 ;// CONCATENATED MODULE: external ["wp","components"] 207 var external_wp_components_namespaceObject = window["wp"]["components"]; 208 ;// CONCATENATED MODULE: ./node_modules/@wordpress/icons/build-module/library/keyboard-return.js 209 210 211 /** 212 * WordPress dependencies 213 */ 214 215 const keyboardReturn = (0,external_wp_element_namespaceObject.createElement)(external_wp_primitives_namespaceObject.SVG, { 216 xmlns: "http://www.w3.org/2000/svg", 217 viewBox: "-2 -2 24 24" 218 }, (0,external_wp_element_namespaceObject.createElement)(external_wp_primitives_namespaceObject.Path, { 219 d: "M6.734 16.106l2.176-2.38-1.093-1.028-3.846 4.158 3.846 4.157 1.093-1.027-2.176-2.38h2.811c1.125 0 2.25.03 3.374 0 1.428-.001 3.362-.25 4.963-1.277 1.66-1.065 2.868-2.906 2.868-5.859 0-2.479-1.327-4.896-3.65-5.93-1.82-.813-3.044-.8-4.806-.788l-.567.002v1.5c.184 0 .368 0 .553-.002 1.82-.007 2.704-.014 4.21.657 1.854.827 2.76 2.657 2.76 4.561 0 2.472-.973 3.824-2.178 4.596-1.258.807-2.864 1.04-4.163 1.04h-.02c-1.115.03-2.229 0-3.344 0H6.734z" 220 })); 221 /* harmony default export */ var keyboard_return = (keyboardReturn); 222 223 ;// CONCATENATED MODULE: ./node_modules/@wordpress/format-library/build-module/image/index.js 224 225 226 /** 227 * WordPress dependencies 228 */ 229 230 231 232 233 234 235 const ALLOWED_MEDIA_TYPES = ['image']; 236 const image_name = 'core/image'; 237 238 const image_title = (0,external_wp_i18n_namespaceObject.__)('Inline image'); 239 240 const image_image = { 241 name: image_name, 242 title: image_title, 243 keywords: [(0,external_wp_i18n_namespaceObject.__)('photo'), (0,external_wp_i18n_namespaceObject.__)('media')], 244 object: true, 245 tagName: 'img', 246 className: null, 247 attributes: { 248 className: 'class', 249 style: 'style', 250 url: 'src', 251 alt: 'alt' 252 }, 253 edit: Edit 254 }; 255 256 function InlineUI(_ref) { 257 let { 258 value, 259 onChange, 260 activeObjectAttributes, 261 contentRef 262 } = _ref; 263 const { 264 style 265 } = activeObjectAttributes; 266 const [width, setWidth] = (0,external_wp_element_namespaceObject.useState)(style === null || style === void 0 ? void 0 : style.replace(/\D/g, '')); 267 const anchorRef = (0,external_wp_richText_namespaceObject.useAnchorRef)({ 268 ref: contentRef, 269 value, 270 settings: image_image 271 }); 272 return (0,external_wp_element_namespaceObject.createElement)(external_wp_components_namespaceObject.Popover, { 273 position: "bottom center", 274 focusOnMount: false, 275 anchorRef: anchorRef, 276 className: "block-editor-format-toolbar__image-popover" 277 }, (0,external_wp_element_namespaceObject.createElement)("form", { 278 className: "block-editor-format-toolbar__image-container-content", 279 onSubmit: event => { 280 const newReplacements = value.replacements.slice(); 281 newReplacements[value.start] = { 282 type: image_name, 283 attributes: { ...activeObjectAttributes, 284 style: width ? `width: $width}px;` : '' 285 } 286 }; 287 onChange({ ...value, 288 replacements: newReplacements 289 }); 290 event.preventDefault(); 291 } 292 }, (0,external_wp_element_namespaceObject.createElement)(external_wp_components_namespaceObject.TextControl, { 293 className: "block-editor-format-toolbar__image-container-value", 294 type: "number", 295 label: (0,external_wp_i18n_namespaceObject.__)('Width'), 296 value: width, 297 min: 1, 298 onChange: newWidth => setWidth(newWidth) 299 }), (0,external_wp_element_namespaceObject.createElement)(external_wp_components_namespaceObject.Button, { 300 icon: keyboard_return, 301 label: (0,external_wp_i18n_namespaceObject.__)('Apply'), 302 type: "submit" 303 }))); 304 } 305 306 function Edit(_ref2) { 307 let { 308 value, 309 onChange, 310 onFocus, 311 isObjectActive, 312 activeObjectAttributes, 313 contentRef 314 } = _ref2; 315 const [isModalOpen, setIsModalOpen] = (0,external_wp_element_namespaceObject.useState)(false); 316 317 function openModal() { 318 setIsModalOpen(true); 319 } 320 321 function closeModal() { 322 setIsModalOpen(false); 323 } 324 325 return (0,external_wp_element_namespaceObject.createElement)(external_wp_blockEditor_namespaceObject.MediaUploadCheck, null, (0,external_wp_element_namespaceObject.createElement)(external_wp_blockEditor_namespaceObject.RichTextToolbarButton, { 326 icon: (0,external_wp_element_namespaceObject.createElement)(external_wp_components_namespaceObject.SVG, { 327 xmlns: "http://www.w3.org/2000/svg", 328 viewBox: "0 0 24 24" 329 }, (0,external_wp_element_namespaceObject.createElement)(external_wp_components_namespaceObject.Path, { 330 d: "M4 18.5h16V17H4v1.5zM16 13v1.5h4V13h-4zM5.1 15h7.8c.6 0 1.1-.5 1.1-1.1V6.1c0-.6-.5-1.1-1.1-1.1H5.1C4.5 5 4 5.5 4 6.1v7.8c0 .6.5 1.1 1.1 1.1zm.4-8.5h7V10l-1-1c-.3-.3-.8-.3-1 0l-1.6 1.5-1.2-.7c-.3-.2-.6-.2-.9 0l-1.3 1V6.5zm0 6.1l1.8-1.3 1.3.8c.3.2.7.2.9-.1l1.5-1.4 1.5 1.4v1.5h-7v-.9z" 331 })), 332 title: image_title, 333 onClick: openModal, 334 isActive: isObjectActive 335 }), isModalOpen && (0,external_wp_element_namespaceObject.createElement)(external_wp_blockEditor_namespaceObject.MediaUpload, { 336 allowedTypes: ALLOWED_MEDIA_TYPES, 337 onSelect: _ref3 => { 338 let { 339 id, 340 url, 341 alt, 342 width: imgWidth 343 } = _ref3; 344 closeModal(); 345 onChange((0,external_wp_richText_namespaceObject.insertObject)(value, { 346 type: image_name, 347 attributes: { 348 className: `wp-image-$id}`, 349 style: `width: $Math.min(imgWidth, 150)}px;`, 350 url, 351 alt 352 } 353 })); 354 onFocus(); 355 }, 356 onClose: closeModal, 357 render: _ref4 => { 358 let { 359 open 360 } = _ref4; 361 open(); 362 return null; 363 } 364 }), isObjectActive && (0,external_wp_element_namespaceObject.createElement)(InlineUI, { 365 value: value, 366 onChange: onChange, 367 activeObjectAttributes: activeObjectAttributes, 368 contentRef: contentRef 369 })); 370 } 371 372 ;// CONCATENATED MODULE: ./node_modules/@wordpress/icons/build-module/library/format-italic.js 373 374 375 /** 376 * WordPress dependencies 377 */ 378 379 const formatItalic = (0,external_wp_element_namespaceObject.createElement)(external_wp_primitives_namespaceObject.SVG, { 380 xmlns: "http://www.w3.org/2000/svg", 381 viewBox: "0 0 24 24" 382 }, (0,external_wp_element_namespaceObject.createElement)(external_wp_primitives_namespaceObject.Path, { 383 d: "M12.5 5L10 19h1.9l2.5-14z" 384 })); 385 /* harmony default export */ var format_italic = (formatItalic); 386 387 ;// CONCATENATED MODULE: ./node_modules/@wordpress/format-library/build-module/italic/index.js 388 389 390 /** 391 * WordPress dependencies 392 */ 393 394 395 396 397 const italic_name = 'core/italic'; 398 399 const italic_title = (0,external_wp_i18n_namespaceObject.__)('Italic'); 400 401 const italic = { 402 name: italic_name, 403 title: italic_title, 404 tagName: 'em', 405 className: null, 406 407 edit(_ref) { 408 let { 409 isActive, 410 value, 411 onChange, 412 onFocus 413 } = _ref; 414 415 function onToggle() { 416 onChange((0,external_wp_richText_namespaceObject.toggleFormat)(value, { 417 type: italic_name, 418 title: italic_title 419 })); 420 } 421 422 function onClick() { 423 onChange((0,external_wp_richText_namespaceObject.toggleFormat)(value, { 424 type: italic_name 425 })); 426 onFocus(); 427 } 428 429 return (0,external_wp_element_namespaceObject.createElement)(external_wp_element_namespaceObject.Fragment, null, (0,external_wp_element_namespaceObject.createElement)(external_wp_blockEditor_namespaceObject.RichTextShortcut, { 430 type: "primary", 431 character: "i", 432 onUse: onToggle 433 }), (0,external_wp_element_namespaceObject.createElement)(external_wp_blockEditor_namespaceObject.RichTextToolbarButton, { 434 name: "italic", 435 icon: format_italic, 436 title: italic_title, 437 onClick: onClick, 438 isActive: isActive, 439 shortcutType: "primary", 440 shortcutCharacter: "i" 441 }), (0,external_wp_element_namespaceObject.createElement)(external_wp_blockEditor_namespaceObject.__unstableRichTextInputEvent, { 442 inputType: "formatItalic", 443 onInput: onToggle 444 })); 445 } 446 447 }; 448 449 ;// CONCATENATED MODULE: external ["wp","url"] 450 var external_wp_url_namespaceObject = window["wp"]["url"]; 451 ;// CONCATENATED MODULE: external ["wp","htmlEntities"] 452 var external_wp_htmlEntities_namespaceObject = window["wp"]["htmlEntities"]; 453 ;// CONCATENATED MODULE: ./node_modules/@wordpress/icons/build-module/library/link-off.js 454 455 456 /** 457 * WordPress dependencies 458 */ 459 460 const linkOff = (0,external_wp_element_namespaceObject.createElement)(external_wp_primitives_namespaceObject.SVG, { 461 xmlns: "http://www.w3.org/2000/svg", 462 viewBox: "0 0 24 24" 463 }, (0,external_wp_element_namespaceObject.createElement)(external_wp_primitives_namespaceObject.Path, { 464 d: "M15.6 7.3h-.7l1.6-3.5-.9-.4-3.9 8.5H9v1.5h2l-1.3 2.8H8.4c-2 0-3.7-1.7-3.7-3.7s1.7-3.7 3.7-3.7H10V7.3H8.4c-2.9 0-5.2 2.3-5.2 5.2 0 2.9 2.3 5.2 5.2 5.2H9l-1.4 3.2.9.4 5.7-12.5h1.4c2 0 3.7 1.7 3.7 3.7s-1.7 3.7-3.7 3.7H14v1.5h1.6c2.9 0 5.2-2.3 5.2-5.2 0-2.9-2.4-5.2-5.2-5.2z" 465 })); 466 /* harmony default export */ var link_off = (linkOff); 467 468 ;// CONCATENATED MODULE: ./node_modules/@wordpress/icons/build-module/library/link.js 469 470 471 /** 472 * WordPress dependencies 473 */ 474 475 const link_link = (0,external_wp_element_namespaceObject.createElement)(external_wp_primitives_namespaceObject.SVG, { 476 xmlns: "http://www.w3.org/2000/svg", 477 viewBox: "0 0 24 24" 478 }, (0,external_wp_element_namespaceObject.createElement)(external_wp_primitives_namespaceObject.Path, { 479 d: "M15.6 7.2H14v1.5h1.6c2 0 3.7 1.7 3.7 3.7s-1.7 3.7-3.7 3.7H14v1.5h1.6c2.8 0 5.2-2.3 5.2-5.2 0-2.9-2.3-5.2-5.2-5.2zM4.7 12.4c0-2 1.7-3.7 3.7-3.7H10V7.2H8.4c-2.9 0-5.2 2.3-5.2 5.2 0 2.9 2.3 5.2 5.2 5.2H10v-1.5H8.4c-2 0-3.7-1.7-3.7-3.7zm4.6.9h5.3v-1.5H9.3v1.5z" 480 })); 481 /* harmony default export */ var library_link = (link_link); 482 483 ;// CONCATENATED MODULE: external ["wp","a11y"] 484 var external_wp_a11y_namespaceObject = window["wp"]["a11y"]; 485 ;// CONCATENATED MODULE: external ["wp","data"] 486 var external_wp_data_namespaceObject = window["wp"]["data"]; 487 ;// CONCATENATED MODULE: external "lodash" 488 var external_lodash_namespaceObject = window["lodash"]; 489 ;// CONCATENATED MODULE: ./node_modules/@wordpress/format-library/build-module/link/utils.js 490 /** 491 * External dependencies 492 */ 493 494 /** 495 * WordPress dependencies 496 */ 497 498 499 /** 500 * Check for issues with the provided href. 501 * 502 * @param {string} href The href. 503 * 504 * @return {boolean} Is the href invalid? 505 */ 506 507 function isValidHref(href) { 508 if (!href) { 509 return false; 510 } 511 512 const trimmedHref = href.trim(); 513 514 if (!trimmedHref) { 515 return false; 516 } // Does the href start with something that looks like a URL protocol? 517 518 519 if (/^\S+:/.test(trimmedHref)) { 520 const protocol = (0,external_wp_url_namespaceObject.getProtocol)(trimmedHref); 521 522 if (!(0,external_wp_url_namespaceObject.isValidProtocol)(protocol)) { 523 return false; 524 } // Add some extra checks for http(s) URIs, since these are the most common use-case. 525 // This ensures URIs with an http protocol have exactly two forward slashes following the protocol. 526 527 528 if ((0,external_lodash_namespaceObject.startsWith)(protocol, 'http') && !/^https?:\/\/[^\/\s]/i.test(trimmedHref)) { 529 return false; 530 } 531 532 const authority = (0,external_wp_url_namespaceObject.getAuthority)(trimmedHref); 533 534 if (!(0,external_wp_url_namespaceObject.isValidAuthority)(authority)) { 535 return false; 536 } 537 538 const path = (0,external_wp_url_namespaceObject.getPath)(trimmedHref); 539 540 if (path && !(0,external_wp_url_namespaceObject.isValidPath)(path)) { 541 return false; 542 } 543 544 const queryString = (0,external_wp_url_namespaceObject.getQueryString)(trimmedHref); 545 546 if (queryString && !(0,external_wp_url_namespaceObject.isValidQueryString)(queryString)) { 547 return false; 548 } 549 550 const fragment = (0,external_wp_url_namespaceObject.getFragment)(trimmedHref); 551 552 if (fragment && !(0,external_wp_url_namespaceObject.isValidFragment)(fragment)) { 553 return false; 554 } 555 } // Validate anchor links. 556 557 558 if ((0,external_lodash_namespaceObject.startsWith)(trimmedHref, '#') && !(0,external_wp_url_namespaceObject.isValidFragment)(trimmedHref)) { 559 return false; 560 } 561 562 return true; 563 } 564 /** 565 * Generates the format object that will be applied to the link text. 566 * 567 * @param {Object} options 568 * @param {string} options.url The href of the link. 569 * @param {string} options.type The type of the link. 570 * @param {string} options.id The ID of the link. 571 * @param {boolean} options.opensInNewWindow Whether this link will open in a new window. 572 * 573 * @return {Object} The final format object. 574 */ 575 576 function createLinkFormat(_ref) { 577 let { 578 url, 579 type, 580 id, 581 opensInNewWindow 582 } = _ref; 583 const format = { 584 type: 'core/link', 585 attributes: { 586 url 587 } 588 }; 589 if (type) format.attributes.type = type; 590 if (id) format.attributes.id = id; 591 592 if (opensInNewWindow) { 593 format.attributes.target = '_blank'; 594 format.attributes.rel = 'noreferrer noopener'; 595 } 596 597 return format; 598 } 599 /* eslint-disable jsdoc/no-undefined-types */ 600 601 /** 602 * Get the start and end boundaries of a given format from a rich text value. 603 * 604 * 605 * @param {RichTextValue} value the rich text value to interrogate. 606 * @param {string} format the identifier for the target format (e.g. `core/link`, `core/bold`). 607 * @param {number?} startIndex optional startIndex to seek from. 608 * @param {number?} endIndex optional endIndex to seek from. 609 * @return {Object} object containing start and end values for the given format. 610 */ 611 612 /* eslint-enable jsdoc/no-undefined-types */ 613 614 function getFormatBoundary(value, format) { 615 let startIndex = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : value.start; 616 let endIndex = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : value.end; 617 const EMPTY_BOUNDARIES = { 618 start: null, 619 end: null 620 }; 621 const { 622 formats 623 } = value; 624 let targetFormat; 625 let initialIndex; 626 627 if (!(formats !== null && formats !== void 0 && formats.length)) { 628 return EMPTY_BOUNDARIES; 629 } // Clone formats to avoid modifying source formats. 630 631 632 const newFormats = formats.slice(); 633 const formatAtStart = (0,external_lodash_namespaceObject.find)(newFormats[startIndex], { 634 type: format.type 635 }); 636 const formatAtEnd = (0,external_lodash_namespaceObject.find)(newFormats[endIndex], { 637 type: format.type 638 }); 639 const formatAtEndMinusOne = (0,external_lodash_namespaceObject.find)(newFormats[endIndex - 1], { 640 type: format.type 641 }); 642 643 if (!!formatAtStart) { 644 // Set values to conform to "start" 645 targetFormat = formatAtStart; 646 initialIndex = startIndex; 647 } else if (!!formatAtEnd) { 648 // Set values to conform to "end" 649 targetFormat = formatAtEnd; 650 initialIndex = endIndex; 651 } else if (!!formatAtEndMinusOne) { 652 // This is an edge case which will occur if you create a format, then place 653 // the caret just before the format and hit the back ARROW key. The resulting 654 // value object will have start and end +1 beyond the edge of the format boundary. 655 targetFormat = formatAtEndMinusOne; 656 initialIndex = endIndex - 1; 657 } else { 658 return EMPTY_BOUNDARIES; 659 } 660 661 const index = newFormats[initialIndex].indexOf(targetFormat); 662 const walkingArgs = [newFormats, initialIndex, targetFormat, index]; // Walk the startIndex "backwards" to the leading "edge" of the matching format. 663 664 startIndex = walkToStart(...walkingArgs); // Walk the endIndex "forwards" until the trailing "edge" of the matching format. 665 666 endIndex = walkToEnd(...walkingArgs); // Safe guard: start index cannot be less than 0. 667 668 startIndex = startIndex < 0 ? 0 : startIndex; // // Return the indicies of the "edges" as the boundaries. 669 670 return { 671 start: startIndex, 672 end: endIndex 673 }; 674 } 675 /** 676 * Walks forwards/backwards towards the boundary of a given format within an 677 * array of format objects. Returns the index of the boundary. 678 * 679 * @param {Array} formats the formats to search for the given format type. 680 * @param {number} initialIndex the starting index from which to walk. 681 * @param {Object} targetFormatRef a reference to the format type object being sought. 682 * @param {number} formatIndex the index at which we expect the target format object to be. 683 * @param {string} direction either 'forwards' or 'backwards' to indicate the direction. 684 * @return {number} the index of the boundary of the given format. 685 */ 686 687 function walkToBoundary(formats, initialIndex, targetFormatRef, formatIndex, direction) { 688 let index = initialIndex; 689 const directions = { 690 forwards: 1, 691 backwards: -1 692 }; 693 const directionIncrement = directions[direction] || 1; // invalid direction arg default to forwards 694 695 const inverseDirectionIncrement = directionIncrement * -1; 696 697 while (formats[index] && formats[index][formatIndex] === targetFormatRef) { 698 // Increment/decrement in the direction of operation. 699 index = index + directionIncrement; 700 } // Restore by one in inverse direction of operation 701 // to avoid out of bounds. 702 703 704 index = index + inverseDirectionIncrement; 705 return index; 706 } 707 708 const walkToStart = (0,external_lodash_namespaceObject.partialRight)(walkToBoundary, 'backwards'); 709 const walkToEnd = (0,external_lodash_namespaceObject.partialRight)(walkToBoundary, 'forwards'); 710 711 ;// CONCATENATED MODULE: ./node_modules/@wordpress/format-library/build-module/link/use-link-instance-key.js 712 // Weakly referenced map allows unused ids to be garbage collected. 713 const weakMap = new WeakMap(); // Incrementing zero-based ID value. 714 715 let id = -1; 716 const prefix = 'link-control-instance'; 717 718 function getKey(_id) { 719 return `$prefix}-$_id}`; 720 } 721 /** 722 * Builds a unique link control key for the given object reference. 723 * 724 * @param {Object} instance an unique object reference specific to this link control instance. 725 * @return {string} the unique key to use for this link control. 726 */ 727 728 729 function useLinkInstanceKey(instance) { 730 if (!instance) { 731 return; 732 } 733 734 if (weakMap.has(instance)) { 735 return getKey(weakMap.get(instance)); 736 } 737 738 id += 1; 739 weakMap.set(instance, id); 740 return getKey(id); 741 } 742 743 /* harmony default export */ var use_link_instance_key = (useLinkInstanceKey); 744 745 ;// CONCATENATED MODULE: ./node_modules/@wordpress/format-library/build-module/link/inline.js 746 747 748 /** 749 * WordPress dependencies 750 */ 751 752 753 754 755 756 757 758 /** 759 * Internal dependencies 760 */ 761 762 763 764 765 766 function InlineLinkUI(_ref) { 767 let { 768 isActive, 769 activeAttributes, 770 addingLink, 771 value, 772 onChange, 773 speak, 774 stopAddingLink, 775 contentRef 776 } = _ref; 777 const richLinkTextValue = getRichTextValueFromSelection(value, isActive); // Get the text content minus any HTML tags. 778 779 const richTextText = richLinkTextValue.text; 780 /** 781 * Pending settings to be applied to the next link. When inserting a new 782 * link, toggle values cannot be applied immediately, because there is not 783 * yet a link for them to apply to. Thus, they are maintained in a state 784 * value until the time that the link can be inserted or edited. 785 * 786 * @type {[Object|undefined,Function]} 787 */ 788 789 const [nextLinkValue, setNextLinkValue] = (0,external_wp_element_namespaceObject.useState)(); 790 const { 791 createPageEntity, 792 userCanCreatePages 793 } = (0,external_wp_data_namespaceObject.useSelect)(select => { 794 const { 795 getSettings 796 } = select(external_wp_blockEditor_namespaceObject.store); 797 798 const _settings = getSettings(); 799 800 return { 801 createPageEntity: _settings.__experimentalCreatePageEntity, 802 userCanCreatePages: _settings.__experimentalUserCanCreatePages 803 }; 804 }, []); 805 const linkValue = { 806 url: activeAttributes.url, 807 type: activeAttributes.type, 808 id: activeAttributes.id, 809 opensInNewTab: activeAttributes.target === '_blank', 810 title: richTextText, 811 ...nextLinkValue 812 }; 813 814 function removeLink() { 815 const newValue = (0,external_wp_richText_namespaceObject.removeFormat)(value, 'core/link'); 816 onChange(newValue); 817 stopAddingLink(); 818 speak((0,external_wp_i18n_namespaceObject.__)('Link removed.'), 'assertive'); 819 } 820 821 function onChangeLink(nextValue) { 822 // Merge with values from state, both for the purpose of assigning the 823 // next state value, and for use in constructing the new link format if 824 // the link is ready to be applied. 825 nextValue = { ...nextLinkValue, 826 ...nextValue 827 }; // LinkControl calls `onChange` immediately upon the toggling a setting. 828 829 const didToggleSetting = linkValue.opensInNewTab !== nextValue.opensInNewTab && linkValue.url === nextValue.url; // If change handler was called as a result of a settings change during 830 // link insertion, it must be held in state until the link is ready to 831 // be applied. 832 833 const didToggleSettingForNewLink = didToggleSetting && nextValue.url === undefined; // If link will be assigned, the state value can be considered flushed. 834 // Otherwise, persist the pending changes. 835 836 setNextLinkValue(didToggleSettingForNewLink ? nextValue : undefined); 837 838 if (didToggleSettingForNewLink) { 839 return; 840 } 841 842 const newUrl = (0,external_wp_url_namespaceObject.prependHTTP)(nextValue.url); 843 const linkFormat = createLinkFormat({ 844 url: newUrl, 845 type: nextValue.type, 846 id: nextValue.id !== undefined && nextValue.id !== null ? String(nextValue.id) : undefined, 847 opensInNewWindow: nextValue.opensInNewTab 848 }); 849 const newText = nextValue.title || newUrl; 850 851 if ((0,external_wp_richText_namespaceObject.isCollapsed)(value) && !isActive) { 852 // Scenario: we don't have any actively selected text or formats. 853 const toInsert = (0,external_wp_richText_namespaceObject.applyFormat)((0,external_wp_richText_namespaceObject.create)({ 854 text: newText 855 }), linkFormat, 0, newText.length); 856 onChange((0,external_wp_richText_namespaceObject.insert)(value, toInsert)); 857 } else { 858 // Scenario: we have any active text selection or an active format. 859 let newValue; 860 861 if (newText === richTextText) { 862 // If we're not updating the text then ignore. 863 newValue = (0,external_wp_richText_namespaceObject.applyFormat)(value, linkFormat); 864 } else { 865 // Create new RichText value for the new text in order that we 866 // can apply formats to it. 867 newValue = (0,external_wp_richText_namespaceObject.create)({ 868 text: newText 869 }); // Apply the new Link format to this new text value. 870 871 newValue = (0,external_wp_richText_namespaceObject.applyFormat)(newValue, linkFormat, 0, newText.length); // Update the original (full) RichTextValue replacing the 872 // target text with the *new* RichTextValue containing: 873 // 1. The new text content. 874 // 2. The new link format. 875 // Note original formats will be lost when applying this change. 876 // That is expected behaviour. 877 // See: https://github.com/WordPress/gutenberg/pull/33849#issuecomment-936134179. 878 879 newValue = (0,external_wp_richText_namespaceObject.replace)(value, richTextText, newValue); 880 } 881 882 newValue.start = newValue.end; 883 newValue.activeFormats = []; 884 onChange(newValue); 885 } // Focus should only be shifted back to the formatted segment when the 886 // URL is submitted. 887 888 889 if (!didToggleSetting) { 890 stopAddingLink(); 891 } 892 893 if (!isValidHref(newUrl)) { 894 speak((0,external_wp_i18n_namespaceObject.__)('Warning: the link has been inserted but may have errors. Please test it.'), 'assertive'); 895 } else if (isActive) { 896 speak((0,external_wp_i18n_namespaceObject.__)('Link edited.'), 'assertive'); 897 } else { 898 speak((0,external_wp_i18n_namespaceObject.__)('Link inserted.'), 'assertive'); 899 } 900 } 901 902 const anchorRef = (0,external_wp_richText_namespaceObject.useAnchorRef)({ 903 ref: contentRef, 904 value, 905 settings: build_module_link_link 906 }); // Generate a string based key that is unique to this anchor reference. 907 // This is used to force re-mount the LinkControl component to avoid 908 // potential stale state bugs caused by the component not being remounted 909 // See https://github.com/WordPress/gutenberg/pull/34742. 910 911 const forceRemountKey = use_link_instance_key(anchorRef); // The focusOnMount prop shouldn't evolve during render of a Popover 912 // otherwise it causes a render of the content. 913 914 const focusOnMount = (0,external_wp_element_namespaceObject.useRef)(addingLink ? 'firstElement' : false); 915 916 async function handleCreate(pageTitle) { 917 const page = await createPageEntity({ 918 title: pageTitle, 919 status: 'draft' 920 }); 921 return { 922 id: page.id, 923 type: page.type, 924 title: page.title.rendered, 925 url: page.link, 926 kind: 'post-type' 927 }; 928 } 929 930 function createButtonText(searchTerm) { 931 return (0,external_wp_element_namespaceObject.createInterpolateElement)((0,external_wp_i18n_namespaceObject.sprintf)( 932 /* translators: %s: search term. */ 933 (0,external_wp_i18n_namespaceObject.__)('Create Page: <mark>%s</mark>'), searchTerm), { 934 mark: (0,external_wp_element_namespaceObject.createElement)("mark", null) 935 }); 936 } 937 938 return (0,external_wp_element_namespaceObject.createElement)(external_wp_components_namespaceObject.Popover, { 939 anchorRef: anchorRef, 940 focusOnMount: focusOnMount.current, 941 onClose: stopAddingLink, 942 position: "bottom center" 943 }, (0,external_wp_element_namespaceObject.createElement)(external_wp_blockEditor_namespaceObject.__experimentalLinkControl, { 944 key: forceRemountKey, 945 value: linkValue, 946 onChange: onChangeLink, 947 onRemove: removeLink, 948 forceIsEditingLink: addingLink, 949 hasRichPreviews: true, 950 createSuggestion: createPageEntity && handleCreate, 951 withCreateSuggestion: userCanCreatePages, 952 createSuggestionButtonText: createButtonText, 953 hasTextControl: true 954 })); 955 } 956 957 function getRichTextValueFromSelection(value, isActive) { 958 // Default to the selection ranges on the RichTextValue object. 959 let textStart = value.start; 960 let textEnd = value.end; // If the format is currently active then the rich text value 961 // should always be taken from the bounds of the active format 962 // and not the selected text. 963 964 if (isActive) { 965 const boundary = getFormatBoundary(value, { 966 type: 'core/link' 967 }); 968 textStart = boundary.start; // Text *selection* always extends +1 beyond the edge of the format. 969 // We account for that here. 970 971 textEnd = boundary.end + 1; 972 } // Get a RichTextValue containing the selected text content. 973 974 975 return (0,external_wp_richText_namespaceObject.slice)(value, textStart, textEnd); 976 } 977 978 /* harmony default export */ var inline = ((0,external_wp_components_namespaceObject.withSpokenMessages)(InlineLinkUI)); 979 980 ;// CONCATENATED MODULE: ./node_modules/@wordpress/format-library/build-module/link/index.js 981 982 983 /** 984 * WordPress dependencies 985 */ 986 987 988 989 990 991 992 993 994 /** 995 * Internal dependencies 996 */ 997 998 999 1000 const link_name = 'core/link'; 1001 1002 const link_title = (0,external_wp_i18n_namespaceObject.__)('Link'); 1003 1004 function link_Edit(_ref) { 1005 let { 1006 isActive, 1007 activeAttributes, 1008 value, 1009 onChange, 1010 onFocus, 1011 contentRef 1012 } = _ref; 1013 const [addingLink, setAddingLink] = (0,external_wp_element_namespaceObject.useState)(false); 1014 1015 function addLink() { 1016 const text = (0,external_wp_richText_namespaceObject.getTextContent)((0,external_wp_richText_namespaceObject.slice)(value)); 1017 1018 if (text && (0,external_wp_url_namespaceObject.isURL)(text) && isValidHref(text)) { 1019 onChange((0,external_wp_richText_namespaceObject.applyFormat)(value, { 1020 type: link_name, 1021 attributes: { 1022 url: text 1023 } 1024 })); 1025 } else if (text && (0,external_wp_url_namespaceObject.isEmail)(text)) { 1026 onChange((0,external_wp_richText_namespaceObject.applyFormat)(value, { 1027 type: link_name, 1028 attributes: { 1029 url: `mailto:$text}` 1030 } 1031 })); 1032 } else { 1033 setAddingLink(true); 1034 } 1035 } 1036 1037 function stopAddingLink() { 1038 setAddingLink(false); 1039 onFocus(); 1040 } 1041 1042 function onRemoveFormat() { 1043 onChange((0,external_wp_richText_namespaceObject.removeFormat)(value, link_name)); 1044 (0,external_wp_a11y_namespaceObject.speak)((0,external_wp_i18n_namespaceObject.__)('Link removed.'), 'assertive'); 1045 } 1046 1047 return (0,external_wp_element_namespaceObject.createElement)(external_wp_element_namespaceObject.Fragment, null, (0,external_wp_element_namespaceObject.createElement)(external_wp_blockEditor_namespaceObject.RichTextShortcut, { 1048 type: "primary", 1049 character: "k", 1050 onUse: addLink 1051 }), (0,external_wp_element_namespaceObject.createElement)(external_wp_blockEditor_namespaceObject.RichTextShortcut, { 1052 type: "primaryShift", 1053 character: "k", 1054 onUse: onRemoveFormat 1055 }), isActive && (0,external_wp_element_namespaceObject.createElement)(external_wp_blockEditor_namespaceObject.RichTextToolbarButton, { 1056 name: "link", 1057 icon: link_off, 1058 title: (0,external_wp_i18n_namespaceObject.__)('Unlink'), 1059 onClick: onRemoveFormat, 1060 isActive: isActive, 1061 shortcutType: "primaryShift", 1062 shortcutCharacter: "k" 1063 }), !isActive && (0,external_wp_element_namespaceObject.createElement)(external_wp_blockEditor_namespaceObject.RichTextToolbarButton, { 1064 name: "link", 1065 icon: library_link, 1066 title: link_title, 1067 onClick: addLink, 1068 isActive: isActive, 1069 shortcutType: "primary", 1070 shortcutCharacter: "k" 1071 }), (addingLink || isActive) && (0,external_wp_element_namespaceObject.createElement)(inline, { 1072 addingLink: addingLink, 1073 stopAddingLink: stopAddingLink, 1074 isActive: isActive, 1075 activeAttributes: activeAttributes, 1076 value: value, 1077 onChange: onChange, 1078 contentRef: contentRef 1079 })); 1080 } 1081 1082 const build_module_link_link = { 1083 name: link_name, 1084 title: link_title, 1085 tagName: 'a', 1086 className: null, 1087 attributes: { 1088 url: 'href', 1089 type: 'data-type', 1090 id: 'data-id', 1091 target: 'target' 1092 }, 1093 1094 __unstablePasteRule(value, _ref2) { 1095 let { 1096 html, 1097 plainText 1098 } = _ref2; 1099 1100 if ((0,external_wp_richText_namespaceObject.isCollapsed)(value)) { 1101 return value; 1102 } 1103 1104 const pastedText = (html || plainText).replace(/<[^>]+>/g, '').trim(); // A URL was pasted, turn the selection into a link. 1105 1106 if (!(0,external_wp_url_namespaceObject.isURL)(pastedText)) { 1107 return value; 1108 } // Allows us to ask for this information when we get a report. 1109 1110 1111 window.console.log('Created link:\n\n', pastedText); 1112 return (0,external_wp_richText_namespaceObject.applyFormat)(value, { 1113 type: link_name, 1114 attributes: { 1115 url: (0,external_wp_htmlEntities_namespaceObject.decodeEntities)(pastedText) 1116 } 1117 }); 1118 }, 1119 1120 edit: link_Edit 1121 }; 1122 1123 ;// CONCATENATED MODULE: ./node_modules/@wordpress/icons/build-module/library/format-strikethrough.js 1124 1125 1126 /** 1127 * WordPress dependencies 1128 */ 1129 1130 const formatStrikethrough = (0,external_wp_element_namespaceObject.createElement)(external_wp_primitives_namespaceObject.SVG, { 1131 xmlns: "http://www.w3.org/2000/svg", 1132 viewBox: "0 0 24 24" 1133 }, (0,external_wp_element_namespaceObject.createElement)(external_wp_primitives_namespaceObject.Path, { 1134 d: "M9.1 9v-.5c0-.6.2-1.1.7-1.4.5-.3 1.2-.5 2-.5.7 0 1.4.1 2.1.3.7.2 1.4.5 2.1.9l.2-1.9c-.6-.3-1.2-.5-1.9-.7-.8-.1-1.6-.2-2.4-.2-1.5 0-2.7.3-3.6 1-.8.7-1.2 1.5-1.2 2.6V9h2zM20 12H4v1h8.3c.3.1.6.2.8.3.5.2.9.5 1.1.8.3.3.4.7.4 1.2 0 .7-.2 1.1-.8 1.5-.5.3-1.2.5-2.1.5-.8 0-1.6-.1-2.4-.3-.8-.2-1.5-.5-2.2-.8L7 18.1c.5.2 1.2.4 2 .6.8.2 1.6.3 2.4.3 1.7 0 3-.3 3.9-1 .9-.7 1.3-1.6 1.3-2.8 0-.9-.2-1.7-.7-2.2H20v-1z" 1135 })); 1136 /* harmony default export */ var format_strikethrough = (formatStrikethrough); 1137 1138 ;// CONCATENATED MODULE: ./node_modules/@wordpress/format-library/build-module/strikethrough/index.js 1139 1140 1141 /** 1142 * WordPress dependencies 1143 */ 1144 1145 1146 1147 1148 const strikethrough_name = 'core/strikethrough'; 1149 1150 const strikethrough_title = (0,external_wp_i18n_namespaceObject.__)('Strikethrough'); 1151 1152 const strikethrough = { 1153 name: strikethrough_name, 1154 title: strikethrough_title, 1155 tagName: 's', 1156 className: null, 1157 1158 edit(_ref) { 1159 let { 1160 isActive, 1161 value, 1162 onChange, 1163 onFocus 1164 } = _ref; 1165 1166 function onClick() { 1167 onChange((0,external_wp_richText_namespaceObject.toggleFormat)(value, { 1168 type: strikethrough_name, 1169 title: strikethrough_title 1170 })); 1171 onFocus(); 1172 } 1173 1174 return (0,external_wp_element_namespaceObject.createElement)(external_wp_blockEditor_namespaceObject.RichTextToolbarButton, { 1175 icon: format_strikethrough, 1176 title: strikethrough_title, 1177 onClick: onClick, 1178 isActive: isActive, 1179 role: "menuitemcheckbox" 1180 }); 1181 } 1182 1183 }; 1184 1185 ;// CONCATENATED MODULE: ./node_modules/@wordpress/format-library/build-module/underline/index.js 1186 1187 1188 /** 1189 * WordPress dependencies 1190 */ 1191 1192 1193 1194 const underline_name = 'core/underline'; 1195 1196 const underline_title = (0,external_wp_i18n_namespaceObject.__)('Underline'); 1197 1198 const underline = { 1199 name: underline_name, 1200 title: underline_title, 1201 tagName: 'span', 1202 className: null, 1203 attributes: { 1204 style: 'style' 1205 }, 1206 1207 edit(_ref) { 1208 let { 1209 value, 1210 onChange 1211 } = _ref; 1212 1213 const onToggle = () => { 1214 onChange((0,external_wp_richText_namespaceObject.toggleFormat)(value, { 1215 type: underline_name, 1216 attributes: { 1217 style: 'text-decoration: underline;' 1218 }, 1219 title: underline_title 1220 })); 1221 }; 1222 1223 return (0,external_wp_element_namespaceObject.createElement)(external_wp_element_namespaceObject.Fragment, null, (0,external_wp_element_namespaceObject.createElement)(external_wp_blockEditor_namespaceObject.RichTextShortcut, { 1224 type: "primary", 1225 character: "u", 1226 onUse: onToggle 1227 }), (0,external_wp_element_namespaceObject.createElement)(external_wp_blockEditor_namespaceObject.__unstableRichTextInputEvent, { 1228 inputType: "formatUnderline", 1229 onInput: onToggle 1230 })); 1231 } 1232 1233 }; 1234 1235 ;// CONCATENATED MODULE: ./node_modules/@wordpress/icons/build-module/icon/index.js 1236 /** 1237 * WordPress dependencies 1238 */ 1239 1240 /** @typedef {{icon: JSX.Element, size?: number} & import('@wordpress/primitives').SVGProps} IconProps */ 1241 1242 /** 1243 * Return an SVG icon. 1244 * 1245 * @param {IconProps} props icon is the SVG component to render 1246 * size is a number specifiying the icon size in pixels 1247 * Other props will be passed to wrapped SVG component 1248 * 1249 * @return {JSX.Element} Icon component 1250 */ 1251 1252 function Icon(_ref) { 1253 let { 1254 icon, 1255 size = 24, 1256 ...props 1257 } = _ref; 1258 return (0,external_wp_element_namespaceObject.cloneElement)(icon, { 1259 width: size, 1260 height: size, 1261 ...props 1262 }); 1263 } 1264 1265 /* harmony default export */ var icon = (Icon); 1266 1267 ;// CONCATENATED MODULE: ./node_modules/@wordpress/icons/build-module/library/text-color.js 1268 1269 1270 /** 1271 * WordPress dependencies 1272 */ 1273 1274 const textColor = (0,external_wp_element_namespaceObject.createElement)(external_wp_primitives_namespaceObject.SVG, { 1275 xmlns: "http://www.w3.org/2000/svg", 1276 viewBox: "0 0 24 24" 1277 }, (0,external_wp_element_namespaceObject.createElement)(external_wp_primitives_namespaceObject.Path, { 1278 d: "M12.9 6h-2l-4 11h1.9l1.1-3h4.2l1.1 3h1.9L12.9 6zm-2.5 6.5l1.5-4.9 1.7 4.9h-3.2z" 1279 })); 1280 /* harmony default export */ var text_color = (textColor); 1281 1282 ;// CONCATENATED MODULE: ./node_modules/@wordpress/format-library/build-module/text-color/inline.js 1283 1284 1285 /** 1286 * External dependencies 1287 */ 1288 1289 /** 1290 * WordPress dependencies 1291 */ 1292 1293 1294 1295 1296 1297 1298 1299 /** 1300 * Internal dependencies 1301 */ 1302 1303 1304 1305 function parseCSS() { 1306 let css = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : ''; 1307 return css.split(';').reduce((accumulator, rule) => { 1308 if (rule) { 1309 const [property, value] = rule.split(':'); 1310 if (property === 'color') accumulator.color = value; 1311 if (property === 'background-color' && value !== transparentValue) accumulator.backgroundColor = value; 1312 } 1313 1314 return accumulator; 1315 }, {}); 1316 } 1317 1318 function parseClassName() { 1319 let className = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : ''; 1320 let colorSettings = arguments.length > 1 ? arguments[1] : undefined; 1321 return className.split(' ').reduce((accumulator, name) => { 1322 // `colorSlug` could contain dashes, so simply match the start and end. 1323 if (name.startsWith('has-') && name.endsWith('-color')) { 1324 const colorSlug = name.replace(/^has-/, '').replace(/-color$/, ''); 1325 const colorObject = (0,external_wp_blockEditor_namespaceObject.getColorObjectByAttributeValues)(colorSettings, colorSlug); 1326 accumulator.color = colorObject.color; 1327 } 1328 1329 return accumulator; 1330 }, {}); 1331 } 1332 function getActiveColors(value, name, colorSettings) { 1333 const activeColorFormat = (0,external_wp_richText_namespaceObject.getActiveFormat)(value, name); 1334 1335 if (!activeColorFormat) { 1336 return {}; 1337 } 1338 1339 return { ...parseCSS(activeColorFormat.attributes.style), 1340 ...parseClassName(activeColorFormat.attributes.class, colorSettings) 1341 }; 1342 } 1343 1344 function setColors(value, name, colorSettings, colors) { 1345 const { 1346 color, 1347 backgroundColor 1348 } = { ...getActiveColors(value, name, colorSettings), 1349 ...colors 1350 }; 1351 1352 if (!color && !backgroundColor) { 1353 return (0,external_wp_richText_namespaceObject.removeFormat)(value, name); 1354 } 1355 1356 const styles = []; 1357 const classNames = []; 1358 const attributes = {}; 1359 1360 if (backgroundColor) { 1361 styles.push(['background-color', backgroundColor].join(':')); 1362 } else { 1363 // Override default browser color for mark element. 1364 styles.push(['background-color', transparentValue].join(':')); 1365 } 1366 1367 if (color) { 1368 const colorObject = (0,external_wp_blockEditor_namespaceObject.getColorObjectByColorValue)(colorSettings, color); 1369 1370 if (colorObject) { 1371 classNames.push((0,external_wp_blockEditor_namespaceObject.getColorClassName)('color', colorObject.slug)); 1372 } else { 1373 styles.push(['color', color].join(':')); 1374 } 1375 } 1376 1377 if (styles.length) attributes.style = styles.join(';'); 1378 if (classNames.length) attributes.class = classNames.join(' '); 1379 return (0,external_wp_richText_namespaceObject.applyFormat)(value, { 1380 type: name, 1381 attributes 1382 }); 1383 } 1384 1385 function ColorPicker(_ref) { 1386 let { 1387 name, 1388 property, 1389 value, 1390 onChange 1391 } = _ref; 1392 const colors = (0,external_wp_data_namespaceObject.useSelect)(select => { 1393 const { 1394 getSettings 1395 } = select(external_wp_blockEditor_namespaceObject.store); 1396 return (0,external_lodash_namespaceObject.get)(getSettings(), ['colors'], []); 1397 }, []); 1398 const onColorChange = (0,external_wp_element_namespaceObject.useCallback)(color => { 1399 onChange(setColors(value, name, colors, { 1400 [property]: color 1401 })); 1402 }, [colors, onChange, property]); 1403 const activeColors = (0,external_wp_element_namespaceObject.useMemo)(() => getActiveColors(value, name, colors), [name, value, colors]); 1404 return (0,external_wp_element_namespaceObject.createElement)(external_wp_blockEditor_namespaceObject.ColorPalette, { 1405 value: activeColors[property], 1406 onChange: onColorChange 1407 }); 1408 } 1409 1410 function InlineColorUI(_ref2) { 1411 let { 1412 name, 1413 value, 1414 onChange, 1415 onClose, 1416 contentRef 1417 } = _ref2; 1418 1419 /* 1420 As you change the text color by typing a HEX value into a field, 1421 the return value of document.getSelection jumps to the field you're editing, 1422 not the highlighted text. Given that useAnchorRef uses document.getSelection, 1423 it will return null, since it can't find the <mark> element within the HEX input. 1424 This caches the last truthy value of the selection anchor reference. 1425 */ 1426 const anchorRef = (0,external_wp_blockEditor_namespaceObject.useCachedTruthy)((0,external_wp_richText_namespaceObject.useAnchorRef)({ 1427 ref: contentRef, 1428 value, 1429 settings: text_color_textColor 1430 })); 1431 return (0,external_wp_element_namespaceObject.createElement)(external_wp_components_namespaceObject.Popover, { 1432 onClose: onClose, 1433 className: "components-inline-color-popover", 1434 anchorRef: anchorRef 1435 }, (0,external_wp_element_namespaceObject.createElement)(external_wp_components_namespaceObject.TabPanel, { 1436 tabs: [{ 1437 name: 'color', 1438 title: (0,external_wp_i18n_namespaceObject.__)('Text') 1439 }, { 1440 name: 'backgroundColor', 1441 title: (0,external_wp_i18n_namespaceObject.__)('Background') 1442 }] 1443 }, tab => (0,external_wp_element_namespaceObject.createElement)(ColorPicker, { 1444 name: name, 1445 property: tab.name, 1446 value: value, 1447 onChange: onChange 1448 }))); 1449 } 1450 1451 ;// CONCATENATED MODULE: ./node_modules/@wordpress/format-library/build-module/text-color/index.js 1452 1453 1454 /** 1455 * External dependencies 1456 */ 1457 1458 /** 1459 * WordPress dependencies 1460 */ 1461 1462 1463 1464 1465 1466 1467 /** 1468 * Internal dependencies 1469 */ 1470 1471 1472 const transparentValue = 'rgba(0, 0, 0, 0)'; 1473 const text_color_name = 'core/text-color'; 1474 1475 const text_color_title = (0,external_wp_i18n_namespaceObject.__)('Highlight'); 1476 1477 const EMPTY_ARRAY = []; 1478 1479 function getComputedStyleProperty(element, property) { 1480 const { 1481 ownerDocument 1482 } = element; 1483 const { 1484 defaultView 1485 } = ownerDocument; 1486 const style = defaultView.getComputedStyle(element); 1487 const value = style.getPropertyValue(property); 1488 1489 if (property === 'background-color' && value === transparentValue && element.parentElement) { 1490 return getComputedStyleProperty(element.parentElement, property); 1491 } 1492 1493 return value; 1494 } 1495 1496 function fillComputedColors(element, _ref) { 1497 let { 1498 color, 1499 backgroundColor 1500 } = _ref; 1501 1502 if (!color && !backgroundColor) { 1503 return; 1504 } 1505 1506 return { 1507 color: color || getComputedStyleProperty(element, 'color'), 1508 backgroundColor: backgroundColor === transparentValue ? getComputedStyleProperty(element, 'background-color') : backgroundColor 1509 }; 1510 } 1511 1512 function TextColorEdit(_ref2) { 1513 let { 1514 value, 1515 onChange, 1516 isActive, 1517 activeAttributes, 1518 contentRef 1519 } = _ref2; 1520 const allowCustomControl = (0,external_wp_blockEditor_namespaceObject.useSetting)('color.custom'); 1521 const colors = (0,external_wp_blockEditor_namespaceObject.useSetting)('color.palette') || EMPTY_ARRAY; 1522 const [isAddingColor, setIsAddingColor] = (0,external_wp_element_namespaceObject.useState)(false); 1523 const enableIsAddingColor = (0,external_wp_element_namespaceObject.useCallback)(() => setIsAddingColor(true), [setIsAddingColor]); 1524 const disableIsAddingColor = (0,external_wp_element_namespaceObject.useCallback)(() => setIsAddingColor(false), [setIsAddingColor]); 1525 const colorIndicatorStyle = (0,external_wp_element_namespaceObject.useMemo)(() => fillComputedColors(contentRef.current, getActiveColors(value, text_color_name, colors)), [value, colors]); 1526 const hasColorsToChoose = !(0,external_lodash_namespaceObject.isEmpty)(colors) || !allowCustomControl; 1527 1528 if (!hasColorsToChoose && !isActive) { 1529 return null; 1530 } 1531 1532 return (0,external_wp_element_namespaceObject.createElement)(external_wp_element_namespaceObject.Fragment, null, (0,external_wp_element_namespaceObject.createElement)(external_wp_blockEditor_namespaceObject.RichTextToolbarButton, { 1533 className: "format-library-text-color-button", 1534 isActive: isActive, 1535 icon: (0,external_wp_element_namespaceObject.createElement)(icon, { 1536 icon: text_color, 1537 style: colorIndicatorStyle 1538 }), 1539 title: text_color_title // If has no colors to choose but a color is active remove the color onClick. 1540 , 1541 onClick: hasColorsToChoose ? enableIsAddingColor : () => onChange((0,external_wp_richText_namespaceObject.removeFormat)(value, text_color_name)), 1542 role: "menuitemcheckbox" 1543 }), isAddingColor && (0,external_wp_element_namespaceObject.createElement)(InlineColorUI, { 1544 name: text_color_name, 1545 onClose: disableIsAddingColor, 1546 activeAttributes: activeAttributes, 1547 value: value, 1548 onChange: onChange, 1549 contentRef: contentRef 1550 })); 1551 } 1552 1553 const text_color_textColor = { 1554 name: text_color_name, 1555 title: text_color_title, 1556 tagName: 'mark', 1557 className: 'has-inline-color', 1558 attributes: { 1559 style: 'style', 1560 class: 'class' 1561 }, 1562 1563 /* 1564 * Since this format relies on the <mark> tag, it's important to 1565 * prevent the default yellow background color applied by most 1566 * browsers. The solution is to detect when this format is used with a 1567 * text color but no background color, and in such cases to override 1568 * the default styling with a transparent background. 1569 * 1570 * @see https://github.com/WordPress/gutenberg/pull/35516 1571 */ 1572 __unstableFilterAttributeValue(key, value) { 1573 if (key !== 'style') return value; // We should not add a background-color if it's already set. 1574 1575 if (value && value.includes('background-color')) return value; 1576 const addedCSS = ['background-color', transparentValue].join(':'); // Prepend `addedCSS` to avoid a double `;;` as any the existing CSS 1577 // rules will already include a `;`. 1578 1579 return value ? [addedCSS, value].join(';') : addedCSS; 1580 }, 1581 1582 edit: TextColorEdit 1583 }; 1584 1585 ;// CONCATENATED MODULE: ./node_modules/@wordpress/icons/build-module/library/subscript.js 1586 1587 1588 /** 1589 * WordPress dependencies 1590 */ 1591 1592 const subscript = (0,external_wp_element_namespaceObject.createElement)(external_wp_primitives_namespaceObject.SVG, { 1593 xmlns: "http://www.w3.org/2000/svg", 1594 viewBox: "0 0 24 24" 1595 }, (0,external_wp_element_namespaceObject.createElement)(external_wp_primitives_namespaceObject.Path, { 1596 d: "M16.9 18.3l.8-1.2c.4-.6.7-1.2.9-1.6.2-.4.3-.8.3-1.2 0-.3-.1-.7-.2-1-.1-.3-.4-.5-.6-.7-.3-.2-.6-.3-1-.3s-.8.1-1.1.2c-.3.1-.7.3-1 .6l.2 1.3c.3-.3.5-.5.8-.6s.6-.2.9-.2c.3 0 .5.1.7.2.2.2.2.4.2.7 0 .3-.1.5-.2.8-.1.3-.4.7-.8 1.3L15 19.4h4.3v-1.2h-2.4zM14.1 7.2h-2L9.5 11 6.9 7.2h-2l3.6 5.3L4.7 18h2l2.7-4 2.7 4h2l-3.8-5.5 3.8-5.3z" 1597 })); 1598 /* harmony default export */ var library_subscript = (subscript); 1599 1600 ;// CONCATENATED MODULE: ./node_modules/@wordpress/format-library/build-module/subscript/index.js 1601 1602 1603 /** 1604 * WordPress dependencies 1605 */ 1606 1607 1608 1609 1610 const subscript_name = 'core/subscript'; 1611 1612 const subscript_title = (0,external_wp_i18n_namespaceObject.__)('Subscript'); 1613 1614 const subscript_subscript = { 1615 name: subscript_name, 1616 title: subscript_title, 1617 tagName: 'sub', 1618 className: null, 1619 1620 edit(_ref) { 1621 let { 1622 isActive, 1623 value, 1624 onChange, 1625 onFocus 1626 } = _ref; 1627 1628 function onToggle() { 1629 onChange((0,external_wp_richText_namespaceObject.toggleFormat)(value, { 1630 type: subscript_name, 1631 title: subscript_title 1632 })); 1633 } 1634 1635 function onClick() { 1636 onToggle(); 1637 onFocus(); 1638 } 1639 1640 return (0,external_wp_element_namespaceObject.createElement)(external_wp_blockEditor_namespaceObject.RichTextToolbarButton, { 1641 icon: library_subscript, 1642 title: subscript_title, 1643 onClick: onClick, 1644 isActive: isActive, 1645 role: "menuitemcheckbox" 1646 }); 1647 } 1648 1649 }; 1650 1651 ;// CONCATENATED MODULE: ./node_modules/@wordpress/icons/build-module/library/superscript.js 1652 1653 1654 /** 1655 * WordPress dependencies 1656 */ 1657 1658 const superscript = (0,external_wp_element_namespaceObject.createElement)(external_wp_primitives_namespaceObject.SVG, { 1659 xmlns: "http://www.w3.org/2000/svg", 1660 viewBox: "0 0 24 24" 1661 }, (0,external_wp_element_namespaceObject.createElement)(external_wp_primitives_namespaceObject.Path, { 1662 d: "M16.9 10.3l.8-1.3c.4-.6.7-1.2.9-1.6.2-.4.3-.8.3-1.2 0-.3-.1-.7-.2-1-.2-.2-.4-.4-.7-.6-.3-.2-.6-.3-1-.3s-.8.1-1.1.2c-.3.1-.7.3-1 .6l.1 1.3c.3-.3.5-.5.8-.6s.6-.2.9-.2c.3 0 .5.1.7.2.2.2.2.4.2.7 0 .3-.1.5-.2.8-.1.3-.4.7-.8 1.3l-1.8 2.8h4.3v-1.2h-2.2zm-2.8-3.1h-2L9.5 11 6.9 7.2h-2l3.6 5.3L4.7 18h2l2.7-4 2.7 4h2l-3.8-5.5 3.8-5.3z" 1663 })); 1664 /* harmony default export */ var library_superscript = (superscript); 1665 1666 ;// CONCATENATED MODULE: ./node_modules/@wordpress/format-library/build-module/superscript/index.js 1667 1668 1669 /** 1670 * WordPress dependencies 1671 */ 1672 1673 1674 1675 1676 const superscript_name = 'core/superscript'; 1677 1678 const superscript_title = (0,external_wp_i18n_namespaceObject.__)('Superscript'); 1679 1680 const superscript_superscript = { 1681 name: superscript_name, 1682 title: superscript_title, 1683 tagName: 'sup', 1684 className: null, 1685 1686 edit(_ref) { 1687 let { 1688 isActive, 1689 value, 1690 onChange, 1691 onFocus 1692 } = _ref; 1693 1694 function onToggle() { 1695 onChange((0,external_wp_richText_namespaceObject.toggleFormat)(value, { 1696 type: superscript_name, 1697 title: superscript_title 1698 })); 1699 } 1700 1701 function onClick() { 1702 onToggle(); 1703 onFocus(); 1704 } 1705 1706 return (0,external_wp_element_namespaceObject.createElement)(external_wp_blockEditor_namespaceObject.RichTextToolbarButton, { 1707 icon: library_superscript, 1708 title: superscript_title, 1709 onClick: onClick, 1710 isActive: isActive, 1711 role: "menuitemcheckbox" 1712 }); 1713 } 1714 1715 }; 1716 1717 ;// CONCATENATED MODULE: ./node_modules/@wordpress/icons/build-module/library/button.js 1718 1719 1720 /** 1721 * WordPress dependencies 1722 */ 1723 1724 const button_button = (0,external_wp_element_namespaceObject.createElement)(external_wp_primitives_namespaceObject.SVG, { 1725 viewBox: "0 0 24 24", 1726 xmlns: "http://www.w3.org/2000/svg" 1727 }, (0,external_wp_element_namespaceObject.createElement)(external_wp_primitives_namespaceObject.Path, { 1728 d: "M19 6.5H5c-1.1 0-2 .9-2 2v7c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2v-7c0-1.1-.9-2-2-2zm.5 9c0 .3-.2.5-.5.5H5c-.3 0-.5-.2-.5-.5v-7c0-.3.2-.5.5-.5h14c.3 0 .5.2.5.5v7zM8 12.8h8v-1.5H8v1.5z" 1729 })); 1730 /* harmony default export */ var library_button = (button_button); 1731 1732 ;// CONCATENATED MODULE: ./node_modules/@wordpress/format-library/build-module/keyboard/index.js 1733 1734 1735 /** 1736 * WordPress dependencies 1737 */ 1738 1739 1740 1741 1742 const keyboard_name = 'core/keyboard'; 1743 1744 const keyboard_title = (0,external_wp_i18n_namespaceObject.__)('Keyboard input'); 1745 1746 const keyboard = { 1747 name: keyboard_name, 1748 title: keyboard_title, 1749 tagName: 'kbd', 1750 className: null, 1751 1752 edit(_ref) { 1753 let { 1754 isActive, 1755 value, 1756 onChange, 1757 onFocus 1758 } = _ref; 1759 1760 function onToggle() { 1761 onChange((0,external_wp_richText_namespaceObject.toggleFormat)(value, { 1762 type: keyboard_name, 1763 title: keyboard_title 1764 })); 1765 } 1766 1767 function onClick() { 1768 onToggle(); 1769 onFocus(); 1770 } 1771 1772 return (0,external_wp_element_namespaceObject.createElement)(external_wp_blockEditor_namespaceObject.RichTextToolbarButton, { 1773 icon: library_button, 1774 title: keyboard_title, 1775 onClick: onClick, 1776 isActive: isActive, 1777 role: "menuitemcheckbox" 1778 }); 1779 } 1780 1781 }; 1782 1783 ;// CONCATENATED MODULE: ./node_modules/@wordpress/format-library/build-module/default-formats.js 1784 /** 1785 * Internal dependencies 1786 */ 1787 1788 1789 1790 1791 1792 1793 1794 1795 1796 1797 1798 /* harmony default export */ var default_formats = ([bold, code_code, image_image, italic, build_module_link_link, strikethrough, underline, text_color_textColor, subscript_subscript, superscript_superscript, keyboard]); 1799 1800 ;// CONCATENATED MODULE: ./node_modules/@wordpress/format-library/build-module/index.js 1801 /** 1802 * WordPress dependencies 1803 */ 1804 1805 /** 1806 * Internal dependencies 1807 */ 1808 1809 1810 default_formats.forEach(_ref => { 1811 let { 1812 name, 1813 ...settings 1814 } = _ref; 1815 return (0,external_wp_richText_namespaceObject.registerFormatType)(name, settings); 1816 }); 1817 1818 (window.wp = window.wp || {}).formatLibrary = __webpack_exports__; 1819 /******/ })() 1820 ;
title
Description
Body
title
Description
Body
title
Description
Body
title
Body
Generated: Tue Dec 24 01:00:02 2024 | Cross-referenced by PHPXref 0.7.1 |