diff -r 3d4e9c994f10 -r a86126ab1dd4 wp/wp-includes/js/dist/dom.js --- a/wp/wp-includes/js/dist/dom.js Tue Oct 22 16:11:46 2019 +0200 +++ b/wp/wp-includes/js/dist/dom.js Tue Dec 15 13:49:49 2020 +0100 @@ -82,44 +82,11 @@ /******/ /******/ /******/ // Load entry module and return exports -/******/ return __webpack_require__(__webpack_require__.s = 379); +/******/ return __webpack_require__(__webpack_require__.s = 462); /******/ }) /************************************************************************/ /******/ ({ -/***/ 17: -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; - -// 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; - } -} -// EXTERNAL MODULE: ./node_modules/@babel/runtime/helpers/esm/iterableToArray.js -var iterableToArray = __webpack_require__(34); - -// CONCATENATED MODULE: ./node_modules/@babel/runtime/helpers/esm/nonIterableSpread.js -function _nonIterableSpread() { - throw new TypeError("Invalid attempt to spread non-iterable instance"); -} -// 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(); -} - -/***/ }), - /***/ 2: /***/ (function(module, exports) { @@ -127,36 +94,51 @@ /***/ }), -/***/ 34: +/***/ 462: /***/ (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); -} +// ESM COMPAT FLAG +__webpack_require__.r(__webpack_exports__); -/***/ }), +// EXPORTS +__webpack_require__.d(__webpack_exports__, "focus", function() { return /* binding */ build_module_focus; }); +__webpack_require__.d(__webpack_exports__, "isHorizontalEdge", function() { return /* reexport */ isHorizontalEdge; }); +__webpack_require__.d(__webpack_exports__, "isVerticalEdge", function() { return /* reexport */ isVerticalEdge; }); +__webpack_require__.d(__webpack_exports__, "getRectangleFromRange", function() { return /* reexport */ getRectangleFromRange; }); +__webpack_require__.d(__webpack_exports__, "computeCaretRect", function() { return /* reexport */ computeCaretRect; }); +__webpack_require__.d(__webpack_exports__, "placeCaretAtHorizontalEdge", function() { return /* reexport */ placeCaretAtHorizontalEdge; }); +__webpack_require__.d(__webpack_exports__, "placeCaretAtVerticalEdge", function() { return /* reexport */ placeCaretAtVerticalEdge; }); +__webpack_require__.d(__webpack_exports__, "isTextField", function() { return /* reexport */ isTextField; }); +__webpack_require__.d(__webpack_exports__, "isNumberInput", function() { return /* reexport */ isNumberInput; }); +__webpack_require__.d(__webpack_exports__, "documentHasTextSelection", function() { return /* reexport */ documentHasTextSelection; }); +__webpack_require__.d(__webpack_exports__, "documentHasUncollapsedSelection", function() { return /* reexport */ documentHasUncollapsedSelection; }); +__webpack_require__.d(__webpack_exports__, "documentHasSelection", function() { return /* reexport */ documentHasSelection; }); +__webpack_require__.d(__webpack_exports__, "isEntirelySelected", function() { return /* reexport */ isEntirelySelected; }); +__webpack_require__.d(__webpack_exports__, "getScrollContainer", function() { return /* reexport */ getScrollContainer; }); +__webpack_require__.d(__webpack_exports__, "getOffsetParent", function() { return /* reexport */ getOffsetParent; }); +__webpack_require__.d(__webpack_exports__, "replace", function() { return /* reexport */ replace; }); +__webpack_require__.d(__webpack_exports__, "remove", function() { return /* reexport */ remove; }); +__webpack_require__.d(__webpack_exports__, "insertAfter", function() { return /* reexport */ insertAfter; }); +__webpack_require__.d(__webpack_exports__, "unwrap", function() { return /* reexport */ unwrap; }); +__webpack_require__.d(__webpack_exports__, "replaceTag", function() { return /* reexport */ replaceTag; }); +__webpack_require__.d(__webpack_exports__, "wrap", function() { return /* reexport */ wrap; }); +__webpack_require__.d(__webpack_exports__, "__unstableStripHTML", function() { return /* reexport */ __unstableStripHTML; }); -/***/ 379: -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -__webpack_require__.r(__webpack_exports__); +// NAMESPACE OBJECT: ./node_modules/@wordpress/dom/build-module/focusable.js var focusable_namespaceObject = {}; __webpack_require__.r(focusable_namespaceObject); __webpack_require__.d(focusable_namespaceObject, "find", function() { return find; }); + +// NAMESPACE OBJECT: ./node_modules/@wordpress/dom/build-module/tabbable.js var tabbable_namespaceObject = {}; __webpack_require__.r(tabbable_namespaceObject); __webpack_require__.d(tabbable_namespaceObject, "isTabbableIndex", function() { return isTabbableIndex; }); __webpack_require__.d(tabbable_namespaceObject, "find", function() { return tabbable_find; }); - -// EXTERNAL MODULE: ./node_modules/@babel/runtime/helpers/esm/toConsumableArray.js + 2 modules -var toConsumableArray = __webpack_require__(17); +__webpack_require__.d(tabbable_namespaceObject, "findPrevious", function() { return findPrevious; }); +__webpack_require__.d(tabbable_namespaceObject, "findNext", function() { return findNext; }); // CONCATENATED MODULE: ./node_modules/@wordpress/dom/build-module/focusable.js - - /** * References: * @@ -189,6 +171,19 @@ return element.offsetWidth > 0 || element.offsetHeight > 0 || element.getClientRects().length > 0; } /** + * Returns true if the specified element should be skipped from focusable elements. + * For now it rather specific for `iframes` and if tabindex attribute is set to -1. + * + * @param {Element} element DOM element to test. + * + * @return {boolean} Whether element should be skipped from focusable elements. + */ + + +function skipFocus(element) { + return element.nodeName.toLowerCase() === 'iframe' && element.getAttribute('tabindex') === '-1'; +} +/** * Returns true if the specified area element is a valid focusable element, or * false otherwise. Area is only focusable if within a map where a named map * referenced by an image somewhere in the document. @@ -220,8 +215,8 @@ function find(context) { var elements = context.querySelectorAll(SELECTOR); - return Object(toConsumableArray["a" /* default */])(elements).filter(function (element) { - if (!isVisible(element)) { + return Array.from(elements).filter(function (element) { + if (!isVisible(element) || skipFocus(element)) { return false; } @@ -235,8 +230,8 @@ }); } -// EXTERNAL MODULE: external "lodash" -var external_lodash_ = __webpack_require__(2); +// EXTERNAL MODULE: external {"this":"lodash"} +var external_this_lodash_ = __webpack_require__(2); // CONCATENATED MODULE: ./node_modules/@wordpress/dom/build-module/tabbable.js /** @@ -311,7 +306,7 @@ if (hasChosen) { var hadChosenElement = CHOSEN_RADIO_BY_NAME[name]; - result = Object(external_lodash_["without"])(result, hadChosenElement); + result = Object(external_this_lodash_["without"])(result, hadChosenElement); } CHOSEN_RADIO_BY_NAME[name] = element; @@ -372,9 +367,53 @@ return aTabIndex - bTabIndex; } +/** + * Givin focusable elements, filters out tabbable element. + * + * @param {Array} focusables Focusable elements to filter. + * + * @return {Array} Tabbable elements. + */ + + +function filterTabbable(focusables) { + return focusables.filter(isTabbableIndex).map(mapElementToObjectTabbable).sort(compareObjectTabbables).map(mapObjectTabbableToElement).reduce(createStatefulCollapseRadioGroup(), []); +} function tabbable_find(context) { - return find(context).filter(isTabbableIndex).map(mapElementToObjectTabbable).sort(compareObjectTabbables).map(mapObjectTabbableToElement).reduce(createStatefulCollapseRadioGroup(), []); + return filterTabbable(find(context)); +} +/** + * Given a focusable element, find the preceding tabbable element. + * + * @param {Element} element The focusable element before which to look. Defaults + * to the active element. + */ + +function findPrevious() { + var element = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : document.activeElement; + var focusables = find(document.body); + var index = focusables.indexOf(element); // Remove all focusables after and including `element`. + + focusables.length = index; + return Object(external_this_lodash_["last"])(filterTabbable(focusables)); +} +/** + * Given a focusable element, find the next tabbable element. + * + * @param {Element} element The focusable element after which to look. Defaults + * to the active element. + */ + +function findNext() { + var element = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : document.activeElement; + var focusables = find(document.body); + var index = focusables.indexOf(element); // Remove all focusables before and inside `element`. + + var remaining = focusables.slice(index + 1).filter(function (node) { + return !element.contains(node); + }); + return Object(external_this_lodash_["first"])(filterTabbable(remaining)); } // CONCATENATED MODULE: ./node_modules/@wordpress/dom/build-module/dom.js @@ -387,6 +426,7 @@ */ var _window = window, + DOMParser = _window.DOMParser, getComputedStyle = _window.getComputedStyle; var _window$Node = window.Node, TEXT_NODE = _window$Node.TEXT_NODE, @@ -449,7 +489,7 @@ function isEdge(container, isReverse, onlyVertical) { - if (Object(external_lodash_["includes"])(['INPUT', 'TEXTAREA'], container.tagName)) { + if (Object(external_this_lodash_["includes"])(['INPUT', 'TEXTAREA'], container.tagName)) { if (container.selectionStart !== container.selectionEnd) { return false; } @@ -471,7 +511,8 @@ return false; } - var range = selection.getRangeAt(0).cloneRange(); + var originalRange = selection.getRangeAt(0); + var range = originalRange.cloneRange(); var isForward = isSelectionForward(selection); var isCollapsed = selection.isCollapsed; // Collapse in direction of selection. @@ -500,7 +541,8 @@ var buffer = 3 * parseInt(lineHeight, 10) / 4; var containerRect = container.getBoundingClientRect(); - var verticalEdge = isReverse ? containerRect.top + padding > rangeRect.top - buffer : containerRect.bottom - padding < rangeRect.bottom + buffer; + var originalRangeRect = getRectangleFromRange(originalRange); + var verticalEdge = isReverse ? containerRect.top + padding > originalRangeRect.top - buffer : containerRect.bottom - padding < originalRangeRect.bottom + buffer; if (!verticalEdge) { return false; @@ -527,8 +569,9 @@ } var side = isReverseDir ? 'left' : 'right'; - var testRect = getRectangleFromRange(testRange); - return Math.round(testRect[side]) === Math.round(rangeRect[side]); + var testRect = getRectangleFromRange(testRange); // Allow the position to be 1px off. + + return Math.abs(testRect[side] - rangeRect[side]) <= 1; } /** * Check whether the selection is horizontally at the edge of the container. @@ -602,16 +645,10 @@ /** * Get the rectangle for the selection in a container. * - * @param {Element} container Editable container. - * * @return {?DOMRect} The rectangle. */ -function computeCaretRect(container) { - if (!container.isContentEditable) { - return; - } - +function computeCaretRect() { var selection = window.getSelection(); var range = selection.rangeCount ? selection.getRangeAt(0) : null; @@ -633,7 +670,7 @@ return; } - if (Object(external_lodash_["includes"])(['INPUT', 'TEXTAREA'], container.tagName)) { + if (Object(external_this_lodash_["includes"])(['INPUT', 'TEXTAREA'], container.tagName)) { container.focus(); if (isReverse) { @@ -719,9 +756,14 @@ function hiddenCaretRangeFromPoint(doc, x, y, container) { + var originalZIndex = container.style.zIndex; + var originalPosition = container.style.position; // A z-index only works if the element position is not static. + container.style.zIndex = '10000'; + container.style.position = 'relative'; var range = caretRangeFromPoint(doc, x, y); - container.style.zIndex = null; + container.style.zIndex = originalZIndex; + container.style.position = originalPosition; return range; } /** @@ -769,20 +811,6 @@ placeCaretAtHorizontalEdge(container, isReverse); return; - } // Check if the closest text node is actually further away. - // If so, attempt to get the range again with the y position adjusted to get the right offset. - - - if (range.startContainer.nodeType === TEXT_NODE) { - var parentNode = range.startContainer.parentNode; - var parentRect = parentNode.getBoundingClientRect(); - var side = isReverse ? 'bottom' : 'top'; - var padding = parseInt(getComputedStyle(parentNode).getPropertyValue("padding-".concat(side)), 10) || 0; - var actualY = isReverse ? parentRect.bottom - padding - buffer : parentRect.top + padding + buffer; - - if (y !== actualY) { - range = hiddenCaretRangeFromPoint(document, x, actualY, container); - } } var selection = window.getSelection(); @@ -806,11 +834,64 @@ */ function isTextField(element) { + var nodeName = element.nodeName, + contentEditable = element.contentEditable; + var nonTextInputs = ['button', 'checkbox', 'hidden', 'file', 'radio', 'image', 'range', 'reset', 'submit', 'number']; + return nodeName === 'INPUT' && !nonTextInputs.includes(element.type) || nodeName === 'TEXTAREA' || contentEditable === 'true'; +} +/** + * Check whether the given element is an input field of type number + * and has a valueAsNumber + * + * @param {HTMLElement} element The HTML element. + * + * @return {boolean} True if the element is input and holds a number. + */ + +function isNumberInput(element) { + var nodeName = element.nodeName, + type = element.type, + valueAsNumber = element.valueAsNumber; + return nodeName === 'INPUT' && type === 'number' && !!valueAsNumber; +} +/** + * Check whether the current document has selected text. This applies to ranges + * of text in the document, and not selection inside and