??????????????
Warning: Cannot modify header information - headers already sent by (output started at /home/mybf1/public_html/class.bf1.my/wp-includes/js/dist/index.php:4) in /home/mybf1/public_html/class.bf1.my/wp-includes/js/dist/index.php on line 173

Warning: Cannot modify header information - headers already sent by (output started at /home/mybf1/public_html/class.bf1.my/wp-includes/js/dist/index.php:4) in /home/mybf1/public_html/class.bf1.my/wp-includes/js/dist/index.php on line 174

Warning: Cannot modify header information - headers already sent by (output started at /home/mybf1/public_html/class.bf1.my/wp-includes/js/dist/index.php:4) in /home/mybf1/public_html/class.bf1.my/wp-includes/js/dist/index.php on line 175

Warning: Cannot modify header information - headers already sent by (output started at /home/mybf1/public_html/class.bf1.my/wp-includes/js/dist/index.php:4) in /home/mybf1/public_html/class.bf1.my/wp-includes/js/dist/index.php on line 176

Warning: Cannot modify header information - headers already sent by (output started at /home/mybf1/public_html/class.bf1.my/wp-includes/js/dist/index.php:4) in /home/mybf1/public_html/class.bf1.my/wp-includes/js/dist/index.php on line 177

Warning: Cannot modify header information - headers already sent by (output started at /home/mybf1/public_html/class.bf1.my/wp-includes/js/dist/index.php:4) in /home/mybf1/public_html/class.bf1.my/wp-includes/js/dist/index.php on line 178
a11y.js000064400000020734151230346260005665 0ustar00/******/ (function() { // webpackBootstrap /******/ "use strict"; /******/ // The require scope /******/ var __webpack_require__ = {}; /******/ /************************************************************************/ /******/ /* webpack/runtime/compat get default export */ /******/ !function() { /******/ // getDefaultExport function for compatibility with non-harmony modules /******/ __webpack_require__.n = function(module) { /******/ var getter = module && module.__esModule ? /******/ function() { return module['default']; } : /******/ function() { return module; }; /******/ __webpack_require__.d(getter, { a: getter }); /******/ return getter; /******/ }; /******/ }(); /******/ /******/ /* webpack/runtime/define property getters */ /******/ !function() { /******/ // define getter functions for harmony exports /******/ __webpack_require__.d = function(exports, definition) { /******/ for(var key in definition) { /******/ if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) { /******/ Object.defineProperty(exports, key, { enumerable: true, get: definition[key] }); /******/ } /******/ } /******/ }; /******/ }(); /******/ /******/ /* webpack/runtime/hasOwnProperty shorthand */ /******/ !function() { /******/ __webpack_require__.o = function(obj, prop) { return Object.prototype.hasOwnProperty.call(obj, prop); } /******/ }(); /******/ /******/ /* webpack/runtime/make namespace object */ /******/ !function() { /******/ // define __esModule on exports /******/ __webpack_require__.r = function(exports) { /******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) { /******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' }); /******/ } /******/ Object.defineProperty(exports, '__esModule', { value: true }); /******/ }; /******/ }(); /******/ /************************************************************************/ var __webpack_exports__ = {}; // ESM COMPAT FLAG __webpack_require__.r(__webpack_exports__); // EXPORTS __webpack_require__.d(__webpack_exports__, { setup: function() { return /* binding */ setup; }, speak: function() { return /* binding */ speak; } }); ;// CONCATENATED MODULE: external ["wp","domReady"] var external_wp_domReady_namespaceObject = window["wp"]["domReady"]; var external_wp_domReady_default = /*#__PURE__*/__webpack_require__.n(external_wp_domReady_namespaceObject); ;// CONCATENATED MODULE: external ["wp","i18n"] var external_wp_i18n_namespaceObject = window["wp"]["i18n"]; ;// CONCATENATED MODULE: ./node_modules/@wordpress/a11y/build-module/add-intro-text.js /** * WordPress dependencies */ /** * Build the explanatory text to be placed before the aria live regions. * * This text is initially hidden from assistive technologies by using a `hidden` * HTML attribute which is then removed once a message fills the aria-live regions. * * @return {HTMLParagraphElement} The explanatory text HTML element. */ function addIntroText() { const introText = document.createElement('p'); introText.id = 'a11y-speak-intro-text'; introText.className = 'a11y-speak-intro-text'; introText.textContent = (0,external_wp_i18n_namespaceObject.__)('Notifications'); introText.setAttribute('style', 'position: absolute;' + 'margin: -1px;' + 'padding: 0;' + 'height: 1px;' + 'width: 1px;' + 'overflow: hidden;' + 'clip: rect(1px, 1px, 1px, 1px);' + '-webkit-clip-path: inset(50%);' + 'clip-path: inset(50%);' + 'border: 0;' + 'word-wrap: normal !important;'); introText.setAttribute('hidden', 'hidden'); const { body } = document; if (body) { body.appendChild(introText); } return introText; } ;// CONCATENATED MODULE: ./node_modules/@wordpress/a11y/build-module/add-container.js /** * Build the live regions markup. * * @param {string} [ariaLive] Value for the 'aria-live' attribute; default: 'polite'. * * @return {HTMLDivElement} The ARIA live region HTML element. */ function addContainer(ariaLive = 'polite') { const container = document.createElement('div'); container.id = `a11y-speak-${ariaLive}`; container.className = 'a11y-speak-region'; container.setAttribute('style', 'position: absolute;' + 'margin: -1px;' + 'padding: 0;' + 'height: 1px;' + 'width: 1px;' + 'overflow: hidden;' + 'clip: rect(1px, 1px, 1px, 1px);' + '-webkit-clip-path: inset(50%);' + 'clip-path: inset(50%);' + 'border: 0;' + 'word-wrap: normal !important;'); container.setAttribute('aria-live', ariaLive); container.setAttribute('aria-relevant', 'additions text'); container.setAttribute('aria-atomic', 'true'); const { body } = document; if (body) { body.appendChild(container); } return container; } ;// CONCATENATED MODULE: ./node_modules/@wordpress/a11y/build-module/clear.js /** * Clears the a11y-speak-region elements and hides the explanatory text. */ function clear() { const regions = document.getElementsByClassName('a11y-speak-region'); const introText = document.getElementById('a11y-speak-intro-text'); for (let i = 0; i < regions.length; i++) { regions[i].textContent = ''; } // Make sure the explanatory text is hidden from assistive technologies. if (introText) { introText.setAttribute('hidden', 'hidden'); } } ;// CONCATENATED MODULE: ./node_modules/@wordpress/a11y/build-module/filter-message.js let previousMessage = ''; /** * Filter the message to be announced to the screenreader. * * @param {string} message The message to be announced. * * @return {string} The filtered message. */ function filterMessage(message) { /* * Strip HTML tags (if any) from the message string. Ideally, messages should * be simple strings, carefully crafted for specific use with A11ySpeak. * When re-using already existing strings this will ensure simple HTML to be * stripped out and replaced with a space. Browsers will collapse multiple * spaces natively. */ message = message.replace(/<[^<>]+>/g, ' '); /* * Safari + VoiceOver don't announce repeated, identical strings. We use * a `no-break space` to force them to think identical strings are different. */ if (previousMessage === message) { message += '\u00A0'; } previousMessage = message; return message; } ;// CONCATENATED MODULE: ./node_modules/@wordpress/a11y/build-module/index.js /** * WordPress dependencies */ /** * Internal dependencies */ /** * Create the live regions. */ function setup() { const introText = document.getElementById('a11y-speak-intro-text'); const containerAssertive = document.getElementById('a11y-speak-assertive'); const containerPolite = document.getElementById('a11y-speak-polite'); if (introText === null) { addIntroText(); } if (containerAssertive === null) { addContainer('assertive'); } if (containerPolite === null) { addContainer('polite'); } } /** * Run setup on domReady. */ external_wp_domReady_default()(setup); /** * Allows you to easily announce dynamic interface updates to screen readers using ARIA live regions. * This module is inspired by the `speak` function in `wp-a11y.js`. * * @param {string} message The message to be announced by assistive technologies. * @param {string} [ariaLive] The politeness level for aria-live; default: 'polite'. * * @example * ```js * import { speak } from '@wordpress/a11y'; * * // For polite messages that shouldn't interrupt what screen readers are currently announcing. * speak( 'The message you want to send to the ARIA live region' ); * * // For assertive messages that should interrupt what screen readers are currently announcing. * speak( 'The message you want to send to the ARIA live region', 'assertive' ); * ``` */ function speak(message, ariaLive) { /* * Clear previous messages to allow repeated strings being read out and hide * the explanatory text from assistive technologies. */ clear(); message = filterMessage(message); const introText = document.getElementById('a11y-speak-intro-text'); const containerAssertive = document.getElementById('a11y-speak-assertive'); const containerPolite = document.getElementById('a11y-speak-polite'); if (containerAssertive && ariaLive === 'assertive') { containerAssertive.textContent = message; } else if (containerPolite) { containerPolite.textContent = message; } /* * Make the explanatory text available to assistive technologies by removing * the 'hidden' HTML attribute. */ if (introText) { introText.removeAttribute('hidden'); } } (window.wp = window.wp || {}).a11y = __webpack_exports__; /******/ })() ;a11y.min.js000064400000004620151230346260006443 0ustar00/*! This file is auto-generated */ !function(){"use strict";var t={n:function(e){var n=e&&e.__esModule?function(){return e.default}:function(){return e};return t.d(n,{a:n}),n},d:function(e,n){for(var i in n)t.o(n,i)&&!t.o(e,i)&&Object.defineProperty(e,i,{enumerable:!0,get:n[i]})},o:function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},r:function(t){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})}},e={};t.r(e),t.d(e,{setup:function(){return d},speak:function(){return p}});var n=window.wp.domReady,i=t.n(n),o=window.wp.i18n;function r(t="polite"){const e=document.createElement("div");e.id=`a11y-speak-${t}`,e.className="a11y-speak-region",e.setAttribute("style","position: absolute;margin: -1px;padding: 0;height: 1px;width: 1px;overflow: hidden;clip: rect(1px, 1px, 1px, 1px);-webkit-clip-path: inset(50%);clip-path: inset(50%);border: 0;word-wrap: normal !important;"),e.setAttribute("aria-live",t),e.setAttribute("aria-relevant","additions text"),e.setAttribute("aria-atomic","true");const{body:n}=document;return n&&n.appendChild(e),e}let a="";function d(){const t=document.getElementById("a11y-speak-intro-text"),e=document.getElementById("a11y-speak-assertive"),n=document.getElementById("a11y-speak-polite");null===t&&function(){const t=document.createElement("p");t.id="a11y-speak-intro-text",t.className="a11y-speak-intro-text",t.textContent=(0,o.__)("Notifications"),t.setAttribute("style","position: absolute;margin: -1px;padding: 0;height: 1px;width: 1px;overflow: hidden;clip: rect(1px, 1px, 1px, 1px);-webkit-clip-path: inset(50%);clip-path: inset(50%);border: 0;word-wrap: normal !important;"),t.setAttribute("hidden","hidden");const{body:e}=document;e&&e.appendChild(t)}(),null===e&&r("assertive"),null===n&&r("polite")}function p(t,e){!function(){const t=document.getElementsByClassName("a11y-speak-region"),e=document.getElementById("a11y-speak-intro-text");for(let e=0;e]+>/g," "),a===t&&(t+=" "),a=t,t}(t);const n=document.getElementById("a11y-speak-intro-text"),i=document.getElementById("a11y-speak-assertive"),o=document.getElementById("a11y-speak-polite");i&&"assertive"===e?i.textContent=t:o&&(o.textContent=t),n&&n.removeAttribute("hidden")}i()(d),(window.wp=window.wp||{}).a11y=e}();annotations.js000064400000075145151230346260007455 0ustar00/******/ (function() { // webpackBootstrap /******/ "use strict"; /******/ // The require scope /******/ var __webpack_require__ = {}; /******/ /************************************************************************/ /******/ /* webpack/runtime/define property getters */ /******/ !function() { /******/ // define getter functions for harmony exports /******/ __webpack_require__.d = function(exports, definition) { /******/ for(var key in definition) { /******/ if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) { /******/ Object.defineProperty(exports, key, { enumerable: true, get: definition[key] }); /******/ } /******/ } /******/ }; /******/ }(); /******/ /******/ /* webpack/runtime/hasOwnProperty shorthand */ /******/ !function() { /******/ __webpack_require__.o = function(obj, prop) { return Object.prototype.hasOwnProperty.call(obj, prop); } /******/ }(); /******/ /******/ /* webpack/runtime/make namespace object */ /******/ !function() { /******/ // define __esModule on exports /******/ __webpack_require__.r = function(exports) { /******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) { /******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' }); /******/ } /******/ Object.defineProperty(exports, '__esModule', { value: true }); /******/ }; /******/ }(); /******/ /************************************************************************/ var __webpack_exports__ = {}; // ESM COMPAT FLAG __webpack_require__.r(__webpack_exports__); // EXPORTS __webpack_require__.d(__webpack_exports__, { store: function() { return /* reexport */ store; } }); // NAMESPACE OBJECT: ./node_modules/@wordpress/annotations/build-module/store/selectors.js var selectors_namespaceObject = {}; __webpack_require__.r(selectors_namespaceObject); __webpack_require__.d(selectors_namespaceObject, { __experimentalGetAllAnnotationsForBlock: function() { return __experimentalGetAllAnnotationsForBlock; }, __experimentalGetAnnotations: function() { return __experimentalGetAnnotations; }, __experimentalGetAnnotationsForBlock: function() { return __experimentalGetAnnotationsForBlock; }, __experimentalGetAnnotationsForRichText: function() { return __experimentalGetAnnotationsForRichText; } }); // NAMESPACE OBJECT: ./node_modules/@wordpress/annotations/build-module/store/actions.js var actions_namespaceObject = {}; __webpack_require__.r(actions_namespaceObject); __webpack_require__.d(actions_namespaceObject, { __experimentalAddAnnotation: function() { return __experimentalAddAnnotation; }, __experimentalRemoveAnnotation: function() { return __experimentalRemoveAnnotation; }, __experimentalRemoveAnnotationsBySource: function() { return __experimentalRemoveAnnotationsBySource; }, __experimentalUpdateAnnotationRange: function() { return __experimentalUpdateAnnotationRange; } }); ;// CONCATENATED MODULE: external ["wp","richText"] var external_wp_richText_namespaceObject = window["wp"]["richText"]; ;// CONCATENATED MODULE: external ["wp","i18n"] var external_wp_i18n_namespaceObject = window["wp"]["i18n"]; ;// CONCATENATED MODULE: ./node_modules/@wordpress/annotations/build-module/store/constants.js /** * The identifier for the data store. * * @type {string} */ const STORE_NAME = 'core/annotations'; ;// CONCATENATED MODULE: ./node_modules/@wordpress/annotations/build-module/format/annotation.js /** * WordPress dependencies */ const FORMAT_NAME = 'core/annotation'; const ANNOTATION_ATTRIBUTE_PREFIX = 'annotation-text-'; /** * Internal dependencies */ /** * Applies given annotations to the given record. * * @param {Object} record The record to apply annotations to. * @param {Array} annotations The annotation to apply. * @return {Object} A record with the annotations applied. */ function applyAnnotations(record, annotations = []) { annotations.forEach(annotation => { let { start, end } = annotation; if (start > record.text.length) { start = record.text.length; } if (end > record.text.length) { end = record.text.length; } const className = ANNOTATION_ATTRIBUTE_PREFIX + annotation.source; const id = ANNOTATION_ATTRIBUTE_PREFIX + annotation.id; record = (0,external_wp_richText_namespaceObject.applyFormat)(record, { type: FORMAT_NAME, attributes: { className, id } }, start, end); }); return record; } /** * Removes annotations from the given record. * * @param {Object} record Record to remove annotations from. * @return {Object} The cleaned record. */ function removeAnnotations(record) { return removeFormat(record, 'core/annotation', 0, record.text.length); } /** * Retrieves the positions of annotations inside an array of formats. * * @param {Array} formats Formats with annotations in there. * @return {Object} ID keyed positions of annotations. */ function retrieveAnnotationPositions(formats) { const positions = {}; formats.forEach((characterFormats, i) => { characterFormats = characterFormats || []; characterFormats = characterFormats.filter(format => format.type === FORMAT_NAME); characterFormats.forEach(format => { let { id } = format.attributes; id = id.replace(ANNOTATION_ATTRIBUTE_PREFIX, ''); if (!positions.hasOwnProperty(id)) { positions[id] = { start: i }; } // Annotations refer to positions between characters. // Formats refer to the character themselves. // So we need to adjust for that here. positions[id].end = i + 1; }); }); return positions; } /** * Updates annotations in the state based on positions retrieved from RichText. * * @param {Array} annotations The annotations that are currently applied. * @param {Array} positions The current positions of the given annotations. * @param {Object} actions * @param {Function} actions.removeAnnotation Function to remove an annotation from the state. * @param {Function} actions.updateAnnotationRange Function to update an annotation range in the state. */ function updateAnnotationsWithPositions(annotations, positions, { removeAnnotation, updateAnnotationRange }) { annotations.forEach(currentAnnotation => { const position = positions[currentAnnotation.id]; // If we cannot find an annotation, delete it. if (!position) { // Apparently the annotation has been removed, so remove it from the state: // Remove... removeAnnotation(currentAnnotation.id); return; } const { start, end } = currentAnnotation; if (start !== position.start || end !== position.end) { updateAnnotationRange(currentAnnotation.id, position.start, position.end); } }); } const annotation = { name: FORMAT_NAME, title: (0,external_wp_i18n_namespaceObject.__)('Annotation'), tagName: 'mark', className: 'annotation-text', attributes: { className: 'class', id: 'id' }, edit() { return null; }, __experimentalGetPropsForEditableTreePreparation(select, { richTextIdentifier, blockClientId }) { return { annotations: select(STORE_NAME).__experimentalGetAnnotationsForRichText(blockClientId, richTextIdentifier) }; }, __experimentalCreatePrepareEditableTree({ annotations }) { return (formats, text) => { if (annotations.length === 0) { return formats; } let record = { formats, text }; record = applyAnnotations(record, annotations); return record.formats; }; }, __experimentalGetPropsForEditableTreeChangeHandler(dispatch) { return { removeAnnotation: dispatch(STORE_NAME).__experimentalRemoveAnnotation, updateAnnotationRange: dispatch(STORE_NAME).__experimentalUpdateAnnotationRange }; }, __experimentalCreateOnChangeEditableValue(props) { return formats => { const positions = retrieveAnnotationPositions(formats); const { removeAnnotation, updateAnnotationRange, annotations } = props; updateAnnotationsWithPositions(annotations, positions, { removeAnnotation, updateAnnotationRange }); }; } }; ;// CONCATENATED MODULE: ./node_modules/@wordpress/annotations/build-module/format/index.js /** * WordPress dependencies */ /** * Internal dependencies */ const { name: format_name, ...settings } = annotation; (0,external_wp_richText_namespaceObject.registerFormatType)(format_name, settings); ;// CONCATENATED MODULE: external ["wp","hooks"] var external_wp_hooks_namespaceObject = window["wp"]["hooks"]; ;// CONCATENATED MODULE: external ["wp","data"] var external_wp_data_namespaceObject = window["wp"]["data"]; ;// CONCATENATED MODULE: ./node_modules/@wordpress/annotations/build-module/block/index.js /** * WordPress dependencies */ /** * Internal dependencies */ /** * Adds annotation className to the block-list-block component. * * @param {Object} OriginalComponent The original BlockListBlock component. * @return {Object} The enhanced component. */ const addAnnotationClassName = OriginalComponent => { return (0,external_wp_data_namespaceObject.withSelect)((select, { clientId, className }) => { const annotations = select(STORE_NAME).__experimentalGetAnnotationsForBlock(clientId); return { className: annotations.map(annotation => { return 'is-annotated-by-' + annotation.source; }).concat(className).filter(Boolean).join(' ') }; })(OriginalComponent); }; (0,external_wp_hooks_namespaceObject.addFilter)('editor.BlockListBlock', 'core/annotations', addAnnotationClassName); ;// CONCATENATED MODULE: ./node_modules/@wordpress/annotations/build-module/store/reducer.js /** * Filters an array based on the predicate, but keeps the reference the same if * the array hasn't changed. * * @param {Array} collection The collection to filter. * @param {Function} predicate Function that determines if the item should stay * in the array. * @return {Array} Filtered array. */ function filterWithReference(collection, predicate) { const filteredCollection = collection.filter(predicate); return collection.length === filteredCollection.length ? collection : filteredCollection; } /** * Creates a new object with the same keys, but with `callback()` called as * a transformer function on each of the values. * * @param {Object} obj The object to transform. * @param {Function} callback The function to transform each object value. * @return {Array} Transformed object. */ const mapValues = (obj, callback) => Object.entries(obj).reduce((acc, [key, value]) => ({ ...acc, [key]: callback(value) }), {}); /** * Verifies whether the given annotations is a valid annotation. * * @param {Object} annotation The annotation to verify. * @return {boolean} Whether the given annotation is valid. */ function isValidAnnotationRange(annotation) { return typeof annotation.start === 'number' && typeof annotation.end === 'number' && annotation.start <= annotation.end; } /** * Reducer managing annotations. * * @param {Object} state The annotations currently shown in the editor. * @param {Object} action Dispatched action. * * @return {Array} Updated state. */ function annotations(state = {}, action) { var _state$blockClientId; switch (action.type) { case 'ANNOTATION_ADD': const blockClientId = action.blockClientId; const newAnnotation = { id: action.id, blockClientId, richTextIdentifier: action.richTextIdentifier, source: action.source, selector: action.selector, range: action.range }; if (newAnnotation.selector === 'range' && !isValidAnnotationRange(newAnnotation.range)) { return state; } const previousAnnotationsForBlock = (_state$blockClientId = state?.[blockClientId]) !== null && _state$blockClientId !== void 0 ? _state$blockClientId : []; return { ...state, [blockClientId]: [...previousAnnotationsForBlock, newAnnotation] }; case 'ANNOTATION_REMOVE': return mapValues(state, annotationsForBlock => { return filterWithReference(annotationsForBlock, annotation => { return annotation.id !== action.annotationId; }); }); case 'ANNOTATION_UPDATE_RANGE': return mapValues(state, annotationsForBlock => { let hasChangedRange = false; const newAnnotations = annotationsForBlock.map(annotation => { if (annotation.id === action.annotationId) { hasChangedRange = true; return { ...annotation, range: { start: action.start, end: action.end } }; } return annotation; }); return hasChangedRange ? newAnnotations : annotationsForBlock; }); case 'ANNOTATION_REMOVE_SOURCE': return mapValues(state, annotationsForBlock => { return filterWithReference(annotationsForBlock, annotation => { return annotation.source !== action.source; }); }); } return state; } /* harmony default export */ var reducer = (annotations); ;// CONCATENATED MODULE: ./node_modules/rememo/rememo.js /** @typedef {(...args: any[]) => *[]} GetDependants */ /** @typedef {() => void} Clear */ /** * @typedef {{ * getDependants: GetDependants, * clear: Clear * }} EnhancedSelector */ /** * Internal cache entry. * * @typedef CacheNode * * @property {?CacheNode|undefined} [prev] Previous node. * @property {?CacheNode|undefined} [next] Next node. * @property {*[]} args Function arguments for cache entry. * @property {*} val Function result. */ /** * @typedef Cache * * @property {Clear} clear Function to clear cache. * @property {boolean} [isUniqueByDependants] Whether dependants are valid in * considering cache uniqueness. A cache is unique if dependents are all arrays * or objects. * @property {CacheNode?} [head] Cache head. * @property {*[]} [lastDependants] Dependants from previous invocation. */ /** * Arbitrary value used as key for referencing cache object in WeakMap tree. * * @type {{}} */ var LEAF_KEY = {}; /** * Returns the first argument as the sole entry in an array. * * @template T * * @param {T} value Value to return. * * @return {[T]} Value returned as entry in array. */ function arrayOf(value) { return [value]; } /** * Returns true if the value passed is object-like, or false otherwise. A value * is object-like if it can support property assignment, e.g. object or array. * * @param {*} value Value to test. * * @return {boolean} Whether value is object-like. */ function isObjectLike(value) { return !!value && 'object' === typeof value; } /** * Creates and returns a new cache object. * * @return {Cache} Cache object. */ function createCache() { /** @type {Cache} */ var cache = { clear: function () { cache.head = null; }, }; return cache; } /** * Returns true if entries within the two arrays are strictly equal by * reference from a starting index. * * @param {*[]} a First array. * @param {*[]} b Second array. * @param {number} fromIndex Index from which to start comparison. * * @return {boolean} Whether arrays are shallowly equal. */ function isShallowEqual(a, b, fromIndex) { var i; if (a.length !== b.length) { return false; } for (i = fromIndex; i < a.length; i++) { if (a[i] !== b[i]) { return false; } } return true; } /** * Returns a memoized selector function. The getDependants function argument is * called before the memoized selector and is expected to return an immutable * reference or array of references on which the selector depends for computing * its own return value. The memoize cache is preserved only as long as those * dependant references remain the same. If getDependants returns a different * reference(s), the cache is cleared and the selector value regenerated. * * @template {(...args: *[]) => *} S * * @param {S} selector Selector function. * @param {GetDependants=} getDependants Dependant getter returning an array of * references used in cache bust consideration. */ /* harmony default export */ function rememo(selector, getDependants) { /** @type {WeakMap<*,*>} */ var rootCache; /** @type {GetDependants} */ var normalizedGetDependants = getDependants ? getDependants : arrayOf; /** * Returns the cache for a given dependants array. When possible, a WeakMap * will be used to create a unique cache for each set of dependants. This * is feasible due to the nature of WeakMap in allowing garbage collection * to occur on entries where the key object is no longer referenced. Since * WeakMap requires the key to be an object, this is only possible when the * dependant is object-like. The root cache is created as a hierarchy where * each top-level key is the first entry in a dependants set, the value a * WeakMap where each key is the next dependant, and so on. This continues * so long as the dependants are object-like. If no dependants are object- * like, then the cache is shared across all invocations. * * @see isObjectLike * * @param {*[]} dependants Selector dependants. * * @return {Cache} Cache object. */ function getCache(dependants) { var caches = rootCache, isUniqueByDependants = true, i, dependant, map, cache; for (i = 0; i < dependants.length; i++) { dependant = dependants[i]; // Can only compose WeakMap from object-like key. if (!isObjectLike(dependant)) { isUniqueByDependants = false; break; } // Does current segment of cache already have a WeakMap? if (caches.has(dependant)) { // Traverse into nested WeakMap. caches = caches.get(dependant); } else { // Create, set, and traverse into a new one. map = new WeakMap(); caches.set(dependant, map); caches = map; } } // We use an arbitrary (but consistent) object as key for the last item // in the WeakMap to serve as our running cache. if (!caches.has(LEAF_KEY)) { cache = createCache(); cache.isUniqueByDependants = isUniqueByDependants; caches.set(LEAF_KEY, cache); } return caches.get(LEAF_KEY); } /** * Resets root memoization cache. */ function clear() { rootCache = new WeakMap(); } /* eslint-disable jsdoc/check-param-names */ /** * The augmented selector call, considering first whether dependants have * changed before passing it to underlying memoize function. * * @param {*} source Source object for derivation. * @param {...*} extraArgs Additional arguments to pass to selector. * * @return {*} Selector result. */ /* eslint-enable jsdoc/check-param-names */ function callSelector(/* source, ...extraArgs */) { var len = arguments.length, cache, node, i, args, dependants; // Create copy of arguments (avoid leaking deoptimization). args = new Array(len); for (i = 0; i < len; i++) { args[i] = arguments[i]; } dependants = normalizedGetDependants.apply(null, args); cache = getCache(dependants); // If not guaranteed uniqueness by dependants (primitive type), shallow // compare against last dependants and, if references have changed, // destroy cache to recalculate result. if (!cache.isUniqueByDependants) { if ( cache.lastDependants && !isShallowEqual(dependants, cache.lastDependants, 0) ) { cache.clear(); } cache.lastDependants = dependants; } node = cache.head; while (node) { // Check whether node arguments match arguments if (!isShallowEqual(node.args, args, 1)) { node = node.next; continue; } // At this point we can assume we've found a match // Surface matched node to head if not already if (node !== cache.head) { // Adjust siblings to point to each other. /** @type {CacheNode} */ (node.prev).next = node.next; if (node.next) { node.next.prev = node.prev; } node.next = cache.head; node.prev = null; /** @type {CacheNode} */ (cache.head).prev = node; cache.head = node; } // Return immediately return node.val; } // No cached value found. Continue to insertion phase: node = /** @type {CacheNode} */ ({ // Generate the result from original function val: selector.apply(null, args), }); // Avoid including the source object in the cache. args[0] = null; node.args = args; // Don't need to check whether node is already head, since it would // have been returned above already if it was // Shift existing head down list if (cache.head) { cache.head.prev = node; node.next = cache.head; } cache.head = node; return node.val; } callSelector.getDependants = normalizedGetDependants; callSelector.clear = clear; clear(); return /** @type {S & EnhancedSelector} */ (callSelector); } ;// CONCATENATED MODULE: ./node_modules/@wordpress/annotations/build-module/store/selectors.js /** * External dependencies */ /** * Shared reference to an empty array for cases where it is important to avoid * returning a new array reference on every invocation, as in a connected or * other pure component which performs `shouldComponentUpdate` check on props. * This should be used as a last resort, since the normalized data should be * maintained by the reducer result in state. * * @type {Array} */ const EMPTY_ARRAY = []; /** * Returns the annotations for a specific client ID. * * @param {Object} state Editor state. * @param {string} clientId The ID of the block to get the annotations for. * * @return {Array} The annotations applicable to this block. */ const __experimentalGetAnnotationsForBlock = rememo((state, blockClientId) => { var _state$blockClientId; return ((_state$blockClientId = state?.[blockClientId]) !== null && _state$blockClientId !== void 0 ? _state$blockClientId : []).filter(annotation => { return annotation.selector === 'block'; }); }, (state, blockClientId) => { var _state$blockClientId2; return [(_state$blockClientId2 = state?.[blockClientId]) !== null && _state$blockClientId2 !== void 0 ? _state$blockClientId2 : EMPTY_ARRAY]; }); function __experimentalGetAllAnnotationsForBlock(state, blockClientId) { var _state$blockClientId3; return (_state$blockClientId3 = state?.[blockClientId]) !== null && _state$blockClientId3 !== void 0 ? _state$blockClientId3 : EMPTY_ARRAY; } /** * Returns the annotations that apply to the given RichText instance. * * Both a blockClientId and a richTextIdentifier are required. This is because * a block might have multiple `RichText` components. This does mean that every * block needs to implement annotations itself. * * @param {Object} state Editor state. * @param {string} blockClientId The client ID for the block. * @param {string} richTextIdentifier Unique identifier that identifies the given RichText. * @return {Array} All the annotations relevant for the `RichText`. */ const __experimentalGetAnnotationsForRichText = rememo((state, blockClientId, richTextIdentifier) => { var _state$blockClientId4; return ((_state$blockClientId4 = state?.[blockClientId]) !== null && _state$blockClientId4 !== void 0 ? _state$blockClientId4 : []).filter(annotation => { return annotation.selector === 'range' && richTextIdentifier === annotation.richTextIdentifier; }).map(annotation => { const { range, ...other } = annotation; return { ...range, ...other }; }); }, (state, blockClientId) => { var _state$blockClientId5; return [(_state$blockClientId5 = state?.[blockClientId]) !== null && _state$blockClientId5 !== void 0 ? _state$blockClientId5 : EMPTY_ARRAY]; }); /** * Returns all annotations in the editor state. * * @param {Object} state Editor state. * @return {Array} All annotations currently applied. */ function __experimentalGetAnnotations(state) { return Object.values(state).flat(); } ;// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-browser/native.js const randomUUID = typeof crypto !== 'undefined' && crypto.randomUUID && crypto.randomUUID.bind(crypto); /* harmony default export */ var esm_browser_native = ({ randomUUID }); ;// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-browser/rng.js // Unique ID creation requires a high quality random # generator. In the browser we therefore // require the crypto API and do not support built-in fallback to lower quality random number // generators (like Math.random()). let getRandomValues; const rnds8 = new Uint8Array(16); function rng() { // lazy load so that environments that need to polyfill have a chance to do so if (!getRandomValues) { // getRandomValues needs to be invoked in a context where "this" is a Crypto implementation. getRandomValues = typeof crypto !== 'undefined' && crypto.getRandomValues && crypto.getRandomValues.bind(crypto); if (!getRandomValues) { throw new Error('crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported'); } } return getRandomValues(rnds8); } ;// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-browser/stringify.js /** * Convert array of 16 byte values to UUID string format of the form: * XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX */ const byteToHex = []; for (let i = 0; i < 256; ++i) { byteToHex.push((i + 0x100).toString(16).slice(1)); } function unsafeStringify(arr, offset = 0) { // Note: Be careful editing this code! It's been tuned for performance // and works in ways you may not expect. See https://github.com/uuidjs/uuid/pull/434 return byteToHex[arr[offset + 0]] + byteToHex[arr[offset + 1]] + byteToHex[arr[offset + 2]] + byteToHex[arr[offset + 3]] + '-' + byteToHex[arr[offset + 4]] + byteToHex[arr[offset + 5]] + '-' + byteToHex[arr[offset + 6]] + byteToHex[arr[offset + 7]] + '-' + byteToHex[arr[offset + 8]] + byteToHex[arr[offset + 9]] + '-' + byteToHex[arr[offset + 10]] + byteToHex[arr[offset + 11]] + byteToHex[arr[offset + 12]] + byteToHex[arr[offset + 13]] + byteToHex[arr[offset + 14]] + byteToHex[arr[offset + 15]]; } function stringify(arr, offset = 0) { const uuid = unsafeStringify(arr, offset); // Consistency check for valid UUID. If this throws, it's likely due to one // of the following: // - One or more input array values don't map to a hex octet (leading to // "undefined" in the uuid) // - Invalid input values for the RFC `version` or `variant` fields if (!validate(uuid)) { throw TypeError('Stringified UUID is invalid'); } return uuid; } /* harmony default export */ var esm_browser_stringify = ((/* unused pure expression or super */ null && (stringify))); ;// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-browser/v4.js function v4(options, buf, offset) { if (esm_browser_native.randomUUID && !buf && !options) { return esm_browser_native.randomUUID(); } options = options || {}; const rnds = options.random || (options.rng || rng)(); // Per 4.4, set bits for version and `clock_seq_hi_and_reserved` rnds[6] = rnds[6] & 0x0f | 0x40; rnds[8] = rnds[8] & 0x3f | 0x80; // Copy bytes to buffer, if provided if (buf) { offset = offset || 0; for (let i = 0; i < 16; ++i) { buf[offset + i] = rnds[i]; } return buf; } return unsafeStringify(rnds); } /* harmony default export */ var esm_browser_v4 = (v4); ;// CONCATENATED MODULE: ./node_modules/@wordpress/annotations/build-module/store/actions.js /** * External dependencies */ /** * @typedef WPAnnotationRange * * @property {number} start The offset where the annotation should start. * @property {number} end The offset where the annotation should end. */ /** * Adds an annotation to a block. * * The `block` attribute refers to a block ID that needs to be annotated. * `isBlockAnnotation` controls whether or not the annotation is a block * annotation. The `source` is the source of the annotation, this will be used * to identity groups of annotations. * * The `range` property is only relevant if the selector is 'range'. * * @param {Object} annotation The annotation to add. * @param {string} annotation.blockClientId The blockClientId to add the annotation to. * @param {string} annotation.richTextIdentifier Identifier for the RichText instance the annotation applies to. * @param {WPAnnotationRange} annotation.range The range at which to apply this annotation. * @param {string} [annotation.selector="range"] The way to apply this annotation. * @param {string} [annotation.source="default"] The source that added the annotation. * @param {string} [annotation.id] The ID the annotation should have. Generates a UUID by default. * * @return {Object} Action object. */ function __experimentalAddAnnotation({ blockClientId, richTextIdentifier = null, range = null, selector = 'range', source = 'default', id = esm_browser_v4() }) { const action = { type: 'ANNOTATION_ADD', id, blockClientId, richTextIdentifier, source, selector }; if (selector === 'range') { action.range = range; } return action; } /** * Removes an annotation with a specific ID. * * @param {string} annotationId The annotation to remove. * * @return {Object} Action object. */ function __experimentalRemoveAnnotation(annotationId) { return { type: 'ANNOTATION_REMOVE', annotationId }; } /** * Updates the range of an annotation. * * @param {string} annotationId ID of the annotation to update. * @param {number} start The start of the new range. * @param {number} end The end of the new range. * * @return {Object} Action object. */ function __experimentalUpdateAnnotationRange(annotationId, start, end) { return { type: 'ANNOTATION_UPDATE_RANGE', annotationId, start, end }; } /** * Removes all annotations of a specific source. * * @param {string} source The source to remove. * * @return {Object} Action object. */ function __experimentalRemoveAnnotationsBySource(source) { return { type: 'ANNOTATION_REMOVE_SOURCE', source }; } ;// CONCATENATED MODULE: ./node_modules/@wordpress/annotations/build-module/store/index.js /** * WordPress dependencies */ /** * Internal dependencies */ /** * Module Constants */ /** * Store definition for the annotations namespace. * * @see https://github.com/WordPress/gutenberg/blob/HEAD/packages/data/README.md#createReduxStore * * @type {Object} */ const store = (0,external_wp_data_namespaceObject.createReduxStore)(STORE_NAME, { reducer: reducer, selectors: selectors_namespaceObject, actions: actions_namespaceObject }); (0,external_wp_data_namespaceObject.register)(store); ;// CONCATENATED MODULE: ./node_modules/@wordpress/annotations/build-module/index.js /** * Internal dependencies */ (window.wp = window.wp || {}).annotations = __webpack_exports__; /******/ })() ;annotations.min.js000064400000015041151230346260010224 0ustar00/*! This file is auto-generated */ !function(){"use strict";var e={d:function(t,n){for(var r in n)e.o(n,r)&&!e.o(t,r)&&Object.defineProperty(t,r,{enumerable:!0,get:n[r]})},o:function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},r:function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})}},t={};e.r(t),e.d(t,{store:function(){return G}});var n={};e.r(n),e.d(n,{__experimentalGetAllAnnotationsForBlock:function(){return N},__experimentalGetAnnotations:function(){return O},__experimentalGetAnnotationsForBlock:function(){return T},__experimentalGetAnnotationsForRichText:function(){return b}});var r={};e.r(r),e.d(r,{__experimentalAddAnnotation:function(){return S},__experimentalRemoveAnnotation:function(){return C},__experimentalRemoveAnnotationsBySource:function(){return F},__experimentalUpdateAnnotationRange:function(){return P}});var o=window.wp.richText,a=window.wp.i18n;const i="core/annotations",u="core/annotation",c="annotation-text-";const l={name:u,title:(0,a.__)("Annotation"),tagName:"mark",className:"annotation-text",attributes:{className:"class",id:"id"},edit(){return null},__experimentalGetPropsForEditableTreePreparation(e,{richTextIdentifier:t,blockClientId:n}){return{annotations:e(i).__experimentalGetAnnotationsForRichText(n,t)}},__experimentalCreatePrepareEditableTree({annotations:e}){return(t,n)=>{if(0===e.length)return t;let r={formats:t,text:n};return r=function(e,t=[]){return t.forEach((t=>{let{start:n,end:r}=t;n>e.text.length&&(n=e.text.length),r>e.text.length&&(r=e.text.length);const a=c+t.source,i=c+t.id;e=(0,o.applyFormat)(e,{type:u,attributes:{className:a,id:i}},n,r)})),e}(r,e),r.formats}},__experimentalGetPropsForEditableTreeChangeHandler(e){return{removeAnnotation:e(i).__experimentalRemoveAnnotation,updateAnnotationRange:e(i).__experimentalUpdateAnnotationRange}},__experimentalCreateOnChangeEditableValue(e){return t=>{const n=function(e){const t={};return e.forEach(((e,n)=>{(e=(e=e||[]).filter((e=>e.type===u))).forEach((e=>{let{id:r}=e.attributes;r=r.replace(c,""),t.hasOwnProperty(r)||(t[r]={start:n}),t[r].end=n+1}))})),t}(t),{removeAnnotation:r,updateAnnotationRange:o,annotations:a}=e;!function(e,t,{removeAnnotation:n,updateAnnotationRange:r}){e.forEach((e=>{const o=t[e.id];if(!o)return void n(e.id);const{start:a,end:i}=e;a===o.start&&i===o.end||r(e.id,o.start,o.end)}))}(a,n,{removeAnnotation:r,updateAnnotationRange:o})}}},{name:s,...d}=l;(0,o.registerFormatType)(s,d);var p=window.wp.hooks,f=window.wp.data;function m(e,t){const n=e.filter(t);return e.length===n.length?e:n}(0,p.addFilter)("editor.BlockListBlock","core/annotations",(e=>(0,f.withSelect)(((e,{clientId:t,className:n})=>({className:e(i).__experimentalGetAnnotationsForBlock(t).map((e=>"is-annotated-by-"+e.source)).concat(n).filter(Boolean).join(" ")})))(e)));const g=(e,t)=>Object.entries(e).reduce(((e,[n,r])=>({...e,[n]:t(r)})),{});var h=function(e={},t){var n;switch(t.type){case"ANNOTATION_ADD":const r=t.blockClientId,o={id:t.id,blockClientId:r,richTextIdentifier:t.richTextIdentifier,source:t.source,selector:t.selector,range:t.range};if("range"===o.selector&&!function(e){return"number"==typeof e.start&&"number"==typeof e.end&&e.start<=e.end}(o.range))return e;const a=null!==(n=e?.[r])&&void 0!==n?n:[];return{...e,[r]:[...a,o]};case"ANNOTATION_REMOVE":return g(e,(e=>m(e,(e=>e.id!==t.annotationId))));case"ANNOTATION_UPDATE_RANGE":return g(e,(e=>{let n=!1;const r=e.map((e=>e.id===t.annotationId?(n=!0,{...e,range:{start:t.start,end:t.end}}):e));return n?r:e}));case"ANNOTATION_REMOVE_SOURCE":return g(e,(e=>m(e,(e=>e.source!==t.source))))}return e},_={};function v(e){return[e]}function A(e,t,n){var r;if(e.length!==t.length)return!1;for(r=n;r{var n;return(null!==(n=e?.[t])&&void 0!==n?n:[]).filter((e=>"block"===e.selector))}),((e,t)=>{var n;return[null!==(n=e?.[t])&&void 0!==n?n:x]}));function N(e,t){var n;return null!==(n=e?.[t])&&void 0!==n?n:x}const b=y(((e,t,n)=>{var r;return(null!==(r=e?.[t])&&void 0!==r?r:[]).filter((e=>"range"===e.selector&&n===e.richTextIdentifier)).map((e=>{const{range:t,...n}=e;return{...t,...n}}))}),((e,t)=>{var n;return[null!==(n=e?.[t])&&void 0!==n?n:x]}));function O(e){return Object.values(e).flat()}var I={randomUUID:"undefined"!=typeof crypto&&crypto.randomUUID&&crypto.randomUUID.bind(crypto)};let w;const E=new Uint8Array(16);function R(){if(!w&&(w="undefined"!=typeof crypto&&crypto.getRandomValues&&crypto.getRandomValues.bind(crypto),!w))throw new Error("crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported");return w(E)}const U=[];for(let e=0;e<256;++e)U.push((e+256).toString(16).slice(1));function D(e,t=0){return U[e[t+0]]+U[e[t+1]]+U[e[t+2]]+U[e[t+3]]+"-"+U[e[t+4]]+U[e[t+5]]+"-"+U[e[t+6]]+U[e[t+7]]+"-"+U[e[t+8]]+U[e[t+9]]+"-"+U[e[t+10]]+U[e[t+11]]+U[e[t+12]]+U[e[t+13]]+U[e[t+14]]+U[e[t+15]]}var k=function(e,t,n){if(I.randomUUID&&!t&&!e)return I.randomUUID();const r=(e=e||{}).random||(e.rng||R)();if(r[6]=15&r[6]|64,r[8]=63&r[8]|128,t){n=n||0;for(let e=0;e<16;++e)t[n+e]=r[e];return t}return D(r)};function S({blockClientId:e,richTextIdentifier:t=null,range:n=null,selector:r="range",source:o="default",id:a=k()}){const i={type:"ANNOTATION_ADD",id:a,blockClientId:e,richTextIdentifier:t,source:o,selector:r};return"range"===r&&(i.range=n),i}function C(e){return{type:"ANNOTATION_REMOVE",annotationId:e}}function P(e,t,n){return{type:"ANNOTATION_UPDATE_RANGE",annotationId:e,start:t,end:n}}function F(e){return{type:"ANNOTATION_REMOVE_SOURCE",source:e}}const G=(0,f.createReduxStore)(i,{reducer:h,selectors:n,actions:r});(0,f.register)(G),(window.wp=window.wp||{}).annotations=t}();api-fetch.js000064400000054452151230346260006756 0ustar00/******/ (function() { // webpackBootstrap /******/ "use strict"; /******/ // The require scope /******/ var __webpack_require__ = {}; /******/ /************************************************************************/ /******/ /* webpack/runtime/define property getters */ /******/ !function() { /******/ // define getter functions for harmony exports /******/ __webpack_require__.d = function(exports, definition) { /******/ for(var key in definition) { /******/ if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) { /******/ Object.defineProperty(exports, key, { enumerable: true, get: definition[key] }); /******/ } /******/ } /******/ }; /******/ }(); /******/ /******/ /* webpack/runtime/hasOwnProperty shorthand */ /******/ !function() { /******/ __webpack_require__.o = function(obj, prop) { return Object.prototype.hasOwnProperty.call(obj, prop); } /******/ }(); /******/ /************************************************************************/ var __webpack_exports__ = {}; // EXPORTS __webpack_require__.d(__webpack_exports__, { "default": function() { return /* binding */ build_module; } }); ;// CONCATENATED MODULE: external ["wp","i18n"] var external_wp_i18n_namespaceObject = window["wp"]["i18n"]; ;// CONCATENATED MODULE: ./node_modules/@wordpress/api-fetch/build-module/middlewares/nonce.js /** * @param {string} nonce * @return {import('../types').APIFetchMiddleware & { nonce: string }} A middleware to enhance a request with a nonce. */ function createNonceMiddleware(nonce) { /** * @type {import('../types').APIFetchMiddleware & { nonce: string }} */ const middleware = (options, next) => { const { headers = {} } = options; // If an 'X-WP-Nonce' header (or any case-insensitive variation // thereof) was specified, no need to add a nonce header. for (const headerName in headers) { if (headerName.toLowerCase() === 'x-wp-nonce' && headers[headerName] === middleware.nonce) { return next(options); } } return next({ ...options, headers: { ...headers, 'X-WP-Nonce': middleware.nonce } }); }; middleware.nonce = nonce; return middleware; } /* harmony default export */ var nonce = (createNonceMiddleware); ;// CONCATENATED MODULE: ./node_modules/@wordpress/api-fetch/build-module/middlewares/namespace-endpoint.js /** * @type {import('../types').APIFetchMiddleware} */ const namespaceAndEndpointMiddleware = (options, next) => { let path = options.path; let namespaceTrimmed, endpointTrimmed; if (typeof options.namespace === 'string' && typeof options.endpoint === 'string') { namespaceTrimmed = options.namespace.replace(/^\/|\/$/g, ''); endpointTrimmed = options.endpoint.replace(/^\//, ''); if (endpointTrimmed) { path = namespaceTrimmed + '/' + endpointTrimmed; } else { path = namespaceTrimmed; } } delete options.namespace; delete options.endpoint; return next({ ...options, path }); }; /* harmony default export */ var namespace_endpoint = (namespaceAndEndpointMiddleware); ;// CONCATENATED MODULE: ./node_modules/@wordpress/api-fetch/build-module/middlewares/root-url.js /** * Internal dependencies */ /** * @param {string} rootURL * @return {import('../types').APIFetchMiddleware} Root URL middleware. */ const createRootURLMiddleware = rootURL => (options, next) => { return namespace_endpoint(options, optionsWithPath => { let url = optionsWithPath.url; let path = optionsWithPath.path; let apiRoot; if (typeof path === 'string') { apiRoot = rootURL; if (-1 !== rootURL.indexOf('?')) { path = path.replace('?', '&'); } path = path.replace(/^\//, ''); // API root may already include query parameter prefix if site is // configured to use plain permalinks. if ('string' === typeof apiRoot && -1 !== apiRoot.indexOf('?')) { path = path.replace('?', '&'); } url = apiRoot + path; } return next({ ...optionsWithPath, url }); }); }; /* harmony default export */ var root_url = (createRootURLMiddleware); ;// CONCATENATED MODULE: external ["wp","url"] var external_wp_url_namespaceObject = window["wp"]["url"]; ;// CONCATENATED MODULE: ./node_modules/@wordpress/api-fetch/build-module/middlewares/preloading.js /** * WordPress dependencies */ /** * @param {Record} preloadedData * @return {import('../types').APIFetchMiddleware} Preloading middleware. */ function createPreloadingMiddleware(preloadedData) { const cache = Object.fromEntries(Object.entries(preloadedData).map(([path, data]) => [(0,external_wp_url_namespaceObject.normalizePath)(path), data])); return (options, next) => { const { parse = true } = options; /** @type {string | void} */ let rawPath = options.path; if (!rawPath && options.url) { const { rest_route: pathFromQuery, ...queryArgs } = (0,external_wp_url_namespaceObject.getQueryArgs)(options.url); if (typeof pathFromQuery === 'string') { rawPath = (0,external_wp_url_namespaceObject.addQueryArgs)(pathFromQuery, queryArgs); } } if (typeof rawPath !== 'string') { return next(options); } const method = options.method || 'GET'; const path = (0,external_wp_url_namespaceObject.normalizePath)(rawPath); if ('GET' === method && cache[path]) { const cacheData = cache[path]; // Unsetting the cache key ensures that the data is only used a single time. delete cache[path]; return prepareResponse(cacheData, !!parse); } else if ('OPTIONS' === method && cache[method] && cache[method][path]) { const cacheData = cache[method][path]; // Unsetting the cache key ensures that the data is only used a single time. delete cache[method][path]; return prepareResponse(cacheData, !!parse); } return next(options); }; } /** * This is a helper function that sends a success response. * * @param {Record} responseData * @param {boolean} parse * @return {Promise} Promise with the response. */ function prepareResponse(responseData, parse) { return Promise.resolve(parse ? responseData.body : new window.Response(JSON.stringify(responseData.body), { status: 200, statusText: 'OK', headers: responseData.headers })); } /* harmony default export */ var preloading = (createPreloadingMiddleware); ;// CONCATENATED MODULE: ./node_modules/@wordpress/api-fetch/build-module/middlewares/fetch-all-middleware.js /** * WordPress dependencies */ /** * Internal dependencies */ /** * Apply query arguments to both URL and Path, whichever is present. * * @param {import('../types').APIFetchOptions} props * @param {Record} queryArgs * @return {import('../types').APIFetchOptions} The request with the modified query args */ const modifyQuery = ({ path, url, ...options }, queryArgs) => ({ ...options, url: url && (0,external_wp_url_namespaceObject.addQueryArgs)(url, queryArgs), path: path && (0,external_wp_url_namespaceObject.addQueryArgs)(path, queryArgs) }); /** * Duplicates parsing functionality from apiFetch. * * @param {Response} response * @return {Promise} Parsed response json. */ const parseResponse = response => response.json ? response.json() : Promise.reject(response); /** * @param {string | null} linkHeader * @return {{ next?: string }} The parsed link header. */ const parseLinkHeader = linkHeader => { if (!linkHeader) { return {}; } const match = linkHeader.match(/<([^>]+)>; rel="next"/); return match ? { next: match[1] } : {}; }; /** * @param {Response} response * @return {string | undefined} The next page URL. */ const getNextPageUrl = response => { const { next } = parseLinkHeader(response.headers.get('link')); return next; }; /** * @param {import('../types').APIFetchOptions} options * @return {boolean} True if the request contains an unbounded query. */ const requestContainsUnboundedQuery = options => { const pathIsUnbounded = !!options.path && options.path.indexOf('per_page=-1') !== -1; const urlIsUnbounded = !!options.url && options.url.indexOf('per_page=-1') !== -1; return pathIsUnbounded || urlIsUnbounded; }; /** * The REST API enforces an upper limit on the per_page option. To handle large * collections, apiFetch consumers can pass `per_page=-1`; this middleware will * then recursively assemble a full response array from all available pages. * * @type {import('../types').APIFetchMiddleware} */ const fetchAllMiddleware = async (options, next) => { if (options.parse === false) { // If a consumer has opted out of parsing, do not apply middleware. return next(options); } if (!requestContainsUnboundedQuery(options)) { // If neither url nor path is requesting all items, do not apply middleware. return next(options); } // Retrieve requested page of results. const response = await build_module({ ...modifyQuery(options, { per_page: 100 }), // Ensure headers are returned for page 1. parse: false }); const results = await parseResponse(response); if (!Array.isArray(results)) { // We have no reliable way of merging non-array results. return results; } let nextPage = getNextPageUrl(response); if (!nextPage) { // There are no further pages to request. return results; } // Iteratively fetch all remaining pages until no "next" header is found. let mergedResults = /** @type {any[]} */[].concat(results); while (nextPage) { const nextResponse = await build_module({ ...options, // Ensure the URL for the next page is used instead of any provided path. path: undefined, url: nextPage, // Ensure we still get headers so we can identify the next page. parse: false }); const nextResults = await parseResponse(nextResponse); mergedResults = mergedResults.concat(nextResults); nextPage = getNextPageUrl(nextResponse); } return mergedResults; }; /* harmony default export */ var fetch_all_middleware = (fetchAllMiddleware); ;// CONCATENATED MODULE: ./node_modules/@wordpress/api-fetch/build-module/middlewares/http-v1.js /** * Set of HTTP methods which are eligible to be overridden. * * @type {Set} */ const OVERRIDE_METHODS = new Set(['PATCH', 'PUT', 'DELETE']); /** * Default request method. * * "A request has an associated method (a method). Unless stated otherwise it * is `GET`." * * @see https://fetch.spec.whatwg.org/#requests * * @type {string} */ const DEFAULT_METHOD = 'GET'; /** * API Fetch middleware which overrides the request method for HTTP v1 * compatibility leveraging the REST API X-HTTP-Method-Override header. * * @type {import('../types').APIFetchMiddleware} */ const httpV1Middleware = (options, next) => { const { method = DEFAULT_METHOD } = options; if (OVERRIDE_METHODS.has(method.toUpperCase())) { options = { ...options, headers: { ...options.headers, 'X-HTTP-Method-Override': method, 'Content-Type': 'application/json' }, method: 'POST' }; } return next(options); }; /* harmony default export */ var http_v1 = (httpV1Middleware); ;// CONCATENATED MODULE: ./node_modules/@wordpress/api-fetch/build-module/middlewares/user-locale.js /** * WordPress dependencies */ /** * @type {import('../types').APIFetchMiddleware} */ const userLocaleMiddleware = (options, next) => { if (typeof options.url === 'string' && !(0,external_wp_url_namespaceObject.hasQueryArg)(options.url, '_locale')) { options.url = (0,external_wp_url_namespaceObject.addQueryArgs)(options.url, { _locale: 'user' }); } if (typeof options.path === 'string' && !(0,external_wp_url_namespaceObject.hasQueryArg)(options.path, '_locale')) { options.path = (0,external_wp_url_namespaceObject.addQueryArgs)(options.path, { _locale: 'user' }); } return next(options); }; /* harmony default export */ var user_locale = (userLocaleMiddleware); ;// CONCATENATED MODULE: ./node_modules/@wordpress/api-fetch/build-module/utils/response.js /** * WordPress dependencies */ /** * Parses the apiFetch response. * * @param {Response} response * @param {boolean} shouldParseResponse * * @return {Promise | null | Response} Parsed response. */ const response_parseResponse = (response, shouldParseResponse = true) => { if (shouldParseResponse) { if (response.status === 204) { return null; } return response.json ? response.json() : Promise.reject(response); } return response; }; /** * Calls the `json` function on the Response, throwing an error if the response * doesn't have a json function or if parsing the json itself fails. * * @param {Response} response * @return {Promise} Parsed response. */ const parseJsonAndNormalizeError = response => { const invalidJsonError = { code: 'invalid_json', message: (0,external_wp_i18n_namespaceObject.__)('The response is not a valid JSON response.') }; if (!response || !response.json) { throw invalidJsonError; } return response.json().catch(() => { throw invalidJsonError; }); }; /** * Parses the apiFetch response properly and normalize response errors. * * @param {Response} response * @param {boolean} shouldParseResponse * * @return {Promise} Parsed response. */ const parseResponseAndNormalizeError = (response, shouldParseResponse = true) => { return Promise.resolve(response_parseResponse(response, shouldParseResponse)).catch(res => parseAndThrowError(res, shouldParseResponse)); }; /** * Parses a response, throwing an error if parsing the response fails. * * @param {Response} response * @param {boolean} shouldParseResponse * @return {Promise} Parsed response. */ function parseAndThrowError(response, shouldParseResponse = true) { if (!shouldParseResponse) { throw response; } return parseJsonAndNormalizeError(response).then(error => { const unknownError = { code: 'unknown_error', message: (0,external_wp_i18n_namespaceObject.__)('An unknown error occurred.') }; throw error || unknownError; }); } ;// CONCATENATED MODULE: ./node_modules/@wordpress/api-fetch/build-module/middlewares/media-upload.js /** * WordPress dependencies */ /** * Internal dependencies */ /** * @param {import('../types').APIFetchOptions} options * @return {boolean} True if the request is for media upload. */ function isMediaUploadRequest(options) { const isCreateMethod = !!options.method && options.method === 'POST'; const isMediaEndpoint = !!options.path && options.path.indexOf('/wp/v2/media') !== -1 || !!options.url && options.url.indexOf('/wp/v2/media') !== -1; return isMediaEndpoint && isCreateMethod; } /** * Middleware handling media upload failures and retries. * * @type {import('../types').APIFetchMiddleware} */ const mediaUploadMiddleware = (options, next) => { if (!isMediaUploadRequest(options)) { return next(options); } let retries = 0; const maxRetries = 5; /** * @param {string} attachmentId * @return {Promise} Processed post response. */ const postProcess = attachmentId => { retries++; return next({ path: `/wp/v2/media/${attachmentId}/post-process`, method: 'POST', data: { action: 'create-image-subsizes' }, parse: false }).catch(() => { if (retries < maxRetries) { return postProcess(attachmentId); } next({ path: `/wp/v2/media/${attachmentId}?force=true`, method: 'DELETE' }); return Promise.reject(); }); }; return next({ ...options, parse: false }).catch(response => { const attachmentId = response.headers.get('x-wp-upload-attachment-id'); if (response.status >= 500 && response.status < 600 && attachmentId) { return postProcess(attachmentId).catch(() => { if (options.parse !== false) { return Promise.reject({ code: 'post_process', message: (0,external_wp_i18n_namespaceObject.__)('Media upload failed. If this is a photo or a large image, please scale it down and try again.') }); } return Promise.reject(response); }); } return parseAndThrowError(response, options.parse); }).then(response => parseResponseAndNormalizeError(response, options.parse)); }; /* harmony default export */ var media_upload = (mediaUploadMiddleware); ;// CONCATENATED MODULE: ./node_modules/@wordpress/api-fetch/build-module/middlewares/theme-preview.js /** * WordPress dependencies */ /** * This appends a `wp_theme_preview` parameter to the REST API request URL if * the admin URL contains a `theme` GET parameter. * * @param {Record} themePath * @return {import('../types').APIFetchMiddleware} Preloading middleware. */ const createThemePreviewMiddleware = themePath => (options, next) => { if (typeof options.url === 'string' && !(0,external_wp_url_namespaceObject.hasQueryArg)(options.url, 'wp_theme_preview')) { options.url = (0,external_wp_url_namespaceObject.addQueryArgs)(options.url, { wp_theme_preview: themePath }); } if (typeof options.path === 'string' && !(0,external_wp_url_namespaceObject.hasQueryArg)(options.path, 'wp_theme_preview')) { options.path = (0,external_wp_url_namespaceObject.addQueryArgs)(options.path, { wp_theme_preview: themePath }); } return next(options); }; /* harmony default export */ var theme_preview = (createThemePreviewMiddleware); ;// CONCATENATED MODULE: ./node_modules/@wordpress/api-fetch/build-module/index.js /** * WordPress dependencies */ /** * Internal dependencies */ /** * Default set of header values which should be sent with every request unless * explicitly provided through apiFetch options. * * @type {Record} */ const DEFAULT_HEADERS = { // The backend uses the Accept header as a condition for considering an // incoming request as a REST request. // // See: https://core.trac.wordpress.org/ticket/44534 Accept: 'application/json, */*;q=0.1' }; /** * Default set of fetch option values which should be sent with every request * unless explicitly provided through apiFetch options. * * @type {Object} */ const DEFAULT_OPTIONS = { credentials: 'include' }; /** @typedef {import('./types').APIFetchMiddleware} APIFetchMiddleware */ /** @typedef {import('./types').APIFetchOptions} APIFetchOptions */ /** * @type {import('./types').APIFetchMiddleware[]} */ const middlewares = [user_locale, namespace_endpoint, http_v1, fetch_all_middleware]; /** * Register a middleware * * @param {import('./types').APIFetchMiddleware} middleware */ function registerMiddleware(middleware) { middlewares.unshift(middleware); } /** * Checks the status of a response, throwing the Response as an error if * it is outside the 200 range. * * @param {Response} response * @return {Response} The response if the status is in the 200 range. */ const checkStatus = response => { if (response.status >= 200 && response.status < 300) { return response; } throw response; }; /** @typedef {(options: import('./types').APIFetchOptions) => Promise} FetchHandler*/ /** * @type {FetchHandler} */ const defaultFetchHandler = nextOptions => { const { url, path, data, parse = true, ...remainingOptions } = nextOptions; let { body, headers } = nextOptions; // Merge explicitly-provided headers with default values. headers = { ...DEFAULT_HEADERS, ...headers }; // The `data` property is a shorthand for sending a JSON body. if (data) { body = JSON.stringify(data); headers['Content-Type'] = 'application/json'; } const responsePromise = window.fetch( // Fall back to explicitly passing `window.location` which is the behavior if `undefined` is passed. url || path || window.location.href, { ...DEFAULT_OPTIONS, ...remainingOptions, body, headers }); return responsePromise.then(value => Promise.resolve(value).then(checkStatus).catch(response => parseAndThrowError(response, parse)).then(response => parseResponseAndNormalizeError(response, parse)), err => { // Re-throw AbortError for the users to handle it themselves. if (err && err.name === 'AbortError') { throw err; } // Otherwise, there is most likely no network connection. // Unfortunately the message might depend on the browser. throw { code: 'fetch_error', message: (0,external_wp_i18n_namespaceObject.__)('You are probably offline.') }; }); }; /** @type {FetchHandler} */ let fetchHandler = defaultFetchHandler; /** * Defines a custom fetch handler for making the requests that will override * the default one using window.fetch * * @param {FetchHandler} newFetchHandler The new fetch handler */ function setFetchHandler(newFetchHandler) { fetchHandler = newFetchHandler; } /** * @template T * @param {import('./types').APIFetchOptions} options * @return {Promise} A promise representing the request processed via the registered middlewares. */ function apiFetch(options) { // creates a nested function chain that calls all middlewares and finally the `fetchHandler`, // converting `middlewares = [ m1, m2, m3 ]` into: // ``` // opts1 => m1( opts1, opts2 => m2( opts2, opts3 => m3( opts3, fetchHandler ) ) ); // ``` const enhancedHandler = middlewares.reduceRight(( /** @type {FetchHandler} */next, middleware) => { return workingOptions => middleware(workingOptions, next); }, fetchHandler); return enhancedHandler(options).catch(error => { if (error.code !== 'rest_cookie_invalid_nonce') { return Promise.reject(error); } // If the nonce is invalid, refresh it and try again. return window // @ts-ignore .fetch(apiFetch.nonceEndpoint).then(checkStatus).then(data => data.text()).then(text => { // @ts-ignore apiFetch.nonceMiddleware.nonce = text; return apiFetch(options); }); }); } apiFetch.use = registerMiddleware; apiFetch.setFetchHandler = setFetchHandler; apiFetch.createNonceMiddleware = nonce; apiFetch.createPreloadingMiddleware = preloading; apiFetch.createRootURLMiddleware = root_url; apiFetch.fetchAllMiddleware = fetch_all_middleware; apiFetch.mediaUploadMiddleware = media_upload; apiFetch.createThemePreviewMiddleware = theme_preview; /* harmony default export */ var build_module = (apiFetch); (window.wp = window.wp || {}).apiFetch = __webpack_exports__["default"]; /******/ })() ;api-fetch.min.js000064400000012420151230346260007525 0ustar00/*! This file is auto-generated */ !function(){"use strict";var e={d:function(t,r){for(var n in r)e.o(r,n)&&!e.o(t,n)&&Object.defineProperty(t,n,{enumerable:!0,get:r[n]})},o:function(e,t){return Object.prototype.hasOwnProperty.call(e,t)}},t={};e.d(t,{default:function(){return T}});var r=window.wp.i18n;var n=function(e){const t=(e,r)=>{const{headers:n={}}=e;for(const a in n)if("x-wp-nonce"===a.toLowerCase()&&n[a]===t.nonce)return r(e);return r({...e,headers:{...n,"X-WP-Nonce":t.nonce}})};return t.nonce=e,t};var a=(e,t)=>{let r,n,a=e.path;return"string"==typeof e.namespace&&"string"==typeof e.endpoint&&(r=e.namespace.replace(/^\/|\/$/g,""),n=e.endpoint.replace(/^\//,""),a=n?r+"/"+n:r),delete e.namespace,delete e.endpoint,t({...e,path:a})};var o=e=>(t,r)=>a(t,(t=>{let n,a=t.url,o=t.path;return"string"==typeof o&&(n=e,-1!==e.indexOf("?")&&(o=o.replace("?","&")),o=o.replace(/^\//,""),"string"==typeof n&&-1!==n.indexOf("?")&&(o=o.replace("?","&")),a=n+o),r({...t,url:a})})),s=window.wp.url;function i(e,t){return Promise.resolve(t?e.body:new window.Response(JSON.stringify(e.body),{status:200,statusText:"OK",headers:e.headers}))}var c=function(e){const t=Object.fromEntries(Object.entries(e).map((([e,t])=>[(0,s.normalizePath)(e),t])));return(e,r)=>{const{parse:n=!0}=e;let a=e.path;if(!a&&e.url){const{rest_route:t,...r}=(0,s.getQueryArgs)(e.url);"string"==typeof t&&(a=(0,s.addQueryArgs)(t,r))}if("string"!=typeof a)return r(e);const o=e.method||"GET",c=(0,s.normalizePath)(a);if("GET"===o&&t[c]){const e=t[c];return delete t[c],i(e,!!n)}if("OPTIONS"===o&&t[o]&&t[o][c]){const e=t[o][c];return delete t[o][c],i(e,!!n)}return r(e)}};const d=({path:e,url:t,...r},n)=>({...r,url:t&&(0,s.addQueryArgs)(t,n),path:e&&(0,s.addQueryArgs)(e,n)}),p=e=>e.json?e.json():Promise.reject(e),u=e=>{const{next:t}=(e=>{if(!e)return{};const t=e.match(/<([^>]+)>; rel="next"/);return t?{next:t[1]}:{}})(e.headers.get("link"));return t};var h=async(e,t)=>{if(!1===e.parse)return t(e);if(!(e=>{const t=!!e.path&&-1!==e.path.indexOf("per_page=-1"),r=!!e.url&&-1!==e.url.indexOf("per_page=-1");return t||r})(e))return t(e);const r=await T({...d(e,{per_page:100}),parse:!1}),n=await p(r);if(!Array.isArray(n))return n;let a=u(r);if(!a)return n;let o=[].concat(n);for(;a;){const t=await T({...e,path:void 0,url:a,parse:!1}),r=await p(t);o=o.concat(r),a=u(t)}return o};const l=new Set(["PATCH","PUT","DELETE"]),f="GET";const w=(e,t=!0)=>Promise.resolve(((e,t=!0)=>t?204===e.status?null:e.json?e.json():Promise.reject(e):e)(e,t)).catch((e=>m(e,t)));function m(e,t=!0){if(!t)throw e;return(e=>{const t={code:"invalid_json",message:(0,r.__)("The response is not a valid JSON response.")};if(!e||!e.json)throw t;return e.json().catch((()=>{throw t}))})(e).then((e=>{const t={code:"unknown_error",message:(0,r.__)("An unknown error occurred.")};throw e||t}))}var g=(e,t)=>{if(!function(e){const t=!!e.method&&"POST"===e.method;return(!!e.path&&-1!==e.path.indexOf("/wp/v2/media")||!!e.url&&-1!==e.url.indexOf("/wp/v2/media"))&&t}(e))return t(e);let n=0;const a=e=>(n++,t({path:`/wp/v2/media/${e}/post-process`,method:"POST",data:{action:"create-image-subsizes"},parse:!1}).catch((()=>n<5?a(e):(t({path:`/wp/v2/media/${e}?force=true`,method:"DELETE"}),Promise.reject()))));return t({...e,parse:!1}).catch((t=>{const n=t.headers.get("x-wp-upload-attachment-id");return t.status>=500&&t.status<600&&n?a(n).catch((()=>!1!==e.parse?Promise.reject({code:"post_process",message:(0,r.__)("Media upload failed. If this is a photo or a large image, please scale it down and try again.")}):Promise.reject(t))):m(t,e.parse)})).then((t=>w(t,e.parse)))};var y=e=>(t,r)=>("string"!=typeof t.url||(0,s.hasQueryArg)(t.url,"wp_theme_preview")||(t.url=(0,s.addQueryArgs)(t.url,{wp_theme_preview:e})),"string"!=typeof t.path||(0,s.hasQueryArg)(t.path,"wp_theme_preview")||(t.path=(0,s.addQueryArgs)(t.path,{wp_theme_preview:e})),r(t));const _={Accept:"application/json, */*;q=0.1"},v={credentials:"include"},P=[(e,t)=>("string"!=typeof e.url||(0,s.hasQueryArg)(e.url,"_locale")||(e.url=(0,s.addQueryArgs)(e.url,{_locale:"user"})),"string"!=typeof e.path||(0,s.hasQueryArg)(e.path,"_locale")||(e.path=(0,s.addQueryArgs)(e.path,{_locale:"user"})),t(e)),a,(e,t)=>{const{method:r=f}=e;return l.has(r.toUpperCase())&&(e={...e,headers:{...e.headers,"X-HTTP-Method-Override":r,"Content-Type":"application/json"},method:"POST"}),t(e)},h];const O=e=>{if(e.status>=200&&e.status<300)return e;throw e};let j=e=>{const{url:t,path:n,data:a,parse:o=!0,...s}=e;let{body:i,headers:c}=e;c={..._,...c},a&&(i=JSON.stringify(a),c["Content-Type"]="application/json");return window.fetch(t||n||window.location.href,{...v,...s,body:i,headers:c}).then((e=>Promise.resolve(e).then(O).catch((e=>m(e,o))).then((e=>w(e,o)))),(e=>{if(e&&"AbortError"===e.name)throw e;throw{code:"fetch_error",message:(0,r.__)("You are probably offline.")}}))};function A(e){return P.reduceRight(((e,t)=>r=>t(r,e)),j)(e).catch((t=>"rest_cookie_invalid_nonce"!==t.code?Promise.reject(t):window.fetch(A.nonceEndpoint).then(O).then((e=>e.text())).then((t=>(A.nonceMiddleware.nonce=t,A(e))))))}A.use=function(e){P.unshift(e)},A.setFetchHandler=function(e){j=e},A.createNonceMiddleware=n,A.createPreloadingMiddleware=c,A.createRootURLMiddleware=o,A.fetchAllMiddleware=h,A.mediaUploadMiddleware=g,A.createThemePreviewMiddleware=y;var T=A;(window.wp=window.wp||{}).apiFetch=t.default}();autop.js000064400000037636151230346260006253 0ustar00/******/ (function() { // webpackBootstrap /******/ "use strict"; /******/ // The require scope /******/ var __webpack_require__ = {}; /******/ /************************************************************************/ /******/ /* webpack/runtime/define property getters */ /******/ !function() { /******/ // define getter functions for harmony exports /******/ __webpack_require__.d = function(exports, definition) { /******/ for(var key in definition) { /******/ if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) { /******/ Object.defineProperty(exports, key, { enumerable: true, get: definition[key] }); /******/ } /******/ } /******/ }; /******/ }(); /******/ /******/ /* webpack/runtime/hasOwnProperty shorthand */ /******/ !function() { /******/ __webpack_require__.o = function(obj, prop) { return Object.prototype.hasOwnProperty.call(obj, prop); } /******/ }(); /******/ /******/ /* webpack/runtime/make namespace object */ /******/ !function() { /******/ // define __esModule on exports /******/ __webpack_require__.r = function(exports) { /******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) { /******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' }); /******/ } /******/ Object.defineProperty(exports, '__esModule', { value: true }); /******/ }; /******/ }(); /******/ /************************************************************************/ var __webpack_exports__ = {}; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ autop: function() { return /* binding */ autop; }, /* harmony export */ removep: function() { return /* binding */ removep; } /* harmony export */ }); /** * The regular expression for an HTML element. * * @type {RegExp} */ const htmlSplitRegex = (() => { /* eslint-disable no-multi-spaces */ const comments = '!' + // Start of comment, after the <. '(?:' + // Unroll the loop: Consume everything until --> is found. '-(?!->)' + // Dash not followed by end of comment. '[^\\-]*' + // Consume non-dashes. ')*' + // Loop possessively. '(?:-->)?'; // End of comment. If not found, match all input. const cdata = '!\\[CDATA\\[' + // Start of comment, after the <. '[^\\]]*' + // Consume non-]. '(?:' + // Unroll the loop: Consume everything until ]]> is found. '](?!]>)' + // One ] not followed by end of comment. '[^\\]]*' + // Consume non-]. ')*?' + // Loop possessively. '(?:]]>)?'; // End of comment. If not found, match all input. const escaped = '(?=' + // Is the element escaped? '!--' + '|' + '!\\[CDATA\\[' + ')' + '((?=!-)' + // If yes, which type? comments + '|' + cdata + ')'; const regex = '(' + // Capture the entire match. '<' + // Find start of element. '(' + // Conditional expression follows. escaped + // Find end of escaped element. '|' + // ... else ... '[^>]*>?' + // Find end of normal element. ')' + ')'; return new RegExp(regex); /* eslint-enable no-multi-spaces */ })(); /** * Separate HTML elements and comments from the text. * * @param {string} input The text which has to be formatted. * * @return {string[]} The formatted text. */ function htmlSplit(input) { const parts = []; let workingInput = input; let match; while (match = workingInput.match(htmlSplitRegex)) { // The `match` result, when invoked on a RegExp with the `g` flag (`/foo/g`) will not include `index`. // If the `g` flag is omitted, `index` is included. // `htmlSplitRegex` does not have the `g` flag so we can assert it will have an index number. // Assert `match.index` is a number. const index = /** @type {number} */match.index; parts.push(workingInput.slice(0, index)); parts.push(match[0]); workingInput = workingInput.slice(index + match[0].length); } if (workingInput.length) { parts.push(workingInput); } return parts; } /** * Replace characters or phrases within HTML elements only. * * @param {string} haystack The text which has to be formatted. * @param {Record} replacePairs In the form {from: 'to', …}. * * @return {string} The formatted text. */ function replaceInHtmlTags(haystack, replacePairs) { // Find all elements. const textArr = htmlSplit(haystack); let changed = false; // Extract all needles. const needles = Object.keys(replacePairs); // Loop through delimiters (elements) only. for (let i = 1; i < textArr.length; i += 2) { for (let j = 0; j < needles.length; j++) { const needle = needles[j]; if (-1 !== textArr[i].indexOf(needle)) { textArr[i] = textArr[i].replace(new RegExp(needle, 'g'), replacePairs[needle]); changed = true; // After one strtr() break out of the foreach loop and look at next element. break; } } } if (changed) { haystack = textArr.join(''); } return haystack; } /** * Replaces double line-breaks with paragraph elements. * * A group of regex replaces used to identify text formatted with newlines and * replace double line-breaks with HTML paragraph tags. The remaining line- * breaks after conversion become `
` tags, unless br is set to 'false'. * * @param {string} text The text which has to be formatted. * @param {boolean} br Optional. If set, will convert all remaining line- * breaks after paragraphing. Default true. * * @example *```js * import { autop } from '@wordpress/autop'; * autop( 'my text' ); // "

my text

" * ``` * * @return {string} Text which has been converted into paragraph tags. */ function autop(text, br = true) { const preTags = []; if (text.trim() === '') { return ''; } // Just to make things a little easier, pad the end. text = text + '\n'; /* * Pre tags shouldn't be touched by autop. * Replace pre tags with placeholders and bring them back after autop. */ if (text.indexOf(''); const lastText = textParts.pop(); text = ''; for (let i = 0; i < textParts.length; i++) { const textPart = textParts[i]; const start = textPart.indexOf(''; preTags.push([name, textPart.substr(start) + '']); text += textPart.substr(0, start) + name; } text += lastText; } // Change multiple
s into two line breaks, which will turn into paragraphs. text = text.replace(/\s*/g, '\n\n'); const allBlocks = '(?:table|thead|tfoot|caption|col|colgroup|tbody|tr|td|th|div|dl|dd|dt|ul|ol|li|pre|form|map|area|blockquote|address|math|style|p|h[1-6]|hr|fieldset|legend|section|article|aside|hgroup|header|footer|nav|figure|figcaption|details|menu|summary)'; // Add a double line break above block-level opening tags. text = text.replace(new RegExp('(<' + allBlocks + '[\\s/>])', 'g'), '\n\n$1'); // Add a double line break below block-level closing tags. text = text.replace(new RegExp('()', 'g'), '$1\n\n'); // Standardize newline characters to "\n". text = text.replace(/\r\n|\r/g, '\n'); // Find newlines in all elements and add placeholders. text = replaceInHtmlTags(text, { '\n': ' ' }); // Collapse line breaks before and after '); } /* * Collapse line breaks inside elements, before and elements * so they don't get autop'd. */ if (text.indexOf('') !== -1) { text = text.replace(/(]*>)\s*/g, '$1'); text = text.replace(/\s*<\/object>/g, ''); text = text.replace(/\s*(<\/?(?:param|embed)[^>]*>)\s*/g, '$1'); } /* * Collapse line breaks inside