@wordpress/dom 4.52.0 → 4.54.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +9 -0
- package/build/dom/clean-node-list.cjs +5 -1
- package/build/dom/clean-node-list.cjs.map +3 -3
- package/build/dom/compute-caret-rect.cjs.map +2 -2
- package/build/dom/document-has-selection.cjs.map +2 -2
- package/build/dom/document-has-text-selection.cjs.map +2 -2
- package/build/dom/document-has-uncollapsed-selection.cjs.map +2 -2
- package/build/dom/get-computed-style.cjs.map +2 -2
- package/build/dom/get-offset-parent.cjs.map +2 -2
- package/build/dom/get-rectangle-from-range.cjs +15 -0
- package/build/dom/get-rectangle-from-range.cjs.map +2 -2
- package/build/dom/get-scroll-container.cjs.map +2 -2
- package/build/dom/hidden-caret-range-from-point.cjs.map +2 -2
- package/build/dom/input-field-has-uncollapsed-selection.cjs.map +2 -2
- package/build/dom/insert-after.cjs.map +2 -2
- package/build/dom/is-edge.cjs.map +2 -2
- package/build/dom/is-entirely-selected.cjs.map +2 -2
- package/build/dom/is-form-element.cjs.map +2 -2
- package/build/dom/is-horizontal-edge.cjs.map +2 -2
- package/build/dom/is-number-input.cjs.map +2 -2
- package/build/dom/is-rtl.cjs.map +2 -2
- package/build/dom/is-selection-forward.cjs.map +2 -2
- package/build/dom/is-text-field.cjs.map +2 -2
- package/build/dom/is-vertical-edge.cjs.map +2 -2
- package/build/dom/place-caret-at-edge.cjs.map +2 -2
- package/build/dom/place-caret-at-horizontal-edge.cjs.map +2 -2
- package/build/dom/place-caret-at-vertical-edge.cjs.map +2 -2
- package/build/dom/remove-invalid-html.cjs.map +2 -2
- package/build/dom/remove.cjs.map +2 -2
- package/build/dom/replace-tag.cjs.map +2 -2
- package/build/dom/replace.cjs.map +2 -2
- package/build/dom/safe-html.cjs.map +2 -2
- package/build/dom/strip-html.cjs.map +2 -2
- package/build/dom/unwrap.cjs.map +2 -2
- package/build/dom/wrap.cjs.map +2 -2
- package/build/index.cjs.map +2 -2
- package/build/tabbable.cjs.map +2 -2
- package/build-module/dom/clean-node-list.mjs +5 -1
- package/build-module/dom/clean-node-list.mjs.map +2 -2
- package/build-module/dom/compute-caret-rect.mjs.map +2 -2
- package/build-module/dom/document-has-selection.mjs.map +2 -2
- package/build-module/dom/document-has-text-selection.mjs.map +2 -2
- package/build-module/dom/document-has-uncollapsed-selection.mjs.map +2 -2
- package/build-module/dom/get-computed-style.mjs.map +2 -2
- package/build-module/dom/get-offset-parent.mjs.map +2 -2
- package/build-module/dom/get-rectangle-from-range.mjs +15 -0
- package/build-module/dom/get-rectangle-from-range.mjs.map +2 -2
- package/build-module/dom/get-scroll-container.mjs.map +2 -2
- package/build-module/dom/hidden-caret-range-from-point.mjs.map +2 -2
- package/build-module/dom/input-field-has-uncollapsed-selection.mjs.map +2 -2
- package/build-module/dom/insert-after.mjs.map +2 -2
- package/build-module/dom/is-edge.mjs.map +2 -2
- package/build-module/dom/is-entirely-selected.mjs.map +2 -2
- package/build-module/dom/is-form-element.mjs.map +2 -2
- package/build-module/dom/is-horizontal-edge.mjs.map +2 -2
- package/build-module/dom/is-number-input.mjs.map +2 -2
- package/build-module/dom/is-rtl.mjs.map +2 -2
- package/build-module/dom/is-selection-forward.mjs.map +2 -2
- package/build-module/dom/is-text-field.mjs.map +2 -2
- package/build-module/dom/is-vertical-edge.mjs.map +2 -2
- package/build-module/dom/place-caret-at-edge.mjs.map +2 -2
- package/build-module/dom/place-caret-at-horizontal-edge.mjs.map +2 -2
- package/build-module/dom/place-caret-at-vertical-edge.mjs.map +2 -2
- package/build-module/dom/remove-invalid-html.mjs.map +2 -2
- package/build-module/dom/remove.mjs.map +2 -2
- package/build-module/dom/replace-tag.mjs.map +2 -2
- package/build-module/dom/replace.mjs.map +2 -2
- package/build-module/dom/safe-html.mjs.map +2 -2
- package/build-module/dom/strip-html.mjs.map +2 -2
- package/build-module/dom/unwrap.mjs.map +2 -2
- package/build-module/dom/wrap.mjs.map +2 -2
- package/build-module/index.mjs.map +2 -2
- package/build-module/tabbable.mjs.map +2 -2
- package/build-types/dom/clean-node-list.d.ts.map +1 -1
- package/build-types/dom/compute-caret-rect.d.ts.map +1 -1
- package/build-types/dom/document-has-selection.d.ts.map +1 -1
- package/build-types/dom/document-has-text-selection.d.ts.map +1 -1
- package/build-types/dom/document-has-uncollapsed-selection.d.ts.map +1 -1
- package/build-types/dom/get-computed-style.d.ts.map +1 -1
- package/build-types/dom/get-offset-parent.d.ts.map +1 -1
- package/build-types/dom/get-rectangle-from-range.d.ts.map +1 -1
- package/build-types/dom/get-scroll-container.d.ts.map +1 -1
- package/build-types/dom/hidden-caret-range-from-point.d.ts.map +1 -1
- package/build-types/dom/input-field-has-uncollapsed-selection.d.ts.map +1 -1
- package/build-types/dom/insert-after.d.ts.map +1 -1
- package/build-types/dom/is-edge.d.ts.map +1 -1
- package/build-types/dom/is-entirely-selected.d.ts.map +1 -1
- package/build-types/dom/is-form-element.d.ts.map +1 -1
- package/build-types/dom/is-horizontal-edge.d.ts.map +1 -1
- package/build-types/dom/is-number-input.d.ts.map +1 -1
- package/build-types/dom/is-rtl.d.ts.map +1 -1
- package/build-types/dom/is-selection-forward.d.ts.map +1 -1
- package/build-types/dom/is-text-field.d.ts.map +1 -1
- package/build-types/dom/is-vertical-edge.d.ts.map +1 -1
- package/build-types/dom/place-caret-at-edge.d.ts.map +1 -1
- package/build-types/dom/place-caret-at-horizontal-edge.d.ts.map +1 -1
- package/build-types/dom/place-caret-at-vertical-edge.d.ts.map +1 -1
- package/build-types/dom/remove-invalid-html.d.ts.map +1 -1
- package/build-types/dom/remove.d.ts.map +1 -1
- package/build-types/dom/replace-tag.d.ts.map +1 -1
- package/build-types/dom/replace.d.ts.map +1 -1
- package/build-types/dom/safe-html.d.ts.map +1 -1
- package/build-types/dom/strip-html.d.ts.map +1 -1
- package/build-types/dom/unwrap.d.ts.map +1 -1
- package/build-types/dom/wrap.d.ts.map +1 -1
- package/build-types/index.d.ts +0 -3
- package/build-types/index.d.ts.map +1 -1
- package/build-types/tabbable.d.ts.map +1 -1
- package/package.json +3 -3
- package/src/dom/clean-node-list.js +11 -5
- package/src/dom/compute-caret-rect.js +0 -3
- package/src/dom/document-has-selection.js +0 -3
- package/src/dom/document-has-text-selection.js +0 -3
- package/src/dom/document-has-uncollapsed-selection.js +0 -3
- package/src/dom/get-computed-style.js +0 -3
- package/src/dom/get-offset-parent.js +0 -3
- package/src/dom/get-rectangle-from-range.js +30 -3
- package/src/dom/get-scroll-container.js +0 -3
- package/src/dom/hidden-caret-range-from-point.js +0 -3
- package/src/dom/input-field-has-uncollapsed-selection.js +0 -3
- package/src/dom/insert-after.js +0 -3
- package/src/dom/is-edge.js +0 -3
- package/src/dom/is-entirely-selected.js +0 -3
- package/src/dom/is-form-element.js +0 -3
- package/src/dom/is-horizontal-edge.js +0 -3
- package/src/dom/is-number-input.js +0 -7
- package/src/dom/is-rtl.js +0 -3
- package/src/dom/is-selection-forward.js +0 -3
- package/src/dom/is-text-field.js +0 -3
- package/src/dom/is-vertical-edge.js +0 -3
- package/src/dom/place-caret-at-edge.js +0 -3
- package/src/dom/place-caret-at-horizontal-edge.js +0 -3
- package/src/dom/place-caret-at-vertical-edge.js +0 -3
- package/src/dom/remove-invalid-html.js +0 -3
- package/src/dom/remove.js +0 -3
- package/src/dom/replace-tag.js +0 -3
- package/src/dom/replace.js +0 -3
- package/src/dom/safe-html.js +0 -3
- package/src/dom/strip-html.js +0 -3
- package/src/dom/test/safe-html.js +0 -3
- package/src/dom/test/strip-html.js +0 -3
- package/src/dom/unwrap.js +0 -3
- package/src/dom/wrap.js +0 -3
- package/src/index.js +0 -3
- package/src/tabbable.js +1 -4
- package/src/test/dom.js +18 -4
- package/src/test/focusable.js +0 -3
- package/src/test/tabbable.js +0 -3
- package/src/test/utils.js +0 -3
|
@@ -1,6 +1,3 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Internal dependencies
|
|
3
|
-
*/
|
|
4
1
|
import { assertIsDefined } from '../utils/assert-is-defined';
|
|
5
2
|
|
|
6
3
|
/**
|
|
@@ -91,6 +88,36 @@ export default function getRectangleFromRange( range ) {
|
|
|
91
88
|
return null;
|
|
92
89
|
}
|
|
93
90
|
|
|
91
|
+
// A collapsed range at a soft line wrap is equally ambiguous: the same
|
|
92
|
+
// position ends one line and starts the next. Some browsers (Gecko)
|
|
93
|
+
// return a single rectangle for it, on the upper line, regardless of
|
|
94
|
+
// where the caret is. Detect the boundary by measuring the characters
|
|
95
|
+
// around the position: when they sit on different lines, there is no
|
|
96
|
+
// way to know which line the caret is on, so don't return anything.
|
|
97
|
+
if (
|
|
98
|
+
rects.length === 1 &&
|
|
99
|
+
startContainer.nodeType === startContainer.TEXT_NODE &&
|
|
100
|
+
range.startOffset > 0 &&
|
|
101
|
+
range.startOffset < /** @type {Text} */ ( startContainer ).length
|
|
102
|
+
) {
|
|
103
|
+
assertIsDefined( ownerDocument, 'ownerDocument' );
|
|
104
|
+
const measure = (
|
|
105
|
+
/** @type {number} */ start,
|
|
106
|
+
/** @type {number} */ end
|
|
107
|
+
) => {
|
|
108
|
+
const charRange = ownerDocument.createRange();
|
|
109
|
+
charRange.setStart( startContainer, start );
|
|
110
|
+
charRange.setEnd( startContainer, end );
|
|
111
|
+
return charRange.getBoundingClientRect();
|
|
112
|
+
};
|
|
113
|
+
const before = measure( range.startOffset - 1, range.startOffset );
|
|
114
|
+
const after = measure( range.startOffset, range.startOffset + 1 );
|
|
115
|
+
|
|
116
|
+
if ( before.bottom <= after.top ) {
|
|
117
|
+
return null;
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
|
|
94
121
|
let rect = rects[ 0 ];
|
|
95
122
|
|
|
96
123
|
// If the collapsed range starts (and therefore ends) at an element node,
|
package/src/dom/insert-after.js
CHANGED
package/src/dom/is-edge.js
CHANGED
package/src/dom/is-rtl.js
CHANGED
package/src/dom/is-text-field.js
CHANGED
package/src/dom/remove.js
CHANGED
package/src/dom/replace-tag.js
CHANGED
package/src/dom/replace.js
CHANGED
package/src/dom/safe-html.js
CHANGED
package/src/dom/strip-html.js
CHANGED
package/src/dom/unwrap.js
CHANGED
package/src/dom/wrap.js
CHANGED
package/src/index.js
CHANGED
package/src/tabbable.js
CHANGED
|
@@ -1,6 +1,3 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Internal dependencies
|
|
3
|
-
*/
|
|
4
1
|
import { find as findFocusable } from './focusable';
|
|
5
2
|
|
|
6
3
|
/**
|
|
@@ -127,7 +124,7 @@ function compareObjectTabbables( a, b ) {
|
|
|
127
124
|
}
|
|
128
125
|
|
|
129
126
|
/**
|
|
130
|
-
*
|
|
127
|
+
* Given focusable elements, filters out tabbable element.
|
|
131
128
|
*
|
|
132
129
|
* @param {HTMLElement[]} focusables Focusable elements to filter.
|
|
133
130
|
*
|
package/src/test/dom.js
CHANGED
|
@@ -1,6 +1,3 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Internal dependencies
|
|
3
|
-
*/
|
|
4
1
|
import {
|
|
5
2
|
isHorizontalEdge,
|
|
6
3
|
placeCaretAtHorizontalEdge,
|
|
@@ -8,7 +5,6 @@ import {
|
|
|
8
5
|
removeInvalidHTML,
|
|
9
6
|
isEmpty,
|
|
10
7
|
} from '../dom';
|
|
11
|
-
|
|
12
8
|
import { getPhrasingContentSchema } from '../phrasing-content';
|
|
13
9
|
|
|
14
10
|
describe( 'DOM', () => {
|
|
@@ -286,6 +282,24 @@ describe( 'removeInvalidHTML', () => {
|
|
|
286
282
|
const output = '<p>test</p>';
|
|
287
283
|
expect( removeInvalidHTML( input, schema ) ).toEqual( output );
|
|
288
284
|
} );
|
|
285
|
+
|
|
286
|
+
it( 'should preserve whitespace from inline elements containing only whitespace', () => {
|
|
287
|
+
const input = 'The following space:<em> </em>should not be removed.';
|
|
288
|
+
const output = 'The following space: should not be removed.';
|
|
289
|
+
expect( removeInvalidHTML( input, schema ) ).toBe( output );
|
|
290
|
+
} );
|
|
291
|
+
|
|
292
|
+
it( 'should still remove truly empty inline elements', () => {
|
|
293
|
+
const input = 'no space:<em></em>here';
|
|
294
|
+
const output = 'no space:here';
|
|
295
|
+
expect( removeInvalidHTML( input, schema ) ).toBe( output );
|
|
296
|
+
} );
|
|
297
|
+
|
|
298
|
+
it( 'should still remove empty block-level elements that should have children', () => {
|
|
299
|
+
const input = '<figure> </figure>';
|
|
300
|
+
const output = '';
|
|
301
|
+
expect( removeInvalidHTML( input, schema ) ).toBe( output );
|
|
302
|
+
} );
|
|
289
303
|
} );
|
|
290
304
|
|
|
291
305
|
describe( 'isEmpty', () => {
|
package/src/test/focusable.js
CHANGED
package/src/test/tabbable.js
CHANGED