--- a/wp/wp-includes/js/dist/rich-text.js Tue Oct 22 16:11:46 2019 +0200
+++ b/wp/wp-includes/js/dist/rich-text.js Tue Dec 15 13:49:49 2020 +0100
@@ -82,7 +82,7 @@
/******/
/******/
/******/ // Load entry module and return exports
-/******/ return __webpack_require__(__webpack_require__.s = 361);
+/******/ return __webpack_require__(__webpack_require__.s = 440);
/******/ })
/************************************************************************/
/******/ ({
@@ -94,82 +94,180 @@
/***/ }),
+/***/ 11:
+/***/ (function(module, exports, __webpack_require__) {
+
+var __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;/*!
+ Copyright (c) 2017 Jed Watson.
+ Licensed under the MIT License (MIT), see
+ http://jedwatson.github.io/classnames
+*/
+/* global define */
+
+(function () {
+ 'use strict';
+
+ var hasOwn = {}.hasOwnProperty;
+
+ function classNames () {
+ var classes = [];
+
+ for (var i = 0; i < arguments.length; i++) {
+ var arg = arguments[i];
+ if (!arg) continue;
+
+ var argType = typeof arg;
+
+ if (argType === 'string' || argType === 'number') {
+ classes.push(arg);
+ } else if (Array.isArray(arg) && arg.length) {
+ var inner = classNames.apply(null, arg);
+ if (inner) {
+ classes.push(inner);
+ }
+ } else if (argType === 'object') {
+ for (var key in arg) {
+ if (hasOwn.call(arg, key) && arg[key]) {
+ classes.push(key);
+ }
+ }
+ }
+ }
+
+ return classes.join(' ');
+ }
+
+ if ( true && module.exports) {
+ classNames.default = classNames;
+ module.exports = classNames;
+ } else if (true) {
+ // register as 'classnames', consistent with npm package name
+ !(__WEBPACK_AMD_DEFINE_ARRAY__ = [], __WEBPACK_AMD_DEFINE_RESULT__ = (function () {
+ return classNames;
+ }).apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__),
+ __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));
+ } else {}
+}());
+
+
+/***/ }),
+
+/***/ 14:
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+
+// EXPORTS
+__webpack_require__.d(__webpack_exports__, "a", function() { return /* binding */ _slicedToArray; });
+
+// EXTERNAL MODULE: ./node_modules/@babel/runtime/helpers/esm/arrayWithHoles.js
+var arrayWithHoles = __webpack_require__(38);
+
+// CONCATENATED MODULE: ./node_modules/@babel/runtime/helpers/esm/iterableToArrayLimit.js
+function _iterableToArrayLimit(arr, i) {
+ if (typeof Symbol === "undefined" || !(Symbol.iterator in Object(arr))) return;
+ var _arr = [];
+ var _n = true;
+ var _d = false;
+ var _e = undefined;
+
+ try {
+ for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) {
+ _arr.push(_s.value);
+
+ if (i && _arr.length === i) break;
+ }
+ } catch (err) {
+ _d = true;
+ _e = err;
+ } finally {
+ try {
+ if (!_n && _i["return"] != null) _i["return"]();
+ } finally {
+ if (_d) throw _e;
+ }
+ }
+
+ return _arr;
+}
+// EXTERNAL MODULE: ./node_modules/@babel/runtime/helpers/esm/unsupportedIterableToArray.js
+var unsupportedIterableToArray = __webpack_require__(29);
+
+// EXTERNAL MODULE: ./node_modules/@babel/runtime/helpers/esm/nonIterableRest.js
+var nonIterableRest = __webpack_require__(39);
+
+// CONCATENATED MODULE: ./node_modules/@babel/runtime/helpers/esm/slicedToArray.js
+
+
+
+
+function _slicedToArray(arr, i) {
+ return Object(arrayWithHoles["a" /* default */])(arr) || _iterableToArrayLimit(arr, i) || Object(unsupportedIterableToArray["a" /* default */])(arr, i) || Object(nonIterableRest["a" /* default */])();
+}
+
+/***/ }),
+
/***/ 15:
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return _defineProperty; });
-function _defineProperty(obj, key, value) {
- if (key in obj) {
- Object.defineProperty(obj, key, {
- value: value,
- enumerable: true,
- configurable: true,
- writable: true
- });
- } else {
- obj[key] = value;
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return _objectWithoutProperties; });
+/* harmony import */ var _objectWithoutPropertiesLoose__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(41);
+
+function _objectWithoutProperties(source, excluded) {
+ if (source == null) return {};
+ var target = Object(_objectWithoutPropertiesLoose__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])(source, excluded);
+ var key, i;
+
+ if (Object.getOwnPropertySymbols) {
+ var sourceSymbolKeys = Object.getOwnPropertySymbols(source);
+
+ for (i = 0; i < sourceSymbolKeys.length; i++) {
+ key = sourceSymbolKeys[i];
+ if (excluded.indexOf(key) >= 0) continue;
+ if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue;
+ target[key] = source[key];
+ }
}
- return obj;
+ return target;
}
/***/ }),
-/***/ 17:
+/***/ 18:
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
+// EXPORTS
+__webpack_require__.d(__webpack_exports__, "a", function() { return /* binding */ _toConsumableArray; });
+
+// EXTERNAL MODULE: ./node_modules/@babel/runtime/helpers/esm/arrayLikeToArray.js
+var arrayLikeToArray = __webpack_require__(26);
+
// CONCATENATED MODULE: ./node_modules/@babel/runtime/helpers/esm/arrayWithoutHoles.js
+
function _arrayWithoutHoles(arr) {
- if (Array.isArray(arr)) {
- for (var i = 0, arr2 = new Array(arr.length); i < arr.length; i++) {
- arr2[i] = arr[i];
- }
-
- return arr2;
- }
+ if (Array.isArray(arr)) return Object(arrayLikeToArray["a" /* default */])(arr);
}
// EXTERNAL MODULE: ./node_modules/@babel/runtime/helpers/esm/iterableToArray.js
-var iterableToArray = __webpack_require__(34);
+var iterableToArray = __webpack_require__(35);
+
+// EXTERNAL MODULE: ./node_modules/@babel/runtime/helpers/esm/unsupportedIterableToArray.js
+var unsupportedIterableToArray = __webpack_require__(29);
// CONCATENATED MODULE: ./node_modules/@babel/runtime/helpers/esm/nonIterableSpread.js
function _nonIterableSpread() {
- throw new TypeError("Invalid attempt to spread non-iterable instance");
+ throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
}
// CONCATENATED MODULE: ./node_modules/@babel/runtime/helpers/esm/toConsumableArray.js
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return _toConsumableArray; });
+
function _toConsumableArray(arr) {
- return _arrayWithoutHoles(arr) || Object(iterableToArray["a" /* default */])(arr) || _nonIterableSpread();
-}
-
-/***/ }),
-
-/***/ 19:
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return _extends; });
-function _extends() {
- _extends = Object.assign || function (target) {
- for (var i = 1; i < arguments.length; i++) {
- var source = arguments[i];
-
- for (var key in source) {
- if (Object.prototype.hasOwnProperty.call(source, key)) {
- target[key] = source[key];
- }
- }
- }
-
- return target;
- };
-
- return _extends.apply(this, arguments);
+ return _arrayWithoutHoles(arr) || Object(iterableToArray["a" /* default */])(arr) || Object(unsupportedIterableToArray["a" /* default */])(arr) || _nonIterableSpread();
}
/***/ }),
@@ -181,14 +279,141 @@
/***/ }),
-/***/ 26:
+/***/ 21:
/***/ (function(module, exports) {
-(function() { module.exports = this["wp"]["hooks"]; }());
+(function() { module.exports = this["wp"]["keycodes"]; }());
+
+/***/ }),
+
+/***/ 26:
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return _arrayLikeToArray; });
+function _arrayLikeToArray(arr, len) {
+ if (len == null || len > arr.length) len = arr.length;
+
+ for (var i = 0, arr2 = new Array(len); i < len; i++) {
+ arr2[i] = arr[i];
+ }
+
+ return arr2;
+}
+
+/***/ }),
+
+/***/ 29:
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return _unsupportedIterableToArray; });
+/* harmony import */ var _arrayLikeToArray__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(26);
+
+function _unsupportedIterableToArray(o, minLen) {
+ if (!o) return;
+ if (typeof o === "string") return Object(_arrayLikeToArray__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])(o, minLen);
+ var n = Object.prototype.toString.call(o).slice(8, -1);
+ if (n === "Object" && o.constructor) n = o.constructor.name;
+ if (n === "Map" || n === "Set") return Array.from(o);
+ if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return Object(_arrayLikeToArray__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])(o, minLen);
+}
+
+/***/ }),
+
+/***/ 35:
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return _iterableToArray; });
+function _iterableToArray(iter) {
+ if (typeof Symbol !== "undefined" && Symbol.iterator in Object(iter)) return Array.from(iter);
+}
+
+/***/ }),
+
+/***/ 37:
+/***/ (function(module, exports) {
+
+(function() { module.exports = this["wp"]["deprecated"]; }());
/***/ }),
-/***/ 30:
+/***/ 38:
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return _arrayWithHoles; });
+function _arrayWithHoles(arr) {
+ if (Array.isArray(arr)) return arr;
+}
+
+/***/ }),
+
+/***/ 39:
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return _nonIterableRest; });
+function _nonIterableRest() {
+ throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
+}
+
+/***/ }),
+
+/***/ 4:
+/***/ (function(module, exports) {
+
+(function() { module.exports = this["wp"]["data"]; }());
+
+/***/ }),
+
+/***/ 40:
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return _typeof; });
+function _typeof(obj) {
+ "@babel/helpers - typeof";
+
+ if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") {
+ _typeof = function _typeof(obj) {
+ return typeof obj;
+ };
+ } else {
+ _typeof = function _typeof(obj) {
+ return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj;
+ };
+ }
+
+ return _typeof(obj);
+}
+
+/***/ }),
+
+/***/ 41:
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return _objectWithoutPropertiesLoose; });
+function _objectWithoutPropertiesLoose(source, excluded) {
+ if (source == null) return {};
+ var target = {};
+ var sourceKeys = Object.keys(source);
+ var key, i;
+
+ for (i = 0; i < sourceKeys.length; i++) {
+ key = sourceKeys[i];
+ if (excluded.indexOf(key) >= 0) continue;
+ target[key] = source[key];
+ }
+
+ return target;
+}
+
+/***/ }),
+
+/***/ 42:
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
@@ -470,68 +695,80 @@
/***/ }),
-/***/ 32:
+/***/ 440:
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return _typeof; });
-function _typeof2(obj) { if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof2 = function _typeof2(obj) { return typeof obj; }; } else { _typeof2 = function _typeof2(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof2(obj); }
-
-function _typeof(obj) {
- if (typeof Symbol === "function" && _typeof2(Symbol.iterator) === "symbol") {
- _typeof = function _typeof(obj) {
- return _typeof2(obj);
- };
- } else {
- _typeof = function _typeof(obj) {
- return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : _typeof2(obj);
- };
- }
-
- return _typeof(obj);
-}
-
-/***/ }),
-
-/***/ 34:
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return _iterableToArray; });
-function _iterableToArray(iter) {
- if (Symbol.iterator in Object(iter) || Object.prototype.toString.call(iter) === "[object Arguments]") return Array.from(iter);
-}
-
-/***/ }),
-
-/***/ 361:
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
+// ESM COMPAT FLAG
__webpack_require__.r(__webpack_exports__);
+
+// EXPORTS
+__webpack_require__.d(__webpack_exports__, "applyFormat", function() { return /* reexport */ applyFormat; });
+__webpack_require__.d(__webpack_exports__, "concat", function() { return /* reexport */ concat; });
+__webpack_require__.d(__webpack_exports__, "create", function() { return /* reexport */ create; });
+__webpack_require__.d(__webpack_exports__, "getActiveFormat", function() { return /* reexport */ getActiveFormat; });
+__webpack_require__.d(__webpack_exports__, "getActiveObject", function() { return /* reexport */ getActiveObject; });
+__webpack_require__.d(__webpack_exports__, "getTextContent", function() { return /* reexport */ getTextContent; });
+__webpack_require__.d(__webpack_exports__, "__unstableIsListRootSelected", function() { return /* reexport */ isListRootSelected; });
+__webpack_require__.d(__webpack_exports__, "__unstableIsActiveListType", function() { return /* reexport */ isActiveListType; });
+__webpack_require__.d(__webpack_exports__, "isCollapsed", function() { return /* reexport */ isCollapsed; });
+__webpack_require__.d(__webpack_exports__, "isEmpty", function() { return /* reexport */ isEmpty; });
+__webpack_require__.d(__webpack_exports__, "__unstableIsEmptyLine", function() { return /* reexport */ isEmptyLine; });
+__webpack_require__.d(__webpack_exports__, "join", function() { return /* reexport */ join; });
+__webpack_require__.d(__webpack_exports__, "registerFormatType", function() { return /* reexport */ registerFormatType; });
+__webpack_require__.d(__webpack_exports__, "removeFormat", function() { return /* reexport */ removeFormat; });
+__webpack_require__.d(__webpack_exports__, "remove", function() { return /* reexport */ remove_remove; });
+__webpack_require__.d(__webpack_exports__, "replace", function() { return /* reexport */ replace_replace; });
+__webpack_require__.d(__webpack_exports__, "insert", function() { return /* reexport */ insert; });
+__webpack_require__.d(__webpack_exports__, "__unstableInsertLineSeparator", function() { return /* reexport */ insertLineSeparator; });
+__webpack_require__.d(__webpack_exports__, "__unstableRemoveLineSeparator", function() { return /* reexport */ removeLineSeparator; });
+__webpack_require__.d(__webpack_exports__, "insertObject", function() { return /* reexport */ insertObject; });
+__webpack_require__.d(__webpack_exports__, "slice", function() { return /* reexport */ slice; });
+__webpack_require__.d(__webpack_exports__, "split", function() { return /* reexport */ split; });
+__webpack_require__.d(__webpack_exports__, "__unstableToDom", function() { return /* reexport */ toDom; });
+__webpack_require__.d(__webpack_exports__, "toHTMLString", function() { return /* reexport */ toHTMLString; });
+__webpack_require__.d(__webpack_exports__, "toggleFormat", function() { return /* reexport */ toggleFormat; });
+__webpack_require__.d(__webpack_exports__, "__UNSTABLE_LINE_SEPARATOR", function() { return /* reexport */ LINE_SEPARATOR; });
+__webpack_require__.d(__webpack_exports__, "unregisterFormatType", function() { return /* reexport */ unregisterFormatType; });
+__webpack_require__.d(__webpack_exports__, "__unstableCanIndentListItems", function() { return /* reexport */ canIndentListItems; });
+__webpack_require__.d(__webpack_exports__, "__unstableCanOutdentListItems", function() { return /* reexport */ canOutdentListItems; });
+__webpack_require__.d(__webpack_exports__, "__unstableIndentListItems", function() { return /* reexport */ indentListItems; });
+__webpack_require__.d(__webpack_exports__, "__unstableOutdentListItems", function() { return /* reexport */ outdentListItems; });
+__webpack_require__.d(__webpack_exports__, "__unstableChangeListType", function() { return /* reexport */ changeListType; });
+__webpack_require__.d(__webpack_exports__, "__unstableCreateElement", function() { return /* reexport */ createElement; });
+__webpack_require__.d(__webpack_exports__, "__experimentalRichText", function() { return /* reexport */ component; });
+__webpack_require__.d(__webpack_exports__, "__unstableFormatEdit", function() { return /* reexport */ FormatEdit; });
+
+// NAMESPACE OBJECT: ./node_modules/@wordpress/rich-text/build-module/store/selectors.js
var selectors_namespaceObject = {};
__webpack_require__.r(selectors_namespaceObject);
__webpack_require__.d(selectors_namespaceObject, "getFormatTypes", function() { return getFormatTypes; });
__webpack_require__.d(selectors_namespaceObject, "getFormatType", function() { return getFormatType; });
__webpack_require__.d(selectors_namespaceObject, "getFormatTypeForBareElement", function() { return getFormatTypeForBareElement; });
__webpack_require__.d(selectors_namespaceObject, "getFormatTypeForClassName", function() { return getFormatTypeForClassName; });
+
+// NAMESPACE OBJECT: ./node_modules/@wordpress/rich-text/build-module/store/actions.js
var actions_namespaceObject = {};
__webpack_require__.r(actions_namespaceObject);
__webpack_require__.d(actions_namespaceObject, "addFormatTypes", function() { return addFormatTypes; });
__webpack_require__.d(actions_namespaceObject, "removeFormatTypes", function() { return removeFormatTypes; });
// EXTERNAL MODULE: external {"this":["wp","data"]}
-var external_this_wp_data_ = __webpack_require__(5);
-
-// EXTERNAL MODULE: ./node_modules/@babel/runtime/helpers/esm/objectSpread.js
-var objectSpread = __webpack_require__(7);
-
-// EXTERNAL MODULE: external "lodash"
-var external_lodash_ = __webpack_require__(2);
+var external_this_wp_data_ = __webpack_require__(4);
+
+// EXTERNAL MODULE: ./node_modules/@babel/runtime/helpers/esm/defineProperty.js
+var defineProperty = __webpack_require__(5);
+
+// EXTERNAL MODULE: external {"this":"lodash"}
+var external_this_lodash_ = __webpack_require__(2);
// CONCATENATED MODULE: ./node_modules/@wordpress/rich-text/build-module/store/reducer.js
+function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }
+
+function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { Object(defineProperty["a" /* default */])(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
+
/**
* External dependencies
*/
@@ -556,10 +793,10 @@
switch (action.type) {
case 'ADD_FORMAT_TYPES':
- return Object(objectSpread["a" /* default */])({}, state, Object(external_lodash_["keyBy"])(action.formatTypes, 'name'));
+ return _objectSpread({}, state, {}, Object(external_this_lodash_["keyBy"])(action.formatTypes, 'name'));
case 'REMOVE_FORMAT_TYPES':
- return Object(external_lodash_["omit"])(state, action.names);
+ return Object(external_this_lodash_["omit"])(state, action.names);
}
return state;
@@ -569,7 +806,7 @@
}));
// EXTERNAL MODULE: ./node_modules/rememo/es/rememo.js
-var rememo = __webpack_require__(30);
+var rememo = __webpack_require__(42);
// CONCATENATED MODULE: ./node_modules/@wordpress/rich-text/build-module/store/selectors.js
/**
@@ -613,9 +850,10 @@
*/
function getFormatTypeForBareElement(state, bareElementTagName) {
- return Object(external_lodash_["find"])(getFormatTypes(state), function (_ref) {
- var tagName = _ref.tagName;
- return bareElementTagName === tagName;
+ return Object(external_this_lodash_["find"])(getFormatTypes(state), function (_ref) {
+ var className = _ref.className,
+ tagName = _ref.tagName;
+ return className === null && bareElementTagName === tagName;
});
}
/**
@@ -628,7 +866,7 @@
*/
function getFormatTypeForClassName(state, elementClassName) {
- return Object(external_lodash_["find"])(getFormatTypes(state), function (_ref2) {
+ return Object(external_this_lodash_["find"])(getFormatTypes(state), function (_ref2) {
var className = _ref2.className;
if (className === null) {
@@ -656,7 +894,7 @@
function addFormatTypes(formatTypes) {
return {
type: 'ADD_FORMAT_TYPES',
- formatTypes: Object(external_lodash_["castArray"])(formatTypes)
+ formatTypes: Object(external_this_lodash_["castArray"])(formatTypes)
};
}
/**
@@ -670,7 +908,7 @@
function removeFormatTypes(names) {
return {
type: 'REMOVE_FORMAT_TYPES',
- names: Object(external_lodash_["castArray"])(names)
+ names: Object(external_this_lodash_["castArray"])(names)
};
}
@@ -693,7 +931,7 @@
});
// EXTERNAL MODULE: ./node_modules/@babel/runtime/helpers/esm/toConsumableArray.js + 2 modules
-var toConsumableArray = __webpack_require__(17);
+var toConsumableArray = __webpack_require__(18);
// CONCATENATED MODULE: ./node_modules/@wordpress/rich-text/build-module/is-format-equal.js
/**
@@ -754,6 +992,10 @@
// CONCATENATED MODULE: ./node_modules/@wordpress/rich-text/build-module/normalise-formats.js
+function normalise_formats_ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }
+
+function normalise_formats_objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { normalise_formats_ownKeys(Object(source), true).forEach(function (key) { Object(defineProperty["a" /* default */])(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { normalise_formats_ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
+
/**
* Internal dependencies
*/
@@ -784,7 +1026,7 @@
newFormats[index] = newFormatsAtIndex;
}
});
- return Object(objectSpread["a" /* default */])({}, value, {
+ return normalise_formats_objectSpread({}, value, {
formats: newFormats
});
}
@@ -793,6 +1035,10 @@
+function apply_format_ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }
+
+function apply_format_objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { apply_format_ownKeys(Object(source), true).forEach(function (key) { Object(defineProperty["a" /* default */])(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { apply_format_ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
+
/**
* External dependencies
*/
@@ -802,6 +1048,12 @@
*/
+
+function replace(array, index, value) {
+ array = array.slice();
+ array[index] = value;
+ return array;
+}
/**
* Apply a format object to a Rich Text value from the given `startIndex` to the
* given `endIndex`. Indices are retrieved from the selection if none are
@@ -815,6 +1067,7 @@
* @return {Object} A new value with the format applied.
*/
+
function applyFormat(value, format) {
var startIndex = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : value.start;
var endIndex = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : value.end;
@@ -823,71 +1076,65 @@
var newFormats = formats.slice(); // The selection is collapsed.
if (startIndex === endIndex) {
- var startFormat = Object(external_lodash_["find"])(newFormats[startIndex], {
+ var startFormat = Object(external_this_lodash_["find"])(newFormats[startIndex], {
type: format.type
}); // If the caret is at a format of the same type, expand start and end to
// the edges of the format. This is useful to apply new attributes.
if (startFormat) {
- while (Object(external_lodash_["find"])(newFormats[startIndex], startFormat)) {
- applyFormats(newFormats, startIndex, format);
+ var index = newFormats[startIndex].indexOf(startFormat);
+
+ while (newFormats[startIndex] && newFormats[startIndex][index] === startFormat) {
+ newFormats[startIndex] = replace(newFormats[startIndex], index, format);
startIndex--;
}
endIndex++;
- while (Object(external_lodash_["find"])(newFormats[endIndex], startFormat)) {
- applyFormats(newFormats, endIndex, format);
+ while (newFormats[endIndex] && newFormats[endIndex][index] === startFormat) {
+ newFormats[endIndex] = replace(newFormats[endIndex], index, format);
endIndex++;
}
}
} else {
- for (var index = startIndex; index < endIndex; index++) {
- applyFormats(newFormats, index, format);
+ // Determine the highest position the new format can be inserted at.
+ var position = +Infinity;
+
+ for (var _index = startIndex; _index < endIndex; _index++) {
+ if (newFormats[_index]) {
+ newFormats[_index] = newFormats[_index].filter(function (_ref) {
+ var type = _ref.type;
+ return type !== format.type;
+ });
+ var length = newFormats[_index].length;
+
+ if (length < position) {
+ position = length;
+ }
+ } else {
+ newFormats[_index] = [];
+ position = 0;
+ }
+ }
+
+ for (var _index2 = startIndex; _index2 < endIndex; _index2++) {
+ newFormats[_index2].splice(position, 0, format);
}
}
- return normaliseFormats(Object(objectSpread["a" /* default */])({}, value, {
+ return normaliseFormats(apply_format_objectSpread({}, value, {
formats: newFormats,
// Always revise active formats. This serves as a placeholder for new
// inputs with the format so new input appears with the format applied,
// and ensures a format of the same type uses the latest values.
- activeFormats: [].concat(Object(toConsumableArray["a" /* default */])(Object(external_lodash_["reject"])(activeFormats, {
+ activeFormats: [].concat(Object(toConsumableArray["a" /* default */])(Object(external_this_lodash_["reject"])(activeFormats, {
type: format.type
})), [format])
}));
}
-function applyFormats(formats, index, format) {
- if (formats[index]) {
- var newFormatsAtIndex = formats[index].filter(function (_ref) {
- var type = _ref.type;
- return type !== format.type;
- });
- newFormatsAtIndex.push(format);
- formats[index] = newFormatsAtIndex;
- } else {
- formats[index] = [format];
- }
-}
-
-// CONCATENATED MODULE: ./node_modules/@wordpress/rich-text/build-module/char-at.js
-/**
- * Gets the character at the specified index, or returns `undefined` if no
- * character was found.
- *
- * @param {Object} value Value to get the character from.
- * @param {string} index Index to use.
- *
- * @return {string|undefined} A one character long string, or undefined.
- */
-function charAt(_ref, index) {
- var text = _ref.text;
- return text[index];
-}
-
// EXTERNAL MODULE: ./node_modules/@babel/runtime/helpers/esm/typeof.js
-var esm_typeof = __webpack_require__(32);
+var esm_typeof = __webpack_require__(40);
// CONCATENATED MODULE: ./node_modules/@wordpress/rich-text/build-module/create-element.js
/**
@@ -919,16 +1166,30 @@
// CONCATENATED MODULE: ./node_modules/@wordpress/rich-text/build-module/special-characters.js
/**
- * Line separator character.
+ * Line separator character, used for multiline text.
*/
var LINE_SEPARATOR = "\u2028";
+/**
+ * Object replacement character, used as a placeholder for objects.
+ */
+
var OBJECT_REPLACEMENT_CHARACTER = "\uFFFC";
+/**
+ * Zero width non-breaking space, used as padding in the editable DOM tree when
+ * it is empty otherwise.
+ */
+
+var ZWNBSP = "\uFEFF";
// CONCATENATED MODULE: ./node_modules/@wordpress/rich-text/build-module/create.js
+function create_ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }
+
+function create_objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { create_ownKeys(Object(source), true).forEach(function (key) { Object(defineProperty["a" /* default */])(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { create_ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
+
/**
* WordPress dependencies
*/
@@ -941,13 +1202,6 @@
-/**
- * Browser dependencies
- */
-
-var _window$Node = window.Node,
- TEXT_NODE = _window$Node.TEXT_NODE,
- ELEMENT_NODE = _window$Node.ELEMENT_NODE;
function createEmptyValue() {
return {
@@ -1062,6 +1316,8 @@
* multiline.
* @param {Array} [$1.multilineWrapperTags] Tags where lines can be found if
* nesting is possible.
+ * @param {?boolean} [$1.preserveWhiteSpace] Whether or not to collapse white
+ * space characters.
*
* @return {Object} A rich text value.
*/
@@ -1075,7 +1331,8 @@
range = _ref2.range,
multilineTag = _ref2.multilineTag,
multilineWrapperTags = _ref2.multilineWrapperTags,
- isEditableTree = _ref2.__unstableIsEditableTree;
+ isEditableTree = _ref2.__unstableIsEditableTree,
+ preserveWhiteSpace = _ref2.preserveWhiteSpace;
if (typeof text === 'string' && text.length > 0) {
return {
@@ -1086,6 +1343,8 @@
}
if (typeof html === 'string' && html.length > 0) {
+ // It does not matter which document this is, we're just using it to
+ // parse.
element = createElement(document, html);
}
@@ -1097,7 +1356,8 @@
return createFromElement({
element: element,
range: range,
- isEditableTree: isEditableTree
+ isEditableTree: isEditableTree,
+ preserveWhiteSpace: preserveWhiteSpace
});
}
@@ -1106,7 +1366,8 @@
range: range,
multilineTag: multilineTag,
multilineWrapperTags: multilineWrapperTags,
- isEditableTree: isEditableTree
+ isEditableTree: isEditableTree,
+ preserveWhiteSpace: preserveWhiteSpace
});
}
/**
@@ -1133,7 +1394,7 @@
if (value.start !== undefined) {
accumulator.start = currentLength + value.start; // Range indicates that the current node has selection.
- } else if (node === startContainer && node.nodeType === TEXT_NODE) {
+ } else if (node === startContainer && node.nodeType === node.TEXT_NODE) {
accumulator.start = currentLength + startOffset; // Range indicates that the current node is selected.
} else if (parentNode === startContainer && node === startContainer.childNodes[startOffset]) {
accumulator.start = currentLength; // Range indicates that the selection is after the current node.
@@ -1146,7 +1407,7 @@
if (value.end !== undefined) {
accumulator.end = currentLength + value.end; // Range indicates that the current node has selection.
- } else if (node === endContainer && node.nodeType === TEXT_NODE) {
+ } else if (node === endContainer && node.nodeType === node.TEXT_NODE) {
accumulator.end = currentLength + endOffset; // Range indicates that the current node is selected.
} else if (parentNode === endContainer && node === endContainer.childNodes[endOffset - 1]) {
accumulator.end = currentLength + value.text.length; // Range indicates that the selection is before the current node.
@@ -1192,12 +1453,28 @@
endOffset: endOffset
};
}
-
-function filterString(string) {
- // Reduce any whitespace used for HTML formatting to one space
- // character, because it will also be displayed as such by the browser.
+/**
+ * Collapse any whitespace used for HTML formatting to one space character,
+ * because it will also be displayed as such by the browser.
+ *
+ * @param {string} string
+ */
+
+
+function collapseWhiteSpace(string) {
return string.replace(/[\n\r\t]+/g, ' ');
}
+
+var ZWNBSPRegExp = new RegExp(ZWNBSP, 'g');
+/**
+ * Removes padding (zero width non breaking spaces) added by `toTree`.
+ *
+ * @param {string} string
+ */
+
+function removePadding(string) {
+ return string.replace(ZWNBSPRegExp, '');
+}
/**
* Creates a Rich Text value from a DOM element and range.
*
@@ -1208,6 +1485,8 @@
* multiline.
* @param {?Array} $1.multilineWrapperTags Tags where lines can be found if
* nesting is possible.
+ * @param {?boolean} $1.preserveWhiteSpace Whether or not to collapse white
+ * space characters.
*
* @return {Object} A rich text value.
*/
@@ -1220,7 +1499,8 @@
multilineWrapperTags = _ref3.multilineWrapperTags,
_ref3$currentWrapperT = _ref3.currentWrapperTags,
currentWrapperTags = _ref3$currentWrapperT === void 0 ? [] : _ref3$currentWrapperT,
- isEditableTree = _ref3.isEditableTree;
+ isEditableTree = _ref3.isEditableTree,
+ preserveWhiteSpace = _ref3.preserveWhiteSpace;
var accumulator = createEmptyValue();
if (!element) {
@@ -1238,9 +1518,17 @@
var node = element.childNodes[index];
var type = node.nodeName.toLowerCase();
- if (node.nodeType === TEXT_NODE) {
- var text = filterString(node.nodeValue);
- range = filterRange(node, range, filterString);
+ if (node.nodeType === node.TEXT_NODE) {
+ var filter = removePadding;
+
+ if (!preserveWhiteSpace) {
+ filter = function filter(string) {
+ return removePadding(collapseWhiteSpace(string));
+ };
+ }
+
+ var text = filter(node.nodeValue);
+ range = filterRange(node, range, filter);
accumulateSelection(accumulator, node, range, {
text: text
}); // Create a sparse array of the same length as `text`, in which
@@ -1252,11 +1540,13 @@
return "continue";
}
- if (node.nodeType !== ELEMENT_NODE) {
+ if (node.nodeType !== node.ELEMENT_NODE) {
return "continue";
}
- if (node.getAttribute('data-rich-text-padding') || isEditableTree && type === 'br' && !node.getAttribute('data-rich-text-line-break')) {
+ if (isEditableTree && ( // Ignore any placeholders.
+ node.getAttribute('data-rich-text-placeholder') || // Ignore any line breaks that are not inserted by us.
+ type === 'br' && !node.getAttribute('data-rich-text-line-break'))) {
accumulateSelection(accumulator, node, range, createEmptyValue());
return "continue";
}
@@ -1286,7 +1576,8 @@
multilineTag: multilineTag,
multilineWrapperTags: multilineWrapperTags,
currentWrapperTags: [].concat(Object(toConsumableArray["a" /* default */])(currentWrapperTags), [format]),
- isEditableTree: isEditableTree
+ isEditableTree: isEditableTree,
+ preserveWhiteSpace: preserveWhiteSpace
});
accumulateSelection(accumulator, node, range, _value);
@@ -1299,7 +1590,8 @@
range: range,
multilineTag: multilineTag,
multilineWrapperTags: multilineWrapperTags,
- isEditableTree: isEditableTree
+ isEditableTree: isEditableTree,
+ preserveWhiteSpace: preserveWhiteSpace
});
accumulateSelection(accumulator, node, range, value);
@@ -1314,10 +1606,24 @@
});
}
} else {
- mergePair(accumulator, Object(objectSpread["a" /* default */])({}, value, {
- formats: Array.from(value.formats, function (formats) {
- return formats ? [format].concat(Object(toConsumableArray["a" /* default */])(formats)) : [format];
- })
+ // Indices should share a reference to the same formats array.
+ // Only create a new reference if `formats` changes.
+ function mergeFormats(formats) {
+ if (mergeFormats.formats === formats) {
+ return mergeFormats.newFormats;
+ }
+
+ var newFormats = formats ? [format].concat(Object(toConsumableArray["a" /* default */])(formats)) : [format];
+ mergeFormats.formats = formats;
+ mergeFormats.newFormats = newFormats;
+ return newFormats;
+ } // Since the formats parameter can be `undefined`, preset
+ // `mergeFormats` with a new reference.
+
+
+ mergeFormats.newFormats = [format];
+ mergePair(accumulator, create_objectSpread({}, value, {
+ formats: Array.from(value.formats, mergeFormats)
}));
}
};
@@ -1334,15 +1640,17 @@
* Creates a rich text value from a DOM element and range that should be
* multiline.
*
- * @param {Object} $1 Named argements.
- * @param {?Element} $1.element Element to create value from.
- * @param {?Range} $1.range Range to create value from.
- * @param {?string} $1.multilineTag Multiline tag if the structure is
- * multiline.
- * @param {?Array} $1.multilineWrapperTags Tags where lines can be found if
- * nesting is possible.
- * @param {boolean} $1.currentWrapperTags Whether to prepend a line
- * separator.
+ * @param {Object} $1 Named argements.
+ * @param {?Element} $1.element Element to create value from.
+ * @param {?Range} $1.range Range to create value from.
+ * @param {?string} $1.multilineTag Multiline tag if the structure is
+ * multiline.
+ * @param {?Array} $1.multilineWrapperTags Tags where lines can be found if
+ * nesting is possible.
+ * @param {boolean} $1.currentWrapperTags Whether to prepend a line
+ * separator.
+ * @param {?boolean} $1.preserveWhiteSpace Whether or not to collapse white
+ * space characters.
*
* @return {Object} A rich text value.
*/
@@ -1355,7 +1663,8 @@
multilineWrapperTags = _ref4.multilineWrapperTags,
_ref4$currentWrapperT = _ref4.currentWrapperTags,
currentWrapperTags = _ref4$currentWrapperT === void 0 ? [] : _ref4$currentWrapperT,
- isEditableTree = _ref4.isEditableTree;
+ isEditableTree = _ref4.isEditableTree,
+ preserveWhiteSpace = _ref4.preserveWhiteSpace;
var accumulator = createEmptyValue();
if (!element || !element.hasChildNodes()) {
@@ -1377,7 +1686,8 @@
multilineTag: multilineTag,
multilineWrapperTags: multilineWrapperTags,
currentWrapperTags: currentWrapperTags,
- isEditableTree: isEditableTree
+ isEditableTree: isEditableTree,
+ preserveWhiteSpace: preserveWhiteSpace
}); // Multiline value text should be separated by a line separator.
if (index !== 0 || currentWrapperTags.length > 0) {
@@ -1474,7 +1784,13 @@
/**
* Gets the all format objects at the start of the selection.
*
- * @param {Object} value Value to inspect.
+ * @param {Object} value Value to inspect.
+ * @param {Array<Array>} value.formats Formats object data values.
+ * @param {number} value.start Index to start from.
+ * @param {number} value.end Index to end.
+ * @param {Array} value.activeFormats Array to return if there are active formats.
+ * @param {Array} EMPTY_ACTIVE_FORMATS Array to return if there are no active
+ * formats.
*
* @return {?Object} Active format objects.
*/
@@ -1483,9 +1799,10 @@
start = _ref.start,
end = _ref.end,
activeFormats = _ref.activeFormats;
+ var EMPTY_ACTIVE_FORMATS = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];
if (start === undefined) {
- return [];
+ return EMPTY_ACTIVE_FORMATS;
}
if (start === end) {
@@ -1494,8 +1811,8 @@
return activeFormats;
}
- var formatsBefore = formats[start - 1] || [];
- var formatsAfter = formats[start] || []; // By default, select the lowest amount of formats possible (which means
+ var formatsBefore = formats[start - 1] || EMPTY_ACTIVE_FORMATS;
+ var formatsAfter = formats[start] || EMPTY_ACTIVE_FORMATS; // By default, select the lowest amount of formats possible (which means
// the caret is positioned outside the format boundary). The user can
// then use arrow keys to define `activeFormats`.
@@ -1506,7 +1823,7 @@
return formatsAfter;
}
- return formats[start] || [];
+ return formats[start] || EMPTY_ACTIVE_FORMATS;
}
// CONCATENATED MODULE: ./node_modules/@wordpress/rich-text/build-module/get-active-format.js
@@ -1532,7 +1849,7 @@
*/
function getActiveFormat(value, formatType) {
- return Object(external_lodash_["find"])(getActiveFormats(value), {
+ return Object(external_this_lodash_["find"])(getActiveFormats(value), {
type: formatType
});
}
@@ -1563,36 +1880,6 @@
return replacements[start];
}
-// CONCATENATED MODULE: ./node_modules/@wordpress/rich-text/build-module/get-selection-end.js
-/**
- * Gets the end index of the current selection, or returns `undefined` if no
- * selection exists. The selection ends right before the character at this
- * index.
- *
- * @param {Object} value Value to get the selection from.
- *
- * @return {number|undefined} Index where the selection ends.
- */
-function getSelectionEnd(_ref) {
- var end = _ref.end;
- return end;
-}
-
-// CONCATENATED MODULE: ./node_modules/@wordpress/rich-text/build-module/get-selection-start.js
-/**
- * Gets the start index of the current selection, or returns `undefined` if no
- * selection exists. The selection starts right before the character at this
- * index.
- *
- * @param {Object} value Value to get the selection from.
- *
- * @return {number|undefined} Index where the selection starts.
- */
-function getSelectionStart(_ref) {
- var start = _ref.start;
- return start;
-}
-
// CONCATENATED MODULE: ./node_modules/@wordpress/rich-text/build-module/get-text-content.js
/**
* Get the textual content of a Rich Text value. This is similar to
@@ -1607,6 +1894,88 @@
return text;
}
+// CONCATENATED MODULE: ./node_modules/@wordpress/rich-text/build-module/get-line-index.js
+/**
+ * Internal dependencies
+ */
+
+/**
+ * Gets the currently selected line index, or the first line index if the
+ * selection spans over multiple items.
+ *
+ * @param {Object} value Value to get the line index from.
+ * @param {boolean} startIndex Optional index that should be contained by the
+ * line. Defaults to the selection start of the
+ * value.
+ *
+ * @return {?boolean} The line index. Undefined if not found.
+ */
+
+function getLineIndex(_ref) {
+ var start = _ref.start,
+ text = _ref.text;
+ var startIndex = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : start;
+ var index = startIndex;
+
+ while (index--) {
+ if (text[index] === LINE_SEPARATOR) {
+ return index;
+ }
+ }
+}
+
+// CONCATENATED MODULE: ./node_modules/@wordpress/rich-text/build-module/is-list-root-selected.js
+/**
+ * Internal dependencies
+ */
+
+/**
+ * Whether or not the root list is selected.
+ *
+ * @param {Object} value The value to check.
+ *
+ * @return {boolean} True if the root list or nothing is selected, false if an
+ * inner list is selected.
+ */
+
+function isListRootSelected(value) {
+ var replacements = value.replacements,
+ start = value.start;
+ var lineIndex = getLineIndex(value, start);
+ var replacement = replacements[lineIndex];
+ return !replacement || replacement.length < 1;
+}
+
+// CONCATENATED MODULE: ./node_modules/@wordpress/rich-text/build-module/is-active-list-type.js
+/**
+ * Internal dependencies
+ */
+
+/**
+ * Wether or not the selected list has the given tag name.
+ *
+ * @param {Object} value The value to check.
+ * @param {string} type The tag name the list should have.
+ * @param {string} rootType The current root tag name, to compare with in case
+ * nothing is selected.
+ *
+ * @return {boolean} True if the current list type matches `type`, false if not.
+ */
+
+function isActiveListType(value, type, rootType) {
+ var replacements = value.replacements,
+ start = value.start;
+ var lineIndex = getLineIndex(value, start);
+ var replacement = replacements[lineIndex];
+
+ if (!replacement || replacement.length === 0) {
+ return type === rootType;
+ }
+
+ var lastFormat = replacement[replacement.length - 1];
+ return lastFormat.type === type;
+}
+
// CONCATENATED MODULE: ./node_modules/@wordpress/rich-text/build-module/is-collapsed.js
/**
* Check if the selection of a Rich Text value is collapsed or not. Collapsed
@@ -1719,72 +2088,43 @@
}));
}
-// EXTERNAL MODULE: ./node_modules/@babel/runtime/helpers/esm/defineProperty.js
-var defineProperty = __webpack_require__(15);
-
-// EXTERNAL MODULE: ./node_modules/@babel/runtime/helpers/esm/extends.js
-var esm_extends = __webpack_require__(19);
-
-// EXTERNAL MODULE: external {"this":["wp","element"]}
-var external_this_wp_element_ = __webpack_require__(0);
-
-// EXTERNAL MODULE: ./node_modules/memize/index.js
-var memize = __webpack_require__(41);
-var memize_default = /*#__PURE__*/__webpack_require__.n(memize);
-
-// EXTERNAL MODULE: external {"this":["wp","hooks"]}
-var external_this_wp_hooks_ = __webpack_require__(26);
-
-// EXTERNAL MODULE: external {"this":["wp","compose"]}
-var external_this_wp_compose_ = __webpack_require__(6);
-
// CONCATENATED MODULE: ./node_modules/@wordpress/rich-text/build-module/register-format-type.js
-
-
-
-
-/**
- * External dependencies
- */
-
+function register_format_type_ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }
+
+function register_format_type_objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { register_format_type_ownKeys(Object(source), true).forEach(function (key) { Object(defineProperty["a" /* default */])(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { register_format_type_ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
/**
* WordPress 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.
+ * @typedef {Object} WPFormat
*
- * @type {Array}
+ * @property {string} name A string identifying the format. Must be
+ * unique across all registered formats.
+ * @property {string} tagName The HTML tag this format will wrap the
+ * selection with.
+ * @property {string} [className] A class to match the format.
+ * @property {string} title Name of the format.
+ * @property {Function} edit Should return a component for the user to
+ * interact with the new registered format.
*/
-var EMPTY_ARRAY = [];
/**
* Registers a new format provided a unique name and an object defining its
* behavior.
*
* @param {string} name Format name.
- * @param {Object} settings Format settings.
- * @param {string} settings.tagName The HTML tag this format will wrap the selection with.
- * @param {string} [settings.className] A class to match the format.
- * @param {string} settings.title Name of the format.
- * @param {Function} settings.edit Should return a component for the user to interact with the new registered format.
+ * @param {WPFormat} settings Format settings.
*
* @return {WPFormat|undefined} The format, if it has been successfully registered;
* otherwise `undefined`.
*/
function registerFormatType(name, settings) {
- settings = Object(objectSpread["a" /* default */])({
+ settings = register_format_type_objectSpread({
name: name
}, settings);
@@ -1850,88 +2190,16 @@
}
Object(external_this_wp_data_["dispatch"])('core/rich-text').addFormatTypes(settings);
- var getFunctionStackMemoized = memize_default()(function () {
- var previousStack = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : EMPTY_ARRAY;
- var newFunction = arguments.length > 1 ? arguments[1] : undefined;
- return [].concat(Object(toConsumableArray["a" /* default */])(previousStack), [newFunction]);
- });
-
- if (settings.__experimentalCreatePrepareEditableTree) {
- Object(external_this_wp_hooks_["addFilter"])('experimentalRichText', name, function (OriginalComponent) {
- var Component = OriginalComponent;
-
- if (settings.__experimentalCreatePrepareEditableTree || settings.__experimentalCreateFormatToValue || settings.__experimentalCreateValueToFormat) {
- Component = function Component(props) {
- var additionalProps = {};
-
- if (settings.__experimentalCreatePrepareEditableTree) {
- additionalProps.prepareEditableTree = getFunctionStackMemoized(props.prepareEditableTree, settings.__experimentalCreatePrepareEditableTree(props["format_".concat(name)], {
- richTextIdentifier: props.identifier,
- blockClientId: props.clientId
- }));
- }
-
- if (settings.__experimentalCreateOnChangeEditableValue) {
- var dispatchProps = Object.keys(props).reduce(function (accumulator, propKey) {
- var propValue = props[propKey];
- var keyPrefix = "format_".concat(name, "_dispatch_");
-
- if (propKey.startsWith(keyPrefix)) {
- var realKey = propKey.replace(keyPrefix, '');
- accumulator[realKey] = propValue;
- }
-
- return accumulator;
- }, {});
- additionalProps.onChangeEditableValue = getFunctionStackMemoized(props.onChangeEditableValue, settings.__experimentalCreateOnChangeEditableValue(Object(objectSpread["a" /* default */])({}, props["format_".concat(name)], dispatchProps), {
- richTextIdentifier: props.identifier,
- blockClientId: props.clientId
- }));
- }
-
- return Object(external_this_wp_element_["createElement"])(OriginalComponent, Object(esm_extends["a" /* default */])({}, props, additionalProps));
- };
- }
-
- var hocs = [];
-
- if (settings.__experimentalGetPropsForEditableTreePreparation) {
- hocs.push(Object(external_this_wp_data_["withSelect"])(function (sel, _ref) {
- var clientId = _ref.clientId,
- identifier = _ref.identifier;
- return Object(defineProperty["a" /* default */])({}, "format_".concat(name), settings.__experimentalGetPropsForEditableTreePreparation(sel, {
- richTextIdentifier: identifier,
- blockClientId: clientId
- }));
- }));
- }
-
- if (settings.__experimentalGetPropsForEditableTreeChangeHandler) {
- hocs.push(Object(external_this_wp_data_["withDispatch"])(function (disp, _ref3) {
- var clientId = _ref3.clientId,
- identifier = _ref3.identifier;
-
- var dispatchProps = settings.__experimentalGetPropsForEditableTreeChangeHandler(disp, {
- richTextIdentifier: identifier,
- blockClientId: clientId
- });
-
- return Object(external_lodash_["mapKeys"])(dispatchProps, function (value, key) {
- return "format_".concat(name, "_dispatch_").concat(key);
- });
- }));
- }
-
- return Object(external_this_wp_compose_["compose"])(hocs)(Component);
- });
- }
-
return settings;
}
// CONCATENATED MODULE: ./node_modules/@wordpress/rich-text/build-module/remove-format.js
+function remove_format_ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }
+
+function remove_format_objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { remove_format_ownKeys(Object(source), true).forEach(function (key) { Object(defineProperty["a" /* default */])(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { remove_format_ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
+
/**
* External dependencies
*/
@@ -1963,19 +2231,19 @@
// format.
if (startIndex === endIndex) {
- var format = Object(external_lodash_["find"])(newFormats[startIndex], {
+ var format = Object(external_this_lodash_["find"])(newFormats[startIndex], {
type: formatType
});
if (format) {
- while (Object(external_lodash_["find"])(newFormats[startIndex], format)) {
+ while (Object(external_this_lodash_["find"])(newFormats[startIndex], format)) {
filterFormats(newFormats, startIndex, formatType);
startIndex--;
}
endIndex++;
- while (Object(external_lodash_["find"])(newFormats[endIndex], format)) {
+ while (Object(external_this_lodash_["find"])(newFormats[endIndex], format)) {
filterFormats(newFormats, endIndex, formatType);
endIndex++;
}
@@ -1988,9 +2256,9 @@
}
}
- return normaliseFormats(Object(objectSpread["a" /* default */])({}, value, {
+ return normaliseFormats(remove_format_objectSpread({}, value, {
formats: newFormats,
- activeFormats: Object(external_lodash_["reject"])(activeFormats, {
+ activeFormats: Object(external_this_lodash_["reject"])(activeFormats, {
type: formatType
})
}));
@@ -2097,7 +2365,7 @@
* @return {Object} A new value with replacements applied.
*/
-function replace(_ref, pattern, replacement) {
+function replace_replace(_ref, pattern, replacement) {
var formats = _ref.formats,
replacements = _ref.replacements,
text = _ref.text,
@@ -2148,23 +2416,6 @@
});
}
-// CONCATENATED MODULE: ./node_modules/@wordpress/rich-text/build-module/insert-line-break.js
-/**
- * Internal dependencies
- */
-
-/**
- * Inserts a line break at the given or selected position.
- *
- * @param {Object} value Value to modify.
- *
- * @return {Object} The value with the line break inserted.
- */
-
-function insertLineBreak(value) {
- return insert(value, '\n');
-}
-
// CONCATENATED MODULE: ./node_modules/@wordpress/rich-text/build-module/insert-line-separator.js
/**
* Internal dependencies
@@ -2204,6 +2455,66 @@
return insert(value, valueToInsert, startIndex, endIndex);
}
+// CONCATENATED MODULE: ./node_modules/@wordpress/rich-text/build-module/remove-line-separator.js
+
+
+function remove_line_separator_ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }
+
+function remove_line_separator_objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { remove_line_separator_ownKeys(Object(source), true).forEach(function (key) { Object(defineProperty["a" /* default */])(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { remove_line_separator_ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
+
+/**
+ * Internal dependencies
+ */
+
+
+
+/**
+ * Removes a line separator character, if existing, from a Rich Text value at the current
+ * indices. If no line separator exists on the indices it will return undefined.
+ *
+ * @param {Object} value Value to modify.
+ * @param {boolean} backward indicates if are removing from the start index or the end index.
+ *
+ * @return {Object|undefined} A new value with the line separator removed. Or undefined if no line separator is found on the position.
+ */
+
+function removeLineSeparator(value) {
+ var backward = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;
+ var replacements = value.replacements,
+ text = value.text,
+ start = value.start,
+ end = value.end;
+ var collapsed = isCollapsed(value);
+ var index = start - 1;
+ var removeStart = collapsed ? start - 1 : start;
+ var removeEnd = end;
+
+ if (!backward) {
+ index = end;
+ removeStart = start;
+ removeEnd = collapsed ? end + 1 : end;
+ }
+
+ if (text[index] !== LINE_SEPARATOR) {
+ return;
+ }
+
+ var newValue; // If the line separator that is about te be removed
+ // contains wrappers, remove the wrappers first.
+
+ if (collapsed && replacements[index] && replacements[index].length) {
+ var newReplacements = replacements.slice();
+ newReplacements[index] = replacements[index].slice(0, -1);
+ newValue = remove_line_separator_objectSpread({}, value, {
+ replacements: newReplacements
+ });
+ } else {
+ newValue = remove_remove(value, removeStart, removeEnd);
+ }
+
+ return newValue;
+}
+
// CONCATENATED MODULE: ./node_modules/@wordpress/rich-text/build-module/insert-object.js
/**
* Internal dependencies
@@ -2235,6 +2546,10 @@
// CONCATENATED MODULE: ./node_modules/@wordpress/rich-text/build-module/slice.js
+function slice_ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }
+
+function slice_objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { slice_ownKeys(Object(source), true).forEach(function (key) { Object(defineProperty["a" /* default */])(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { slice_ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
+
/**
* Slice a Rich Text value from `startIndex` to `endIndex`. Indices are
* retrieved from the selection if none are provided. This is similar to
@@ -2254,7 +2569,7 @@
text = value.text;
if (startIndex === undefined || endIndex === undefined) {
- return Object(objectSpread["a" /* default */])({}, value);
+ return slice_objectSpread({}, value);
}
return {
@@ -2274,9 +2589,13 @@
* split at the given separator. This is similar to `String.prototype.split`.
* Indices are retrieved from the selection if none are provided.
*
- * @param {Object} value Value to modify.
+ * @param {Object} value
+ * @param {Object[]} value.formats
+ * @param {Object[]} value.replacements
+ * @param {string} value.text
+ * @param {number} value.start
+ * @param {number} value.end
* @param {number|string} [string] Start index, or string at which to split.
- * @param {number} [endStr] End index.
*
* @return {Array} An array of new values.
*/
@@ -2341,7 +2660,7 @@
end: 0
};
return [// Ensure newlines are trimmed.
- replace(before, /\u2028+$/, ''), replace(after, /^\u2028+/, '')];
+ replace_replace(before, /\u2028+$/, ''), replace_replace(after, /^\u2028+/, '')];
}
// CONCATENATED MODULE: ./node_modules/@wordpress/rich-text/build-module/get-format-type.js
@@ -2365,6 +2684,10 @@
+function to_tree_ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }
+
+function to_tree_objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { to_tree_ownKeys(Object(source), true).forEach(function (key) { Object(defineProperty["a" /* default */])(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { to_tree_ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
+
/**
* Internal dependencies
*/
@@ -2403,7 +2726,7 @@
if (!formatType) {
if (attributes) {
- elementAttributes = Object(objectSpread["a" /* default */])({}, attributes, elementAttributes);
+ elementAttributes = to_tree_objectSpread({}, attributes, {}, elementAttributes);
}
return {
@@ -2413,7 +2736,7 @@
};
}
- elementAttributes = Object(objectSpread["a" /* default */])({}, unregisteredAttributes, elementAttributes);
+ elementAttributes = to_tree_objectSpread({}, unregisteredAttributes, {}, elementAttributes);
for (var name in attributes) {
var key = formatType.attributes ? formatType.attributes[name] : false;
@@ -2439,17 +2762,29 @@
attributes: elementAttributes
};
}
-
-var padding = {
- type: 'br',
- attributes: {
- 'data-rich-text-padding': 'true'
- },
- object: true
-};
+/**
+ * Checks if both arrays of formats up until a certain index are equal.
+ *
+ * @param {Array} a Array of formats to compare.
+ * @param {Array} b Array of formats to compare.
+ * @param {number} index Index to check until.
+ */
+
+
+function isEqualUntil(a, b, index) {
+ do {
+ if (a[index] !== b[index]) {
+ return false;
+ }
+ } while (index--);
+
+ return true;
+}
+
function toTree(_ref2) {
var value = _ref2.value,
multilineTag = _ref2.multilineTag,
+ preserveWhiteSpace = _ref2.preserveWhiteSpace,
createEmpty = _ref2.createEmpty,
append = _ref2.append,
getLastChild = _ref2.getLastChild,
@@ -2460,7 +2795,8 @@
appendText = _ref2.appendText,
onStartIndex = _ref2.onStartIndex,
onEndIndex = _ref2.onEndIndex,
- isEditableTree = _ref2.isEditableTree;
+ isEditableTree = _ref2.isEditableTree,
+ placeholder = _ref2.placeholder;
var formats = value.formats,
replacements = value.replacements,
text = value.text,
@@ -2514,8 +2850,7 @@
node = getLastChild(node);
}
- append(getParent(node), padding);
- append(getParent(node), '');
+ append(getParent(node), ZWNBSP);
} // Set selection for the start of line.
@@ -2537,7 +2872,8 @@
if (characterFormats) {
characterFormats.forEach(function (format, formatIndex) {
- if (pointer && lastCharacterFormats && format === lastCharacterFormats[formatIndex] && ( // Do not reuse the last element if the character is a
+ if (pointer && lastCharacterFormats && // Reuse the last element if all formats remain the same.
+ isEqualUntil(characterFormats, lastCharacterFormats, formatIndex) && ( // Do not reuse the last element if the character is a
// line separator.
character !== LINE_SEPARATOR || characterFormats.length - 1 !== formatIndex)) {
pointer = getLastChild(pointer);
@@ -2583,12 +2919,12 @@
}
if (character === OBJECT_REPLACEMENT_CHARACTER) {
- pointer = append(getParent(pointer), fromFormat(Object(objectSpread["a" /* default */])({}, replacements[i], {
+ pointer = append(getParent(pointer), fromFormat(to_tree_objectSpread({}, replacements[i], {
object: true
}))); // Ensure pointer is text node.
pointer = append(getParent(pointer), '');
- } else if (character === '\n') {
+ } else if (!preserveWhiteSpace && character === '\n') {
pointer = append(getParent(pointer), {
type: 'br',
attributes: isEditableTree ? {
@@ -2613,7 +2949,20 @@
}
if (shouldInsertPadding && i === text.length) {
- append(getParent(pointer), padding);
+ append(getParent(pointer), ZWNBSP);
+
+ if (placeholder && text.length === 0) {
+ append(getParent(pointer), {
+ type: 'span',
+ attributes: {
+ 'data-rich-text-placeholder': placeholder,
+ // Necessary to prevent the placeholder from catching
+ // selection. The placeholder is also not editable after
+ // all.
+ contenteditable: 'false'
+ }
+ });
+ }
}
lastCharacterFormats = characterFormats;
@@ -2633,17 +2982,16 @@
+function to_dom_ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }
+
+function to_dom_objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { to_dom_ownKeys(Object(source), true).forEach(function (key) { Object(defineProperty["a" /* default */])(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { to_dom_ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
+
/**
* Internal dependencies
*/
/**
- * Browser dependencies
- */
-
-var to_dom_TEXT_NODE = window.Node.TEXT_NODE;
-/**
* Creates a path as an array of indices from the given root node to the given
* node.
*
@@ -2692,21 +3040,6 @@
offset: path[0]
};
}
-/**
- * Returns a new instance of a DOM tree upon which RichText operations can be
- * applied.
- *
- * Note: The current implementation will return a shared reference, reset on
- * each call to `createEmpty`. Therefore, you should not hold a reference to
- * the value to operate upon asynchronously, as it may have unexpected results.
- *
- * @return {WPRichTextTree} RichText tree.
- */
-
-
-var to_dom_createEmpty = function createEmpty() {
- return createElement(document, '');
-};
function to_dom_append(element, child) {
if (typeof child === 'string') {
@@ -2742,13 +3075,12 @@
return parentNode;
}
-function to_dom_isText(_ref3) {
- var nodeType = _ref3.nodeType;
- return nodeType === to_dom_TEXT_NODE;
+function to_dom_isText(node) {
+ return node.nodeType === node.TEXT_NODE;
}
-function to_dom_getText(_ref4) {
- var nodeValue = _ref4.nodeValue;
+function to_dom_getText(_ref3) {
+ var nodeValue = _ref3.nodeValue;
return nodeValue;
}
@@ -2756,28 +3088,43 @@
return node.parentNode.removeChild(node);
}
-function prepareFormats() {
- var prepareEditableTree = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];
- var value = arguments.length > 1 ? arguments[1] : undefined;
- return prepareEditableTree.reduce(function (accumlator, fn) {
- return fn(accumlator, value.text);
- }, value.formats);
-}
-
-function toDom(_ref5) {
- var value = _ref5.value,
- multilineTag = _ref5.multilineTag,
- prepareEditableTree = _ref5.prepareEditableTree,
- _ref5$isEditableTree = _ref5.isEditableTree,
- isEditableTree = _ref5$isEditableTree === void 0 ? true : _ref5$isEditableTree;
+function toDom(_ref4) {
+ var value = _ref4.value,
+ multilineTag = _ref4.multilineTag,
+ prepareEditableTree = _ref4.prepareEditableTree,
+ _ref4$isEditableTree = _ref4.isEditableTree,
+ isEditableTree = _ref4$isEditableTree === void 0 ? true : _ref4$isEditableTree,
+ placeholder = _ref4.placeholder,
+ _ref4$doc = _ref4.doc,
+ doc = _ref4$doc === void 0 ? document : _ref4$doc;
var startPath = [];
var endPath = [];
+
+ if (prepareEditableTree) {
+ value = to_dom_objectSpread({}, value, {
+ formats: prepareEditableTree(value)
+ });
+ }
+ /**
+ * Returns a new instance of a DOM tree upon which RichText operations can be
+ * applied.
+ *
+ * Note: The current implementation will return a shared reference, reset on
+ * each call to `createEmpty`. Therefore, you should not hold a reference to
+ * the value to operate upon asynchronously, as it may have unexpected results.
+ *
+ * @return {Object} RichText tree.
+ */
+
+
+ var createEmpty = function createEmpty() {
+ return createElement(doc, '');
+ };
+
var tree = toTree({
- value: Object(objectSpread["a" /* default */])({}, value, {
- formats: prepareFormats(prepareEditableTree, value)
- }),
+ value: value,
multilineTag: multilineTag,
- createEmpty: to_dom_createEmpty,
+ createEmpty: createEmpty,
append: to_dom_append,
getLastChild: to_dom_getLastChild,
getParent: to_dom_getParent,
@@ -2791,7 +3138,8 @@
onEndIndex: function onEndIndex(body, pointer) {
endPath = createPathToNode(pointer, body, [pointer.nodeValue.length]);
},
- isEditableTree: isEditableTree
+ isEditableTree: isEditableTree,
+ placeholder: placeholder
});
return {
body: tree,
@@ -2813,18 +3161,21 @@
* @param {Array} [$1.multilineWrapperTags] Tags where lines can be found if nesting is possible.
*/
-function apply(_ref6) {
- var value = _ref6.value,
- current = _ref6.current,
- multilineTag = _ref6.multilineTag,
- prepareEditableTree = _ref6.prepareEditableTree,
- __unstableDomOnly = _ref6.__unstableDomOnly;
+function apply(_ref5) {
+ var value = _ref5.value,
+ current = _ref5.current,
+ multilineTag = _ref5.multilineTag,
+ prepareEditableTree = _ref5.prepareEditableTree,
+ __unstableDomOnly = _ref5.__unstableDomOnly,
+ placeholder = _ref5.placeholder;
// Construct a new element tree in memory.
var _toDom = toDom({
value: value,
multilineTag: multilineTag,
- prepareEditableTree: prepareEditableTree
+ prepareEditableTree: prepareEditableTree,
+ placeholder: placeholder,
+ doc: current.ownerDocument
}),
body = _toDom.body,
selection = _toDom.selection;
@@ -2845,14 +3196,17 @@
if (!currentChild) {
current.appendChild(futureChild);
} else if (!currentChild.isEqualNode(futureChild)) {
- if (currentChild.nodeName !== futureChild.nodeName || currentChild.nodeType === to_dom_TEXT_NODE && currentChild.data !== futureChild.data) {
+ if (currentChild.nodeName !== futureChild.nodeName || currentChild.nodeType === currentChild.TEXT_NODE && currentChild.data !== futureChild.data) {
current.replaceChild(futureChild, currentChild);
} else {
var currentAttributes = currentChild.attributes;
var futureAttributes = futureChild.attributes;
if (currentAttributes) {
- for (var ii = 0; ii < currentAttributes.length; ii++) {
+ var ii = currentAttributes.length; // Reverse loop because `removeAttribute` on `currentChild`
+ // changes `currentAttributes`.
+
+ while (ii--) {
var name = currentAttributes[ii].name;
if (!futureChild.getAttribute(name)) {
@@ -2864,11 +3218,11 @@
if (futureAttributes) {
for (var _ii = 0; _ii < futureAttributes.length; _ii++) {
var _futureAttributes$_ii = futureAttributes[_ii],
- name = _futureAttributes$_ii.name,
+ _name = _futureAttributes$_ii.name,
value = _futureAttributes$_ii.value;
- if (currentChild.getAttribute(name) !== value) {
- currentChild.setAttribute(name, value);
+ if (currentChild.getAttribute(_name) !== value) {
+ currentChild.setAttribute(_name, value);
}
}
}
@@ -2902,9 +3256,9 @@
return a.startContainer === b.startContainer && a.startOffset === b.startOffset && a.endContainer === b.endContainer && a.endOffset === b.endOffset;
}
-function applySelection(_ref7, current) {
- var startPath = _ref7.startPath,
- endPath = _ref7.endPath;
+function applySelection(_ref6, current) {
+ var startPath = _ref6.startPath,
+ endPath = _ref6.endPath;
var _getNodeByPath = getNodeByPath(current, startPath),
startContainer = _getNodeByPath.node,
@@ -2914,32 +3268,42 @@
endContainer = _getNodeByPath2.node,
endOffset = _getNodeByPath2.offset;
- var selection = window.getSelection();
var ownerDocument = current.ownerDocument;
+ var defaultView = ownerDocument.defaultView;
+ var selection = defaultView.getSelection();
var range = ownerDocument.createRange();
range.setStart(startContainer, startOffset);
range.setEnd(endContainer, endOffset);
+ var activeElement = ownerDocument.activeElement;
if (selection.rangeCount > 0) {
// If the to be added range and the live range are the same, there's no
// need to remove the live range and add the equivalent range.
if (isRangeEqual(range, selection.getRangeAt(0))) {
- // Set back focus if focus is lost.
- if (ownerDocument.activeElement !== current) {
- current.focus();
- }
-
return;
}
selection.removeAllRanges();
}
- selection.addRange(range);
+ selection.addRange(range); // This function is not intended to cause a shift in focus. Since the above
+ // selection manipulations may shift focus, ensure that focus is restored to
+ // its previous state.
+
+ if (activeElement !== ownerDocument.activeElement) {
+ // The `instanceof` checks protect against edge cases where the focused
+ // element is not of the interface HTMLElement (does not have a `focus`
+ // or `blur` property).
+ //
+ // See: https://github.com/Microsoft/TypeScript/issues/5901#issuecomment-431649653
+ if (activeElement instanceof defaultView.HTMLElement) {
+ activeElement.focus();
+ }
+ }
}
// EXTERNAL MODULE: external {"this":["wp","escapeHtml"]}
-var external_this_wp_escapeHtml_ = __webpack_require__(69);
+var external_this_wp_escapeHtml_ = __webpack_require__(89);
// CONCATENATED MODULE: ./node_modules/@wordpress/rich-text/build-module/to-html-string.js
/**
@@ -2955,19 +3319,23 @@
* Create an HTML string from a Rich Text value. If a `multilineTag` is
* provided, text separated by a line separator will be wrapped in it.
*
- * @param {Object} $1 Named argements.
- * @param {Object} $1.value Rich text value.
- * @param {string} [$1.multilineTag] Multiline tag.
+ * @param {Object} $1 Named argements.
+ * @param {Object} $1.value Rich text value.
+ * @param {string} [$1.multilineTag] Multiline tag.
+ * @param {?boolean} [$1.preserveWhiteSpace] Whether or not to use newline
+ * characters for line breaks.
*
* @return {string} HTML string.
*/
function toHTMLString(_ref) {
var value = _ref.value,
- multilineTag = _ref.multilineTag;
+ multilineTag = _ref.multilineTag,
+ preserveWhiteSpace = _ref.preserveWhiteSpace;
var tree = toTree({
value: value,
multilineTag: multilineTag,
+ preserveWhiteSpace: preserveWhiteSpace,
createEmpty: to_html_string_createEmpty,
append: to_html_string_append,
getLastChild: to_html_string_getLastChild,
@@ -3056,7 +3424,7 @@
function createChildrenHTML() {
var children = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];
return children.map(function (child) {
- return child.text === undefined ? createElementHTML(child) : Object(external_this_wp_escapeHtml_["escapeHTML"])(child.text);
+ return child.text === undefined ? createElementHTML(child) : Object(external_this_wp_escapeHtml_["escapeEditableHTML"])(child.text);
}).join('');
}
@@ -3089,6 +3457,7 @@
* WordPress dependencies
*/
+/** @typedef {import('./register-format-type').WPFormat} WPFormat */
/**
* Unregisters a format.
@@ -3107,52 +3476,72 @@
return;
}
- if (oldFormat.__experimentalCreatePrepareEditableTree && oldFormat.__experimentalGetPropsForEditableTreePreparation) {
- Object(external_this_wp_hooks_["removeFilter"])('experimentalRichText', name);
- }
-
Object(external_this_wp_data_["dispatch"])('core/rich-text').removeFormatTypes(name);
return oldFormat;
}
-// CONCATENATED MODULE: ./node_modules/@wordpress/rich-text/build-module/get-line-index.js
+// CONCATENATED MODULE: ./node_modules/@wordpress/rich-text/build-module/can-indent-list-items.js
/**
* Internal dependencies
*/
/**
- * Gets the currently selected line index, or the first line index if the
- * selection spans over multiple items.
+ * Checks if the selected list item can be indented.
*
- * @param {Object} value Value to get the line index from.
- * @param {boolean} startIndex Optional index that should be contained by the
- * line. Defaults to the selection start of the
- * value.
+ * @param {Object} value Value to check.
*
- * @return {?boolean} The line index. Undefined if not found.
+ * @return {boolean} Whether or not the selected list item can be indented.
*/
-function getLineIndex(_ref) {
- var start = _ref.start,
- text = _ref.text;
- var startIndex = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : start;
- var index = startIndex;
-
- while (index--) {
- if (text[index] === LINE_SEPARATOR) {
- return index;
- }
+function canIndentListItems(value) {
+ var lineIndex = getLineIndex(value); // There is only one line, so the line cannot be indented.
+
+ if (lineIndex === undefined) {
+ return false;
}
+
+ var replacements = value.replacements;
+ var previousLineIndex = getLineIndex(value, lineIndex);
+ var formatsAtLineIndex = replacements[lineIndex] || [];
+ var formatsAtPreviousLineIndex = replacements[previousLineIndex] || []; // If the indentation of the current line is greater than previous line,
+ // then the line cannot be furter indented.
+
+ return formatsAtLineIndex.length <= formatsAtPreviousLineIndex.length;
+}
+
+// CONCATENATED MODULE: ./node_modules/@wordpress/rich-text/build-module/can-outdent-list-items.js
+/**
+ * Internal dependencies
+ */
+
+/**
+ * Checks if the selected list item can be outdented.
+ *
+ * @param {Object} value Value to check.
+ *
+ * @return {boolean} Whether or not the selected list item can be outdented.
+ */
+
+function canOutdentListItems(value) {
+ var replacements = value.replacements,
+ start = value.start;
+ var startingLineIndex = getLineIndex(value, start);
+ return replacements[startingLineIndex] !== undefined;
}
// CONCATENATED MODULE: ./node_modules/@wordpress/rich-text/build-module/indent-list-items.js
+function indent_list_items_ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }
+
+function indent_list_items_objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { indent_list_items_ownKeys(Object(source), true).forEach(function (key) { Object(defineProperty["a" /* default */])(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { indent_list_items_ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
+
/**
* Internal dependencies
*/
+
/**
* Gets the line index of the first previous list item with higher indentation.
*
@@ -3194,24 +3583,15 @@
function indentListItems(value, rootFormat) {
- var lineIndex = getLineIndex(value); // There is only one line, so the line cannot be indented.
-
- if (lineIndex === undefined) {
+ if (!canIndentListItems(value)) {
return value;
}
+ var lineIndex = getLineIndex(value);
+ var previousLineIndex = getLineIndex(value, lineIndex);
var text = value.text,
replacements = value.replacements,
end = value.end;
- var previousLineIndex = getLineIndex(value, lineIndex);
- var formatsAtLineIndex = replacements[lineIndex] || [];
- var formatsAtPreviousLineIndex = replacements[previousLineIndex] || []; // The the indentation of the current line is greater than previous line,
- // then the line cannot be furter indented.
-
- if (formatsAtLineIndex.length > formatsAtPreviousLineIndex.length) {
- return value;
- }
-
var newFormats = replacements.slice();
var targetLevelLineIndex = getTargetLevelLineIndex(value, lineIndex);
@@ -3233,7 +3613,7 @@
}
}
- return Object(objectSpread["a" /* default */])({}, value, {
+ return indent_list_items_objectSpread({}, value, {
replacements: newFormats
});
}
@@ -3317,6 +3697,10 @@
// CONCATENATED MODULE: ./node_modules/@wordpress/rich-text/build-module/outdent-list-items.js
+function outdent_list_items_ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }
+
+function outdent_list_items_objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { outdent_list_items_ownKeys(Object(source), true).forEach(function (key) { Object(defineProperty["a" /* default */])(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { outdent_list_items_ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
+
/**
* Internal dependencies
*/
@@ -3324,6 +3708,7 @@
+
/**
* Outdents any selected list items if possible.
*
@@ -3333,16 +3718,15 @@
*/
function outdentListItems(value) {
+ if (!canOutdentListItems(value)) {
+ return value;
+ }
+
var text = value.text,
replacements = value.replacements,
start = value.start,
end = value.end;
- var startingLineIndex = getLineIndex(value, start); // Return early if the starting line index cannot be further outdented.
-
- if (replacements[startingLineIndex] === undefined) {
- return value;
- }
-
+ var startingLineIndex = getLineIndex(value, start);
var newFormats = replacements.slice(0);
var parentFormats = replacements[getParentLineIndex(value, startingLineIndex)] || [];
var endingLineIndex = getLineIndex(value, end);
@@ -3366,7 +3750,7 @@
}
}
- return Object(objectSpread["a" /* default */])({}, value, {
+ return outdent_list_items_objectSpread({}, value, {
replacements: newFormats
});
}
@@ -3374,6 +3758,10 @@
// CONCATENATED MODULE: ./node_modules/@wordpress/rich-text/build-module/change-list-type.js
+function change_list_type_ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }
+
+function change_list_type_objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { change_list_type_ownKeys(Object(source), true).forEach(function (key) { Object(defineProperty["a" /* default */])(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { change_list_type_ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
+
/**
* Internal dependencies
*/
@@ -3430,11 +3818,90 @@
return value;
}
- return Object(objectSpread["a" /* default */])({}, value, {
+ return change_list_type_objectSpread({}, value, {
replacements: newReplacements
});
}
+// EXTERNAL MODULE: ./node_modules/@babel/runtime/helpers/esm/extends.js
+var esm_extends = __webpack_require__(8);
+
+// EXTERNAL MODULE: ./node_modules/@babel/runtime/helpers/esm/slicedToArray.js + 1 modules
+var slicedToArray = __webpack_require__(14);
+
+// EXTERNAL MODULE: ./node_modules/@babel/runtime/helpers/esm/objectWithoutProperties.js
+var objectWithoutProperties = __webpack_require__(15);
+
+// EXTERNAL MODULE: external {"this":["wp","element"]}
+var external_this_wp_element_ = __webpack_require__(0);
+
+// EXTERNAL MODULE: ./node_modules/classnames/index.js
+var classnames = __webpack_require__(11);
+var classnames_default = /*#__PURE__*/__webpack_require__.n(classnames);
+
+// EXTERNAL MODULE: external {"this":["wp","keycodes"]}
+var external_this_wp_keycodes_ = __webpack_require__(21);
+
+// EXTERNAL MODULE: external {"this":["wp","deprecated"]}
+var external_this_wp_deprecated_ = __webpack_require__(37);
+var external_this_wp_deprecated_default = /*#__PURE__*/__webpack_require__.n(external_this_wp_deprecated_);
+
+// CONCATENATED MODULE: ./node_modules/@wordpress/rich-text/build-module/component/format-edit.js
+
+
+/**
+ * Internal dependencies
+ */
+
+
+/**
+ * Set of all interactive content tags.
+ *
+ * @see https://html.spec.whatwg.org/multipage/dom.html#interactive-content
+ */
+
+var interactiveContentTags = new Set(['a', 'audio', 'button', 'details', 'embed', 'iframe', 'input', 'label', 'select', 'textarea', 'video']);
+function FormatEdit(_ref) {
+ var formatTypes = _ref.formatTypes,
+ onChange = _ref.onChange,
+ onFocus = _ref.onFocus,
+ value = _ref.value,
+ allowedFormats = _ref.allowedFormats,
+ withoutInteractiveFormatting = _ref.withoutInteractiveFormatting;
+ return formatTypes.map(function (_ref2) {
+ var name = _ref2.name,
+ Edit = _ref2.edit,
+ tagName = _ref2.tagName;
+
+ if (!Edit) {
+ return null;
+ }
+
+ if (allowedFormats && allowedFormats.indexOf(name) === -1) {
+ return null;
+ }
+
+ if (withoutInteractiveFormatting && interactiveContentTags.has(tagName)) {
+ return null;
+ }
+
+ var activeFormat = getActiveFormat(value, name);
+ var isActive = activeFormat !== undefined;
+ var activeObject = getActiveObject(value);
+ var isObjectActive = activeObject !== undefined && activeObject.type === name;
+ return Object(external_this_wp_element_["createElement"])(Edit, {
+ key: name,
+ isActive: isActive,
+ activeAttributes: isActive ? activeFormat.attributes || {} : {},
+ isObjectActive: isObjectActive,
+ activeObjectAttributes: isObjectActive ? activeObject.attributes || {} : {},
+ value: value,
+ onChange: onChange,
+ onFocus: onFocus
+ });
+ });
+}
+
// CONCATENATED MODULE: ./node_modules/@wordpress/rich-text/build-module/update-formats.js
/**
* Internal dependencies
@@ -3487,41 +3954,203 @@
return value;
}
-// CONCATENATED MODULE: ./node_modules/@wordpress/rich-text/build-module/index.js
-/* concated harmony reexport applyFormat */__webpack_require__.d(__webpack_exports__, "applyFormat", function() { return applyFormat; });
-/* concated harmony reexport charAt */__webpack_require__.d(__webpack_exports__, "charAt", function() { return charAt; });
-/* concated harmony reexport concat */__webpack_require__.d(__webpack_exports__, "concat", function() { return concat; });
-/* concated harmony reexport create */__webpack_require__.d(__webpack_exports__, "create", function() { return create; });
-/* concated harmony reexport getActiveFormat */__webpack_require__.d(__webpack_exports__, "getActiveFormat", function() { return getActiveFormat; });
-/* concated harmony reexport getActiveObject */__webpack_require__.d(__webpack_exports__, "getActiveObject", function() { return getActiveObject; });
-/* concated harmony reexport getSelectionEnd */__webpack_require__.d(__webpack_exports__, "getSelectionEnd", function() { return getSelectionEnd; });
-/* concated harmony reexport getSelectionStart */__webpack_require__.d(__webpack_exports__, "getSelectionStart", function() { return getSelectionStart; });
-/* concated harmony reexport getTextContent */__webpack_require__.d(__webpack_exports__, "getTextContent", function() { return getTextContent; });
-/* concated harmony reexport isCollapsed */__webpack_require__.d(__webpack_exports__, "isCollapsed", function() { return isCollapsed; });
-/* concated harmony reexport isEmpty */__webpack_require__.d(__webpack_exports__, "isEmpty", function() { return isEmpty; });
-/* concated harmony reexport isEmptyLine */__webpack_require__.d(__webpack_exports__, "isEmptyLine", function() { return isEmptyLine; });
-/* concated harmony reexport join */__webpack_require__.d(__webpack_exports__, "join", function() { return join; });
-/* concated harmony reexport registerFormatType */__webpack_require__.d(__webpack_exports__, "registerFormatType", function() { return registerFormatType; });
-/* concated harmony reexport removeFormat */__webpack_require__.d(__webpack_exports__, "removeFormat", function() { return removeFormat; });
-/* concated harmony reexport remove */__webpack_require__.d(__webpack_exports__, "remove", function() { return remove_remove; });
-/* concated harmony reexport replace */__webpack_require__.d(__webpack_exports__, "replace", function() { return replace; });
-/* concated harmony reexport insert */__webpack_require__.d(__webpack_exports__, "insert", function() { return insert; });
-/* concated harmony reexport insertLineBreak */__webpack_require__.d(__webpack_exports__, "insertLineBreak", function() { return insertLineBreak; });
-/* concated harmony reexport insertLineSeparator */__webpack_require__.d(__webpack_exports__, "insertLineSeparator", function() { return insertLineSeparator; });
-/* concated harmony reexport insertObject */__webpack_require__.d(__webpack_exports__, "insertObject", function() { return insertObject; });
-/* concated harmony reexport slice */__webpack_require__.d(__webpack_exports__, "slice", function() { return slice; });
-/* concated harmony reexport split */__webpack_require__.d(__webpack_exports__, "split", function() { return split; });
-/* concated harmony reexport apply */__webpack_require__.d(__webpack_exports__, "apply", function() { return apply; });
-/* concated harmony reexport unstableToDom */__webpack_require__.d(__webpack_exports__, "unstableToDom", function() { return toDom; });
-/* concated harmony reexport toHTMLString */__webpack_require__.d(__webpack_exports__, "toHTMLString", function() { return toHTMLString; });
-/* concated harmony reexport toggleFormat */__webpack_require__.d(__webpack_exports__, "toggleFormat", function() { return toggleFormat; });
-/* concated harmony reexport LINE_SEPARATOR */__webpack_require__.d(__webpack_exports__, "LINE_SEPARATOR", function() { return LINE_SEPARATOR; });
-/* concated harmony reexport unregisterFormatType */__webpack_require__.d(__webpack_exports__, "unregisterFormatType", function() { return unregisterFormatType; });
-/* concated harmony reexport indentListItems */__webpack_require__.d(__webpack_exports__, "indentListItems", function() { return indentListItems; });
-/* concated harmony reexport outdentListItems */__webpack_require__.d(__webpack_exports__, "outdentListItems", function() { return outdentListItems; });
-/* concated harmony reexport changeListType */__webpack_require__.d(__webpack_exports__, "changeListType", function() { return changeListType; });
-/* concated harmony reexport __unstableUpdateFormats */__webpack_require__.d(__webpack_exports__, "__unstableUpdateFormats", function() { return updateFormats; });
-/* concated harmony reexport __unstableGetActiveFormats */__webpack_require__.d(__webpack_exports__, "__unstableGetActiveFormats", function() { return getActiveFormats; });
+// CONCATENATED MODULE: ./node_modules/@wordpress/rich-text/build-module/component/with-format-types.js
+
+
+
+
+function with_format_types_ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }
+
+function with_format_types_objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { with_format_types_ownKeys(Object(source), true).forEach(function (key) { Object(defineProperty["a" /* default */])(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { with_format_types_ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
+
+/**
+ * External dependencies
+ */
+
+/**
+ * WordPress dependencies
+ */
+
+
+
+
+function formatTypesSelector(select) {
+ return select('core/rich-text').getFormatTypes();
+}
+/**
+ * This higher-order component provides RichText with the `formatTypes` prop
+ * and its derived props from experimental format type settings.
+ *
+ * @param {WPComponent} RichText The rich text component to add props for.
+ *
+ * @return {WPComponent} New enhanced component.
+ */
+
+
+function withFormatTypes(RichText) {
+ return function WithFormatTypes(props) {
+ var clientId = props.clientId,
+ identifier = props.identifier;
+ var formatTypes = Object(external_this_wp_data_["useSelect"])(formatTypesSelector, []);
+ var selectProps = Object(external_this_wp_data_["useSelect"])(function (select) {
+ return formatTypes.reduce(function (acc, settings) {
+ if (!settings.__experimentalGetPropsForEditableTreePreparation) {
+ return acc;
+ }
+
+ var selectPrefix = "format_prepare_props_(".concat(settings.name, ")_");
+ return with_format_types_objectSpread({}, acc, {}, Object(external_this_lodash_["mapKeys"])(settings.__experimentalGetPropsForEditableTreePreparation(select, {
+ richTextIdentifier: identifier,
+ blockClientId: clientId
+ }), function (value, key) {
+ return selectPrefix + key;
+ }));
+ }, {});
+ }, [formatTypes, clientId, identifier]);
+
+ var dispatchProps = Object(external_this_wp_data_["__unstableUseDispatchWithMap"])(function (dispatch) {
+ return formatTypes.reduce(function (acc, settings) {
+ if (!settings.__experimentalGetPropsForEditableTreeChangeHandler) {
+ return acc;
+ }
+
+ var dispatchPrefix = "format_on_change_props_(".concat(settings.name, ")_");
+ return with_format_types_objectSpread({}, acc, {}, Object(external_this_lodash_["mapKeys"])(settings.__experimentalGetPropsForEditableTreeChangeHandler(dispatch, {
+ richTextIdentifier: identifier,
+ blockClientId: clientId
+ }), function (value, key) {
+ return dispatchPrefix + key;
+ }));
+ }, {});
+ }, [formatTypes, clientId, identifier]);
+
+ var newProps = Object(external_this_wp_element_["useMemo"])(function () {
+ return formatTypes.reduce(function (acc, settings) {
+ if (!settings.__experimentalCreatePrepareEditableTree) {
+ return acc;
+ }
+
+ var args = {
+ richTextIdentifier: identifier,
+ blockClientId: clientId
+ };
+
+ var combined = with_format_types_objectSpread({}, selectProps, {}, dispatchProps);
+
+ var name = settings.name;
+ var selectPrefix = "format_prepare_props_(".concat(name, ")_");
+ var dispatchPrefix = "format_on_change_props_(".concat(name, ")_");
+ var propsByPrefix = Object.keys(combined).reduce(function (accumulator, key) {
+ if (key.startsWith(selectPrefix)) {
+ accumulator[key.slice(selectPrefix.length)] = combined[key];
+ }
+
+ if (key.startsWith(dispatchPrefix)) {
+ accumulator[key.slice(dispatchPrefix.length)] = combined[key];
+ }
+
+ return accumulator;
+ }, {});
+
+ if (settings.__experimentalCreateOnChangeEditableValue) {
+ var _objectSpread2;
+
+ return with_format_types_objectSpread({}, acc, (_objectSpread2 = {}, Object(defineProperty["a" /* default */])(_objectSpread2, "format_value_functions_(".concat(name, ")"), settings.__experimentalCreatePrepareEditableTree(propsByPrefix, args)), Object(defineProperty["a" /* default */])(_objectSpread2, "format_on_change_functions_(".concat(name, ")"), settings.__experimentalCreateOnChangeEditableValue(propsByPrefix, args)), _objectSpread2));
+ }
+
+ return with_format_types_objectSpread({}, acc, Object(defineProperty["a" /* default */])({}, "format_prepare_functions_(".concat(name, ")"), settings.__experimentalCreatePrepareEditableTree(propsByPrefix, args)));
+ }, {});
+ }, [formatTypes, clientId, identifier, selectProps, dispatchProps]);
+ return Object(external_this_wp_element_["createElement"])(RichText, Object(esm_extends["a" /* default */])({}, props, selectProps, newProps, {
+ formatTypes: formatTypes
+ }));
+ };
+}
+
+// CONCATENATED MODULE: ./node_modules/@wordpress/rich-text/build-module/component/use-boundary-style.js
+/**
+ * WordPress dependencies
+ */
+
+/**
+ * Calculates and renders the format boundary style when the active formats
+ * change.
+ */
+
+function useBoundaryStyle(_ref) {
+ var activeFormats = _ref.activeFormats,
+ ref = _ref.ref;
+ Object(external_this_wp_element_["useEffect"])(function () {
+ // There's no need to recalculate the boundary styles if no formats are
+ // active, because no boundary styles will be visible.
+ if (!activeFormats || !activeFormats.length) {
+ return;
+ }
+
+ var boundarySelector = '*[data-rich-text-format-boundary]';
+ var element = ref.current.querySelector(boundarySelector);
+
+ if (!element) {
+ return;
+ }
+
+ var ownerDocument = element.ownerDocument;
+ var defaultView = ownerDocument.defaultView;
+ var computedStyle = defaultView.getComputedStyle(element);
+ var newColor = computedStyle.color.replace(')', ', 0.2)').replace('rgb', 'rgba');
+ var selector = ".rich-text:focus ".concat(boundarySelector);
+ var rule = "background-color: ".concat(newColor);
+ var style = "".concat(selector, " {").concat(rule, "}");
+ var globalStyleId = 'rich-text-boundary-style';
+ var globalStyle = ownerDocument.getElementById(globalStyleId);
+
+ if (!globalStyle) {
+ globalStyle = ownerDocument.createElement('style');
+ globalStyle.id = globalStyleId;
+ ownerDocument.head.appendChild(globalStyle);
+ }
+
+ if (globalStyle.innerHTML !== style) {
+ globalStyle.innerHTML = style;
+ }
+ }, [activeFormats]);
+}
+
+// CONCATENATED MODULE: ./node_modules/@wordpress/rich-text/build-module/component/use-inline-warning.js
+/**
+ * WordPress dependencies
+ */
+
+function useInlineWarning(_ref) {
+ var ref = _ref.ref;
+ Object(external_this_wp_element_["useEffect"])(function () {
+ if (false) { var computedStyle, defaultView, target; }
+ }, []);
+}
+
+// CONCATENATED MODULE: ./node_modules/@wordpress/rich-text/build-module/component/index.js
+
+
+
+
+
+
+function component_ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }
+
+function component_objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { component_ownKeys(Object(source), true).forEach(function (key) { Object(defineProperty["a" /* default */])(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { component_ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
+
+/**
+ * External dependencies
+ */
+
+
+/**
+ * WordPress dependencies
+ */
+
+
+
+
/**
* Internal dependencies
*/
@@ -3543,6 +4172,1108 @@
+/** @typedef {import('@wordpress/element').WPSyntheticEvent} WPSyntheticEvent */
+
+/**
+ * All inserting input types that would insert HTML into the DOM.
+ *
+ * @see https://www.w3.org/TR/input-events-2/#interface-InputEvent-Attributes
+ *
+ * @type {Set}
+ */
+
+var INSERTION_INPUT_TYPES_TO_IGNORE = new Set(['insertParagraph', 'insertOrderedList', 'insertUnorderedList', 'insertHorizontalRule', 'insertLink']);
+/**
+ * In HTML, leading and trailing spaces are not visible, and multiple spaces
+ * elsewhere are visually reduced to one space. This rule prevents spaces from
+ * collapsing so all space is visible in the editor and can be removed. It also
+ * prevents some browsers from inserting non-breaking spaces at the end of a
+ * line to prevent the space from visually disappearing. Sometimes these non
+ * breaking spaces can linger in the editor causing unwanted non breaking spaces
+ * in between words. If also prevent Firefox from inserting a trailing `br` node
+ * to visualise any trailing space, causing the element to be saved.
+ *
+ * > Authors are encouraged to set the 'white-space' property on editing hosts
+ * > and on markup that was originally created through these editing mechanisms
+ * > to the value 'pre-wrap'. Default HTML whitespace handling is not well
+ * > suited to WYSIWYG editing, and line wrapping will not work correctly in
+ * > some corner cases if 'white-space' is left at its default value.
+ *
+ * https://html.spec.whatwg.org/multipage/interaction.html#best-practices-for-in-page-editors
+ *
+ * @type {string}
+ */
+
+var whiteSpace = 'pre-wrap';
+/**
+ * Default style object for the editable element.
+ *
+ * @type {Object<string,string>}
+ */
+
+var defaultStyle = {
+ whiteSpace: whiteSpace
+};
+var EMPTY_ACTIVE_FORMATS = [];
+
+function createPrepareEditableTree(props, prefix) {
+ var fns = Object.keys(props).reduce(function (accumulator, key) {
+ if (key.startsWith(prefix)) {
+ accumulator.push(props[key]);
+ }
+
+ return accumulator;
+ }, []);
+ return function (value) {
+ return fns.reduce(function (accumulator, fn) {
+ return fn(accumulator, value.text);
+ }, value.formats);
+ };
+}
+/**
+ * If the selection is set on the placeholder element, collapse the selection to
+ * the start (before the placeholder).
+ *
+ * @param {Window} defaultView
+ */
+
+
+function fixPlaceholderSelection(defaultView) {
+ var selection = defaultView.getSelection();
+ var anchorNode = selection.anchorNode,
+ anchorOffset = selection.anchorOffset;
+
+ if (anchorNode.nodeType !== anchorNode.ELEMENT_NODE) {
+ return;
+ }
+
+ var targetNode = anchorNode.childNodes[anchorOffset];
+
+ if (!targetNode || targetNode.nodeType !== targetNode.ELEMENT_NODE || !targetNode.getAttribute('data-rich-text-placeholder')) {
+ return;
+ }
+
+ selection.collapseToStart();
+}
+
+function component_RichText(_ref) {
+ var _ref$tagName = _ref.tagName,
+ TagName = _ref$tagName === void 0 ? 'div' : _ref$tagName,
+ _ref$value = _ref.value,
+ value = _ref$value === void 0 ? '' : _ref$value,
+ selectionStart = _ref.selectionStart,
+ selectionEnd = _ref.selectionEnd,
+ children = _ref.children,
+ allowedFormats = _ref.allowedFormats,
+ withoutInteractiveFormatting = _ref.withoutInteractiveFormatting,
+ formatTypes = _ref.formatTypes,
+ style = _ref.style,
+ className = _ref.className,
+ placeholder = _ref.placeholder,
+ disabled = _ref.disabled,
+ preserveWhiteSpace = _ref.preserveWhiteSpace,
+ onPaste = _ref.onPaste,
+ _ref$format = _ref.format,
+ format = _ref$format === void 0 ? 'string' : _ref$format,
+ onDelete = _ref.onDelete,
+ onEnter = _ref.onEnter,
+ onSelectionChange = _ref.onSelectionChange,
+ onChange = _ref.onChange,
+ onFocus = _ref.unstableOnFocus,
+ setFocusedElement = _ref.setFocusedElement,
+ instanceId = _ref.instanceId,
+ multilineTag = _ref.__unstableMultilineTag,
+ multilineRootTag = _ref.__unstableMultilineRootTag,
+ disableFormats = _ref.__unstableDisableFormats,
+ didAutomaticChange = _ref.__unstableDidAutomaticChange,
+ inputRule = _ref.__unstableInputRule,
+ markAutomaticChange = _ref.__unstableMarkAutomaticChange,
+ allowPrefixTransformations = _ref.__unstableAllowPrefixTransformations,
+ undo = _ref.__unstableUndo,
+ isCaretWithinFormattedText = _ref.__unstableIsCaretWithinFormattedText,
+ onEnterFormattedText = _ref.__unstableOnEnterFormattedText,
+ onExitFormattedText = _ref.__unstableOnExitFormattedText,
+ onCreateUndoLevel = _ref.__unstableOnCreateUndoLevel,
+ isSelected = _ref.__unstableIsSelected,
+ ref = _ref.forwardedRef,
+ remainingProps = Object(objectWithoutProperties["a" /* default */])(_ref, ["tagName", "value", "selectionStart", "selectionEnd", "children", "allowedFormats", "withoutInteractiveFormatting", "formatTypes", "style", "className", "placeholder", "disabled", "preserveWhiteSpace", "onPaste", "format", "onDelete", "onEnter", "onSelectionChange", "onChange", "unstableOnFocus", "setFocusedElement", "instanceId", "__unstableMultilineTag", "__unstableMultilineRootTag", "__unstableDisableFormats", "__unstableDidAutomaticChange", "__unstableInputRule", "__unstableMarkAutomaticChange", "__unstableAllowPrefixTransformations", "__unstableUndo", "__unstableIsCaretWithinFormattedText", "__unstableOnEnterFormattedText", "__unstableOnExitFormattedText", "__unstableOnCreateUndoLevel", "__unstableIsSelected", "forwardedRef"]);
+
+ var _useState = Object(external_this_wp_element_["useState"])(),
+ _useState2 = Object(slicedToArray["a" /* default */])(_useState, 2),
+ _useState2$ = _useState2[0],
+ activeFormats = _useState2$ === void 0 ? [] : _useState2$,
+ setActiveFormats = _useState2[1]; // For backward compatibility, fall back to tagName if it's a string.
+ // tagName can now be a component for light blocks.
+
+
+ if (!multilineRootTag && typeof TagName === 'string') {
+ multilineRootTag = TagName;
+ }
+
+ function getDoc() {
+ return ref.current.ownerDocument;
+ }
+
+ function getWin() {
+ return getDoc().defaultView;
+ }
+ /**
+ * Converts the outside data structure to our internal representation.
+ *
+ * @param {*} string The outside value, data type depends on props.
+ *
+ * @return {Object} An internal rich-text value.
+ */
+
+
+ function formatToValue(string) {
+ if (disableFormats) {
+ return {
+ text: string,
+ formats: Array(string.length),
+ replacements: Array(string.length)
+ };
+ }
+
+ if (format !== 'string') {
+ return string;
+ }
+
+ var prepare = createPrepareEditableTree(remainingProps, 'format_value_functions');
+ var result = create({
+ html: string,
+ multilineTag: multilineTag,
+ multilineWrapperTags: multilineTag === 'li' ? ['ul', 'ol'] : undefined,
+ preserveWhiteSpace: preserveWhiteSpace
+ });
+ result.formats = prepare(result);
+ return result;
+ }
+ /**
+ * Removes editor only formats from the value.
+ *
+ * Editor only formats are applied using `prepareEditableTree`, so we need to
+ * remove them before converting the internal state
+ *
+ * @param {Object} val The internal rich-text value.
+ *
+ * @return {Object} A new rich-text value.
+ */
+
+
+ function removeEditorOnlyFormats(val) {
+ formatTypes.forEach(function (formatType) {
+ // Remove formats created by prepareEditableTree, because they are editor only.
+ if (formatType.__experimentalCreatePrepareEditableTree) {
+ val = removeFormat(val, formatType.name, 0, val.text.length);
+ }
+ });
+ return val;
+ }
+ /**
+ * Converts the internal value to the external data format.
+ *
+ * @param {Object} val The internal rich-text value.
+ *
+ * @return {*} The external data format, data type depends on props.
+ */
+
+
+ function valueToFormat(val) {
+ if (disableFormats) {
+ return val.text;
+ }
+
+ val = removeEditorOnlyFormats(val);
+
+ if (format !== 'string') {
+ return;
+ }
+
+ return toHTMLString({
+ value: val,
+ multilineTag: multilineTag,
+ preserveWhiteSpace: preserveWhiteSpace
+ });
+ } // Internal values are updated synchronously, unlike props and state.
+
+
+ var _value = Object(external_this_wp_element_["useRef"])(value);
+
+ var record = Object(external_this_wp_element_["useRef"])(Object(external_this_wp_element_["useMemo"])(function () {
+ var initialRecord = formatToValue(value);
+ initialRecord.start = selectionStart;
+ initialRecord.end = selectionEnd;
+ return initialRecord;
+ }, []));
+
+ function createRecord() {
+ var selection = getWin().getSelection();
+ var range = selection.rangeCount > 0 ? selection.getRangeAt(0) : null;
+ return create({
+ element: ref.current,
+ range: range,
+ multilineTag: multilineTag,
+ multilineWrapperTags: multilineTag === 'li' ? ['ul', 'ol'] : undefined,
+ __unstableIsEditableTree: true,
+ preserveWhiteSpace: preserveWhiteSpace
+ });
+ }
+
+ function applyRecord(newRecord) {
+ var _ref2 = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},
+ domOnly = _ref2.domOnly;
+
+ apply({
+ value: newRecord,
+ current: ref.current,
+ multilineTag: multilineTag,
+ multilineWrapperTags: multilineTag === 'li' ? ['ul', 'ol'] : undefined,
+ prepareEditableTree: createPrepareEditableTree(remainingProps, 'format_prepare_functions'),
+ __unstableDomOnly: domOnly,
+ placeholder: placeholder
+ });
+ }
+ /**
+ * Handles a paste event.
+ *
+ * Saves the pasted data as plain text in `pastedPlainText`.
+ *
+ * @param {ClipboardEvent} event The paste event.
+ */
+
+
+ function handlePaste(event) {
+ if (!isSelected) {
+ event.preventDefault();
+ return;
+ }
+
+ var clipboardData = event.clipboardData;
+ var items = clipboardData.items,
+ files = clipboardData.files; // In Edge these properties can be null instead of undefined, so a more
+ // rigorous test is required over using default values.
+
+ items = Object(external_this_lodash_["isNil"])(items) ? [] : items;
+ files = Object(external_this_lodash_["isNil"])(files) ? [] : files;
+ var plainText = '';
+ var html = ''; // IE11 only supports `Text` as an argument for `getData` and will
+ // otherwise throw an invalid argument error, so we try the standard
+ // arguments first, then fallback to `Text` if they fail.
+
+ try {
+ plainText = clipboardData.getData('text/plain');
+ html = clipboardData.getData('text/html');
+ } catch (error1) {
+ try {
+ html = clipboardData.getData('Text');
+ } catch (error2) {
+ // Some browsers like UC Browser paste plain text by default and
+ // don't support clipboardData at all, so allow default
+ // behaviour.
+ return;
+ }
+ }
+
+ event.preventDefault(); // Allows us to ask for this information when we get a report.
+
+ window.console.log('Received HTML:\n\n', html);
+ window.console.log('Received plain text:\n\n', plainText);
+
+ if (disableFormats) {
+ handleChange(insert(record.current, plainText));
+ return;
+ }
+
+ var transformed = formatTypes.reduce(function (accumlator, _ref3) {
+ var __unstablePasteRule = _ref3.__unstablePasteRule;
+
+ // Only allow one transform.
+ if (__unstablePasteRule && accumlator === record.current) {
+ accumlator = __unstablePasteRule(record.current, {
+ html: html,
+ plainText: plainText
+ });
+ }
+
+ return accumlator;
+ }, record.current);
+
+ if (transformed !== record.current) {
+ handleChange(transformed);
+ return;
+ }
+
+ if (onPaste) {
+ files = Array.from(files);
+ Array.from(items).forEach(function (item) {
+ if (!item.getAsFile) {
+ return;
+ }
+
+ var file = item.getAsFile();
+
+ if (!file) {
+ return;
+ }
+
+ var name = file.name,
+ type = file.type,
+ size = file.size;
+
+ if (!Object(external_this_lodash_["find"])(files, {
+ name: name,
+ type: type,
+ size: size
+ })) {
+ files.push(file);
+ }
+ });
+ onPaste({
+ value: removeEditorOnlyFormats(record.current),
+ onChange: handleChange,
+ html: html,
+ plainText: plainText,
+ files: files,
+ activeFormats: activeFormats
+ });
+ }
+ }
+ /**
+ * Handles delete on keydown:
+ * - outdent list items,
+ * - delete content if everything is selected,
+ * - trigger the onDelete prop when selection is uncollapsed and at an edge.
+ *
+ * @param {WPSyntheticEvent} event A synthetic keyboard event.
+ */
+
+
+ function handleDelete(event) {
+ var keyCode = event.keyCode;
+
+ if (keyCode !== external_this_wp_keycodes_["DELETE"] && keyCode !== external_this_wp_keycodes_["BACKSPACE"] && keyCode !== external_this_wp_keycodes_["ESCAPE"]) {
+ return;
+ }
+
+ if (didAutomaticChange) {
+ event.preventDefault();
+ undo();
+ return;
+ }
+
+ if (keyCode === external_this_wp_keycodes_["ESCAPE"]) {
+ return;
+ }
+
+ var currentValue = createRecord();
+ var start = currentValue.start,
+ end = currentValue.end,
+ text = currentValue.text;
+ var isReverse = keyCode === external_this_wp_keycodes_["BACKSPACE"]; // Always handle full content deletion ourselves.
+
+ if (start === 0 && end !== 0 && end === text.length) {
+ handleChange(remove_remove(currentValue));
+ event.preventDefault();
+ return;
+ }
+
+ if (multilineTag) {
+ var newValue; // Check to see if we should remove the first item if empty.
+
+ if (isReverse && currentValue.start === 0 && currentValue.end === 0 && isEmptyLine(currentValue)) {
+ newValue = removeLineSeparator(currentValue, !isReverse);
+ } else {
+ newValue = removeLineSeparator(currentValue, isReverse);
+ }
+
+ if (newValue) {
+ handleChange(newValue);
+ event.preventDefault();
+ return;
+ }
+ } // Only process delete if the key press occurs at an uncollapsed edge.
+
+
+ if (!onDelete || !isCollapsed(currentValue) || activeFormats.length || isReverse && start !== 0 || !isReverse && end !== text.length) {
+ return;
+ }
+
+ onDelete({
+ isReverse: isReverse,
+ value: currentValue
+ });
+ event.preventDefault();
+ }
+ /**
+ * Triggers the `onEnter` prop on keydown.
+ *
+ * @param {WPSyntheticEvent} event A synthetic keyboard event.
+ */
+
+
+ function handleEnter(event) {
+ if (event.keyCode !== external_this_wp_keycodes_["ENTER"]) {
+ return;
+ }
+
+ event.preventDefault();
+
+ if (!onEnter) {
+ return;
+ }
+
+ onEnter({
+ value: removeEditorOnlyFormats(createRecord()),
+ onChange: handleChange,
+ shiftKey: event.shiftKey
+ });
+ }
+ /**
+ * Indents list items on space keydown.
+ *
+ * @param {WPSyntheticEvent} event A synthetic keyboard event.
+ */
+
+
+ function handleSpace(event) {
+ var keyCode = event.keyCode,
+ shiftKey = event.shiftKey,
+ altKey = event.altKey,
+ metaKey = event.metaKey,
+ ctrlKey = event.ctrlKey;
+
+ if ( // Only override when no modifiers are pressed.
+ shiftKey || altKey || metaKey || ctrlKey || keyCode !== external_this_wp_keycodes_["SPACE"] || multilineTag !== 'li') {
+ return;
+ }
+
+ var currentValue = createRecord();
+
+ if (!isCollapsed(currentValue)) {
+ return;
+ }
+
+ var text = currentValue.text,
+ start = currentValue.start;
+ var characterBefore = text[start - 1]; // The caret must be at the start of a line.
+
+ if (characterBefore && characterBefore !== LINE_SEPARATOR) {
+ return;
+ }
+
+ handleChange(indentListItems(currentValue, {
+ type: multilineRootTag
+ }));
+ event.preventDefault();
+ }
+ /**
+ * Handles horizontal keyboard navigation when no modifiers are pressed. The
+ * navigation is handled separately to move correctly around format
+ * boundaries.
+ *
+ * @param {WPSyntheticEvent} event A synthetic keyboard event.
+ */
+
+
+ function handleHorizontalNavigation(event) {
+ var keyCode = event.keyCode,
+ shiftKey = event.shiftKey,
+ altKey = event.altKey,
+ metaKey = event.metaKey,
+ ctrlKey = event.ctrlKey;
+
+ if ( // Only override left and right keys without modifiers pressed.
+ shiftKey || altKey || metaKey || ctrlKey || keyCode !== external_this_wp_keycodes_["LEFT"] && keyCode !== external_this_wp_keycodes_["RIGHT"]) {
+ return;
+ }
+
+ var _record$current = record.current,
+ text = _record$current.text,
+ formats = _record$current.formats,
+ start = _record$current.start,
+ end = _record$current.end,
+ _record$current$activ = _record$current.activeFormats,
+ currentActiveFormats = _record$current$activ === void 0 ? [] : _record$current$activ;
+ var collapsed = isCollapsed(record.current); // To do: ideally, we should look at visual position instead.
+
+ var _getWin$getComputedSt = getWin().getComputedStyle(ref.current),
+ direction = _getWin$getComputedSt.direction;
+
+ var reverseKey = direction === 'rtl' ? external_this_wp_keycodes_["RIGHT"] : external_this_wp_keycodes_["LEFT"];
+ var isReverse = event.keyCode === reverseKey; // If the selection is collapsed and at the very start, do nothing if
+ // navigating backward.
+ // If the selection is collapsed and at the very end, do nothing if
+ // navigating forward.
+
+ if (collapsed && currentActiveFormats.length === 0) {
+ if (start === 0 && isReverse) {
+ return;
+ }
+
+ if (end === text.length && !isReverse) {
+ return;
+ }
+ } // If the selection is not collapsed, let the browser handle collapsing
+ // the selection for now. Later we could expand this logic to set
+ // boundary positions if needed.
+
+
+ if (!collapsed) {
+ return;
+ } // In all other cases, prevent default behaviour.
+
+
+ event.preventDefault();
+ var formatsBefore = formats[start - 1] || EMPTY_ACTIVE_FORMATS;
+ var formatsAfter = formats[start] || EMPTY_ACTIVE_FORMATS;
+ var newActiveFormatsLength = currentActiveFormats.length;
+ var source = formatsAfter;
+
+ if (formatsBefore.length > formatsAfter.length) {
+ source = formatsBefore;
+ } // If the amount of formats before the caret and after the caret is
+ // different, the caret is at a format boundary.
+
+
+ if (formatsBefore.length < formatsAfter.length) {
+ if (!isReverse && currentActiveFormats.length < formatsAfter.length) {
+ newActiveFormatsLength++;
+ }
+
+ if (isReverse && currentActiveFormats.length > formatsBefore.length) {
+ newActiveFormatsLength--;
+ }
+ } else if (formatsBefore.length > formatsAfter.length) {
+ if (!isReverse && currentActiveFormats.length > formatsAfter.length) {
+ newActiveFormatsLength--;
+ }
+
+ if (isReverse && currentActiveFormats.length < formatsBefore.length) {
+ newActiveFormatsLength++;
+ }
+ }
+
+ if (newActiveFormatsLength !== currentActiveFormats.length) {
+ var _newActiveFormats = source.slice(0, newActiveFormatsLength);
+
+ var _newValue = component_objectSpread({}, record.current, {
+ activeFormats: _newActiveFormats
+ });
+
+ record.current = _newValue;
+ applyRecord(_newValue);
+ setActiveFormats(_newActiveFormats);
+ return;
+ }
+
+ var newPos = start + (isReverse ? -1 : 1);
+ var newActiveFormats = isReverse ? formatsBefore : formatsAfter;
+
+ var newValue = component_objectSpread({}, record.current, {
+ start: newPos,
+ end: newPos,
+ activeFormats: newActiveFormats
+ });
+
+ record.current = newValue;
+ applyRecord(newValue);
+ onSelectionChange(newPos, newPos);
+ setActiveFormats(newActiveFormats);
+ }
+
+ function handleKeyDown(event) {
+ if (event.defaultPrevented) {
+ return;
+ }
+
+ handleDelete(event);
+ handleEnter(event);
+ handleSpace(event);
+ handleHorizontalNavigation(event);
+ }
+
+ var lastHistoryValue = Object(external_this_wp_element_["useRef"])(value);
+
+ function createUndoLevel() {
+ // If the content is the same, no level needs to be created.
+ if (lastHistoryValue.current === _value.current) {
+ return;
+ }
+
+ onCreateUndoLevel();
+ lastHistoryValue.current = _value.current;
+ }
+
+ var isComposing = Object(external_this_wp_element_["useRef"])(false);
+ var timeout = Object(external_this_wp_element_["useRef"])();
+ /**
+ * Handle input on the next selection change event.
+ *
+ * @param {WPSyntheticEvent} event Synthetic input event.
+ */
+
+ function handleInput(event) {
+ // Do not trigger a change if characters are being composed. Browsers
+ // will usually emit a final `input` event when the characters are
+ // composed.
+ // As of December 2019, Safari doesn't support nativeEvent.isComposing.
+ if (isComposing.current) {
+ return;
+ }
+
+ var inputType;
+
+ if (event) {
+ inputType = event.inputType;
+ }
+
+ if (!inputType && event && event.nativeEvent) {
+ inputType = event.nativeEvent.inputType;
+ } // The browser formatted something or tried to insert HTML.
+ // Overwrite it. It will be handled later by the format library if
+ // needed.
+
+
+ if (inputType && (inputType.indexOf('format') === 0 || INSERTION_INPUT_TYPES_TO_IGNORE.has(inputType))) {
+ applyRecord(record.current);
+ return;
+ }
+
+ var currentValue = createRecord();
+ var _record$current2 = record.current,
+ start = _record$current2.start,
+ _record$current2$acti = _record$current2.activeFormats,
+ oldActiveFormats = _record$current2$acti === void 0 ? [] : _record$current2$acti; // Update the formats between the last and new caret position.
+
+ var change = updateFormats({
+ value: currentValue,
+ start: start,
+ end: currentValue.start,
+ formats: oldActiveFormats
+ });
+ handleChange(change, {
+ withoutHistory: true
+ }); // Create an undo level when input stops for over a second.
+
+ getWin().clearTimeout(timeout.current);
+ timeout.current = getWin().setTimeout(createUndoLevel, 1000); // Only run input rules when inserting text.
+
+ if (inputType !== 'insertText') {
+ return;
+ }
+
+ if (allowPrefixTransformations && inputRule) {
+ inputRule(change, valueToFormat);
+ }
+
+ var transformed = formatTypes.reduce(function (accumlator, _ref4) {
+ var __unstableInputRule = _ref4.__unstableInputRule;
+
+ if (__unstableInputRule) {
+ accumlator = __unstableInputRule(accumlator);
+ }
+
+ return accumlator;
+ }, change);
+
+ if (transformed !== change) {
+ createUndoLevel();
+ handleChange(component_objectSpread({}, transformed, {
+ activeFormats: oldActiveFormats
+ }));
+ markAutomaticChange();
+ }
+ }
+
+ function handleCompositionStart() {
+ isComposing.current = true; // Do not update the selection when characters are being composed as
+ // this rerenders the component and might distroy internal browser
+ // editing state.
+
+ getDoc().removeEventListener('selectionchange', handleSelectionChange);
+ }
+
+ function handleCompositionEnd() {
+ isComposing.current = false; // Ensure the value is up-to-date for browsers that don't emit a final
+ // input event after composition.
+
+ handleInput({
+ inputType: 'insertText'
+ }); // Tracking selection changes can be resumed.
+
+ getDoc().addEventListener('selectionchange', handleSelectionChange);
+ }
+
+ var didMount = Object(external_this_wp_element_["useRef"])(false);
+ /**
+ * Syncs the selection to local state. A callback for the `selectionchange`
+ * native events, `keyup`, `mouseup` and `touchend` synthetic events, and
+ * animation frames after the `focus` event.
+ *
+ * @param {Event|WPSyntheticEvent|DOMHighResTimeStamp} event
+ */
+
+ function handleSelectionChange(event) {
+ if (!ref.current) {
+ return;
+ }
+
+ if (document.activeElement !== ref.current) {
+ return;
+ }
+
+ if (event.type !== 'selectionchange' && !isSelected) {
+ return;
+ }
+
+ if (disabled) {
+ return;
+ } // In case of a keyboard event, ignore selection changes during
+ // composition.
+
+
+ if (isComposing.current) {
+ return;
+ }
+
+ var _createRecord = createRecord(),
+ start = _createRecord.start,
+ end = _createRecord.end,
+ text = _createRecord.text;
+
+ var oldRecord = record.current; // Fallback mechanism for IE11, which doesn't support the input event.
+ // Any input results in a selection change.
+
+ if (text !== oldRecord.text) {
+ handleInput();
+ return;
+ }
+
+ if (start === oldRecord.start && end === oldRecord.end) {
+ // Sometimes the browser may set the selection on the placeholder
+ // element, in which case the caret is not visible. We need to set
+ // the caret before the placeholder if that's the case.
+ if (oldRecord.text.length === 0 && start === 0) {
+ fixPlaceholderSelection(getWin());
+ }
+
+ return;
+ }
+
+ var newValue = component_objectSpread({}, oldRecord, {
+ start: start,
+ end: end,
+ // Allow `getActiveFormats` to get new `activeFormats`.
+ activeFormats: undefined
+ });
+
+ var newActiveFormats = getActiveFormats(newValue, EMPTY_ACTIVE_FORMATS); // Update the value with the new active formats.
+
+ newValue.activeFormats = newActiveFormats;
+
+ if (!isCaretWithinFormattedText && newActiveFormats.length) {
+ onEnterFormattedText();
+ } else if (isCaretWithinFormattedText && !newActiveFormats.length) {
+ onExitFormattedText();
+ } // It is important that the internal value is updated first,
+ // otherwise the value will be wrong on render!
+
+
+ record.current = newValue;
+ applyRecord(newValue, {
+ domOnly: true
+ });
+ onSelectionChange(start, end);
+ setActiveFormats(newActiveFormats);
+ }
+ /**
+ * Sync the value to global state. The node tree and selection will also be
+ * updated if differences are found.
+ *
+ * @param {Object} newRecord The record to sync and apply.
+ * @param {Object} $2 Named options.
+ * @param {boolean} $2.withoutHistory If true, no undo level will be
+ * created.
+ */
+
+
+ function handleChange(newRecord) {
+ var _ref5 = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},
+ withoutHistory = _ref5.withoutHistory;
+
+ if (disableFormats) {
+ newRecord.formats = Array(newRecord.text.length);
+ newRecord.replacements = Array(newRecord.text.length);
+ }
+
+ applyRecord(newRecord);
+ var start = newRecord.start,
+ end = newRecord.end,
+ _newRecord$activeForm = newRecord.activeFormats,
+ newActiveFormats = _newRecord$activeForm === void 0 ? [] : _newRecord$activeForm;
+ var changeHandlers = Object(external_this_lodash_["pickBy"])(remainingProps, function (v, key) {
+ return key.startsWith('format_on_change_functions_');
+ });
+ Object.values(changeHandlers).forEach(function (changeHandler) {
+ changeHandler(newRecord.formats, newRecord.text);
+ });
+ _value.current = valueToFormat(newRecord);
+ record.current = newRecord; // Selection must be updated first, so it is recorded in history when
+ // the content change happens.
+
+ onSelectionChange(start, end);
+ onChange(_value.current);
+ setActiveFormats(newActiveFormats);
+
+ if (!withoutHistory) {
+ createUndoLevel();
+ }
+ }
+ /**
+ * Select object when they are clicked. The browser will not set any
+ * selection when clicking e.g. an image.
+ *
+ * @param {WPSyntheticEvent} event Synthetic mousedown or touchstart event.
+ */
+
+
+ function handlePointerDown(event) {
+ var target = event.target; // If the child element has no text content, it must be an object.
+
+ if (target === ref.current || target.textContent) {
+ return;
+ }
+
+ var parentNode = target.parentNode;
+ var index = Array.from(parentNode.childNodes).indexOf(target);
+ var range = getDoc().createRange();
+ var selection = getWin().getSelection();
+ range.setStart(target.parentNode, index);
+ range.setEnd(target.parentNode, index + 1);
+ selection.removeAllRanges();
+ selection.addRange(range);
+ }
+
+ var rafId = Object(external_this_wp_element_["useRef"])();
+ /**
+ * Handles a focus event on the contenteditable field, calling the
+ * `unstableOnFocus` prop callback if one is defined. The callback does not
+ * receive any arguments.
+ *
+ * This is marked as a private API and the `unstableOnFocus` prop is not
+ * documented, as the current requirements where it is used are subject to
+ * future refactoring following `isSelected` handling.
+ *
+ * In contrast with `setFocusedElement`, this is only triggered in response
+ * to focus within the contenteditable field, whereas `setFocusedElement`
+ * is triggered on focus within any `RichText` descendent element.
+ *
+ * @see setFocusedElement
+ *
+ * @private
+ */
+
+ function handleFocus() {
+ if (onFocus) {
+ onFocus();
+ }
+
+ if (!isSelected) {
+ // We know for certain that on focus, the old selection is invalid.
+ // It will be recalculated on the next mouseup, keyup, or touchend
+ // event.
+ var index = undefined;
+ record.current = component_objectSpread({}, record.current, {
+ start: index,
+ end: index,
+ activeFormats: EMPTY_ACTIVE_FORMATS
+ });
+ onSelectionChange(index, index);
+ setActiveFormats(EMPTY_ACTIVE_FORMATS);
+ } else {
+ onSelectionChange(record.current.start, record.current.end);
+ setActiveFormats(getActiveFormats(component_objectSpread({}, record.current, {
+ activeFormats: undefined
+ }), EMPTY_ACTIVE_FORMATS));
+ } // Update selection as soon as possible, which is at the next animation
+ // frame. The event listener for selection changes may be added too late
+ // at this point, but this focus event is still too early to calculate
+ // the selection.
+
+
+ rafId.current = getWin().requestAnimationFrame(handleSelectionChange);
+ getDoc().addEventListener('selectionchange', handleSelectionChange);
+
+ if (setFocusedElement) {
+ external_this_wp_deprecated_default()('wp.blockEditor.RichText setFocusedElement prop', {
+ alternative: 'selection state from the block editor store.'
+ });
+ setFocusedElement(instanceId);
+ }
+ }
+
+ function handleBlur() {
+ getDoc().removeEventListener('selectionchange', handleSelectionChange);
+ }
+
+ function applyFromProps() {
+ _value.current = value;
+ record.current = formatToValue(value);
+ record.current.start = selectionStart;
+ record.current.end = selectionEnd;
+ applyRecord(record.current);
+ }
+
+ Object(external_this_wp_element_["useEffect"])(function () {
+ if (didMount.current) {
+ applyFromProps();
+ }
+ }, [TagName, placeholder]);
+ Object(external_this_wp_element_["useEffect"])(function () {
+ if (didMount.current && value !== _value.current) {
+ applyFromProps();
+ }
+ }, [value]);
+ Object(external_this_wp_element_["useEffect"])(function () {
+ if (!didMount.current) {
+ return;
+ }
+
+ if (isSelected && (selectionStart !== record.current.start || selectionEnd !== record.current.end)) {
+ applyFromProps();
+ } else {
+ record.current = component_objectSpread({}, record.current, {
+ start: selectionStart,
+ end: selectionEnd
+ });
+ }
+ }, [selectionStart, selectionEnd, isSelected]);
+ var prefix = 'format_prepare_props_';
+
+ var predicate = function predicate(v, key) {
+ return key.startsWith(prefix);
+ };
+
+ var prepareProps = Object(external_this_lodash_["pickBy"])(remainingProps, predicate);
+ Object(external_this_wp_element_["useEffect"])(function () {
+ if (didMount.current) {
+ applyFromProps();
+ }
+ }, Object.values(prepareProps));
+ Object(external_this_wp_element_["useLayoutEffect"])(function () {
+ applyRecord(record.current, {
+ domOnly: true
+ });
+ didMount.current = true;
+ return function () {
+ getDoc().removeEventListener('selectionchange', handleSelectionChange);
+ getWin().cancelAnimationFrame(rafId.current);
+ getWin().clearTimeout(timeout.current);
+ };
+ }, []);
+
+ function focus() {
+ ref.current.focus();
+ applyRecord(record.current);
+ }
+
+ var ariaProps = Object(external_this_lodash_["pickBy"])(remainingProps, function (v, key) {
+ return Object(external_this_lodash_["startsWith"])(key, 'aria-');
+ });
+
+ var editableProps = component_objectSpread({
+ // Overridable props.
+ role: 'textbox',
+ 'aria-multiline': true,
+ 'aria-label': placeholder
+ }, ariaProps, {
+ ref: ref,
+ style: style ? component_objectSpread({}, style, {
+ whiteSpace: whiteSpace
+ }) : defaultStyle,
+ className: classnames_default()('rich-text', className),
+ onPaste: handlePaste,
+ onInput: handleInput,
+ onCompositionStart: handleCompositionStart,
+ onCompositionEnd: handleCompositionEnd,
+ onKeyDown: handleKeyDown,
+ onFocus: handleFocus,
+ onBlur: handleBlur,
+ onMouseDown: handlePointerDown,
+ onTouchStart: handlePointerDown,
+ // Selection updates must be done at these events as they
+ // happen before the `selectionchange` event. In some cases,
+ // the `selectionchange` event may not even fire, for
+ // example when the window receives focus again on click.
+ onKeyUp: handleSelectionChange,
+ onMouseUp: handleSelectionChange,
+ onTouchEnd: handleSelectionChange,
+ // Do not set the attribute if disabled.
+ contentEditable: disabled ? undefined : true,
+ suppressContentEditableWarning: !disabled
+ });
+
+ useBoundaryStyle({
+ ref: ref,
+ activeFormats: activeFormats
+ });
+ useInlineWarning({
+ ref: ref
+ });
+ return Object(external_this_wp_element_["createElement"])(external_this_wp_element_["Fragment"], null, isSelected && Object(external_this_wp_element_["createElement"])(FormatEdit, {
+ allowedFormats: allowedFormats,
+ withoutInteractiveFormatting: withoutInteractiveFormatting,
+ value: record.current,
+ onChange: handleChange,
+ onFocus: focus,
+ formatTypes: formatTypes
+ }), children && children({
+ isSelected: isSelected,
+ value: record.current,
+ onChange: handleChange,
+ onFocus: focus,
+ editableProps: editableProps,
+ editableTagName: TagName
+ }), !children && Object(external_this_wp_element_["createElement"])(TagName, editableProps));
+}
+
+var RichTextWrapper = withFormatTypes(component_RichText);
+/**
+ * Renders a rich content input, providing users with the option to format the
+ * content.
+ */
+
+/* harmony default export */ var component = (Object(external_this_wp_element_["forwardRef"])(function (props, ref) {
+ return Object(external_this_wp_element_["createElement"])(RichTextWrapper, Object(esm_extends["a" /* default */])({}, props, {
+ forwardedRef: ref
+ }));
+}));
+
+// CONCATENATED MODULE: ./node_modules/@wordpress/rich-text/build-module/index.js
+/**
+ * Internal dependencies
+ */
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -3562,171 +5293,58 @@
/***/ }),
-/***/ 41:
-/***/ (function(module, exports, __webpack_require__) {
-
-module.exports = function memize( fn, options ) {
- var size = 0,
- maxSize, head, tail;
-
- if ( options && options.maxSize ) {
- maxSize = options.maxSize;
- }
-
- function memoized( /* ...args */ ) {
- var node = head,
- len = arguments.length,
- args, i;
-
- searchCache: while ( node ) {
- // Perform a shallow equality test to confirm that whether the node
- // under test is a candidate for the arguments passed. Two arrays
- // are shallowly equal if their length matches and each entry is
- // strictly equal between the two sets. Avoid abstracting to a
- // function which could incur an arguments leaking deoptimization.
-
- // Check whether node arguments match arguments length
- if ( node.args.length !== arguments.length ) {
- node = node.next;
- continue;
- }
-
- // Check whether node arguments match arguments values
- for ( i = 0; i < len; i++ ) {
- if ( node.args[ i ] !== arguments[ i ] ) {
- node = node.next;
- continue searchCache;
- }
- }
-
- // At this point we can assume we've found a match
-
- // Surface matched node to head if not already
- if ( node !== head ) {
- // As tail, shift to previous. Must only shift if not also
- // head, since if both head and tail, there is no previous.
- if ( node === tail ) {
- tail = node.prev;
- }
-
- // Adjust siblings to point to each other. If node was tail,
- // this also handles new tail's empty `next` assignment.
- node.prev.next = node.next;
- if ( node.next ) {
- node.next.prev = node.prev;
- }
-
- node.next = head;
- node.prev = null;
- head.prev = node;
- head = node;
- }
-
- // Return immediately
- return node.val;
- }
-
- // No cached value found. Continue to insertion phase:
-
- // Create a copy of arguments (avoid leaking deoptimization)
- args = new Array( len );
- for ( i = 0; i < len; i++ ) {
- args[ i ] = arguments[ i ];
- }
-
- node = {
- args: args,
-
- // Generate the result from original function
- val: fn.apply( null, 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 ( head ) {
- head.prev = node;
- node.next = head;
- } else {
- // If no head, follows that there's no tail (at initial or reset)
- tail = node;
- }
-
- // Trim tail if we're reached max size and are pending cache insertion
- if ( size === maxSize ) {
- tail = tail.prev;
- tail.next = null;
- } else {
- size++;
- }
-
- head = node;
-
- return node.val;
- }
-
- memoized.clear = function() {
- head = null;
- tail = null;
- size = 0;
- };
-
- if ( false ) {}
-
- return memoized;
-};
-
+/***/ 5:
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return _defineProperty; });
+function _defineProperty(obj, key, value) {
+ if (key in obj) {
+ Object.defineProperty(obj, key, {
+ value: value,
+ enumerable: true,
+ configurable: true,
+ writable: true
+ });
+ } else {
+ obj[key] = value;
+ }
+
+ return obj;
+}
/***/ }),
-/***/ 5:
-/***/ (function(module, exports) {
-
-(function() { module.exports = this["wp"]["data"]; }());
+/***/ 8:
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return _extends; });
+function _extends() {
+ _extends = Object.assign || function (target) {
+ for (var i = 1; i < arguments.length; i++) {
+ var source = arguments[i];
+
+ for (var key in source) {
+ if (Object.prototype.hasOwnProperty.call(source, key)) {
+ target[key] = source[key];
+ }
+ }
+ }
+
+ return target;
+ };
+
+ return _extends.apply(this, arguments);
+}
/***/ }),
-/***/ 6:
-/***/ (function(module, exports) {
-
-(function() { module.exports = this["wp"]["compose"]; }());
-
-/***/ }),
-
-/***/ 69:
+/***/ 89:
/***/ (function(module, exports) {
(function() { module.exports = this["wp"]["escapeHtml"]; }());
-/***/ }),
-
-/***/ 7:
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return _objectSpread; });
-/* harmony import */ var _defineProperty__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(15);
-
-function _objectSpread(target) {
- for (var i = 1; i < arguments.length; i++) {
- var source = arguments[i] != null ? arguments[i] : {};
- var ownKeys = Object.keys(source);
-
- if (typeof Object.getOwnPropertySymbols === 'function') {
- ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function (sym) {
- return Object.getOwnPropertyDescriptor(source, sym).enumerable;
- }));
- }
-
- ownKeys.forEach(function (key) {
- Object(_defineProperty__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])(target, key, source[key]);
- });
- }
-
- return target;
-}
-
/***/ })
/******/ });
\ No newline at end of file