PluginProbe
Gutenberg / trunk
Gutenberg vtrunk
24.1.0 24.0.0 23.9.1 23.9.0 23.8.0 23.7.2 23.7.1 23.7.0 23.6.1 23.6.2 23.6.0 23.5.3 23.5.2 23.5.1 23.5.0 23.4.0 23.3.2 23.3.1 23.3.0 23.2.0 23.2.1 23.2.2 23.1.1 23.1.0 23.0.1 All 404 releases
← All changes | build/scripts/dom/index.js +52 -30 24.0.0 → trunk View file →
@@ -120,19 +120,13 @@
120 120 }
121 121 const img = element.ownerDocument.querySelector(
122 122 'img[usemap="#' + map.name + '"]'
123 123 );
124 - return !!img && isVisible(img);
124 + return !!img && !img.closest("[inert]") && isVisible(img);
125 125 }
126 126 function find(context, { sequential = false } = {}) {
127 127 const elements = context.querySelectorAll(buildSelector(sequential));
128 128 return Array.from(elements).filter((element) => {
129 - if (!isVisible(element)) {
130 - return false;
131 - }
132 - if (element.closest("[inert]")) {
133 - return false;
134 - }
135 129 const { nodeName } = element;
136 130 if ("AREA" === nodeName) {
137 131 return isValidFocusableArea(
138 132 /** @type {HTMLAreaElement} */
@@ -138,9 +132,12 @@
138 132 /** @type {HTMLAreaElement} */
139 133 element
140 134 );
141 135 }
142 - return true;
136 + if (element.closest("[inert]")) {
137 + return false;
138 + }
139 + return isVisible(element);
143 140 });
144 141 }
145 142
146 143 // packages/dom/build-module/tabbable.mjs
@@ -264,22 +261,57 @@
264 261 furthestRight - furthestLeft,
265 262 furthestBottom - furthestTop
266 263 );
267 264 }
268 - const { startContainer } = range;
265 + const { startContainer, startOffset } = range;
269 266 const { ownerDocument } = startContainer;
270 - if (startContainer.nodeName === "BR") {
271 - const { parentNode } = startContainer;
272 - assertIsDefined(parentNode, "parentNode");
273 - const index = (
274 - /** @type {Node[]} */
275 - Array.from(parentNode.childNodes).indexOf(startContainer)
276 - );
277 - assertIsDefined(ownerDocument, "ownerDocument");
267 + assertIsDefined(ownerDocument, "ownerDocument");
268 + if (startContainer.nodeType !== startContainer.TEXT_NODE && !startContainer.childNodes.length && startContainer.parentNode) {
278 269 range = ownerDocument.createRange();
279 - range.setStart(parentNode, index);
280 - range.setEnd(parentNode, index);
270 + range.setStartBefore(startContainer);
271 + range.collapse(true);
272 + return getRectangleFromRange(range);
281 273 }
274 + if (startContainer.nodeType !== startContainer.TEXT_NODE) {
275 + let before = startContainer.childNodes[startOffset - 1];
276 + while (before?.lastChild) {
277 + before = before.lastChild;
278 + }
279 + let after = startContainer.childNodes[startOffset];
280 + while (after?.firstChild) {
281 + after = after.firstChild;
282 + }
283 + let beforeRange;
284 + if (before && before.nodeType === before.TEXT_NODE) {
285 + beforeRange = ownerDocument.createRange();
286 + beforeRange.setStart(
287 + before,
288 + /** @type {Text} */
289 + before.length
290 + );
291 + beforeRange.collapse(true);
292 + }
293 + let afterRange;
294 + if (after && after.nodeType === after.TEXT_NODE) {
295 + afterRange = ownerDocument.createRange();
296 + afterRange.setStart(after, 0);
297 + afterRange.collapse(true);
298 + }
299 + if (beforeRange && afterRange) {
300 + const beforeRect = beforeRange.getClientRects()[0];
301 + const afterRect = afterRange.getClientRects()[0];
302 + if (beforeRect && afterRect && beforeRect.bottom <= afterRect.top) {
303 + return null;
304 + }
305 + }
306 + if (afterRange) {
307 + range = afterRange;
308 + } else if (beforeRange) {
309 + range = beforeRange;
310 + } else {
311 + return null;
312 + }
313 + }
282 314 const rects = range.getClientRects();
283 315 if (rects.length > 1) {
284 316 return null;
285 317 }
@@ -297,19 +329,9 @@
297 329 if (before.bottom <= after.top) {
298 330 return null;
299 331 }
300 332 }
301 - let rect = rects[0];
302 - if (!rect || rect.height === 0) {
303 - assertIsDefined(ownerDocument, "ownerDocument");
304 - const padNode = ownerDocument.createTextNode("\u200B");
305 - range = range.cloneRange();
306 - range.insertNode(padNode);
307 - rect = range.getClientRects()[0];
308 - assertIsDefined(padNode.parentNode, "padNode.parentNode");
309 - padNode.parentNode.removeChild(padNode);
310 - }
311 - return rect;
333 + return rects[0] ?? null;
312 334 }
313 335
314 336 // packages/dom/build-module/dom/compute-caret-rect.mjs
315 337 function computeCaretRect(win) {