@wordpress/dom
Version:
DOM utilities module for WordPress.
103 lines (102 loc) • 4.7 kB
JavaScript
;
var __create = Object.create;
var __defProp = Object.defineProperty;
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
var __getOwnPropNames = Object.getOwnPropertyNames;
var __getProtoOf = Object.getPrototypeOf;
var __hasOwnProp = Object.prototype.hasOwnProperty;
var __export = (target, all) => {
for (var name in all)
__defProp(target, name, { get: all[name], enumerable: true });
};
var __copyProps = (to, from, except, desc) => {
if (from && typeof from === "object" || typeof from === "function") {
for (let key of __getOwnPropNames(from))
if (!__hasOwnProp.call(to, key) && key !== except)
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
}
return to;
};
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
// If the importer is in node compatibility mode or this is not an ESM
// file that has been converted to a CommonJS file using a Babel-
// compatible transform (i.e. "__esModule" has not been set), then set
// "default" to the CommonJS "module.exports" for node compatibility.
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
mod
));
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
var is_edge_exports = {};
__export(is_edge_exports, {
default: () => isEdge
});
module.exports = __toCommonJS(is_edge_exports);
var import_is_rtl = __toESM(require("./is-rtl"));
var import_get_range_height = __toESM(require("./get-range-height"));
var import_get_rectangle_from_range = __toESM(require("./get-rectangle-from-range"));
var import_is_selection_forward = __toESM(require("./is-selection-forward"));
var import_hidden_caret_range_from_point = __toESM(require("./hidden-caret-range-from-point"));
var import_assert_is_defined = require("../utils/assert-is-defined");
var import_is_input_or_text_area = __toESM(require("./is-input-or-text-area"));
var import_scroll_if_no_range = require("./scroll-if-no-range");
function isEdge(container, isReverse, onlyVertical = false) {
if ((0, import_is_input_or_text_area.default)(container) && typeof container.selectionStart === "number") {
if (container.selectionStart !== container.selectionEnd) {
return false;
}
if (isReverse) {
return container.selectionStart === 0;
}
return container.value.length === container.selectionStart;
}
if (!container.isContentEditable) {
return true;
}
const { ownerDocument } = container;
const { defaultView } = ownerDocument;
(0, import_assert_is_defined.assertIsDefined)(defaultView, "defaultView");
const selection = defaultView.getSelection();
if (!selection || !selection.rangeCount) {
return false;
}
const range = selection.getRangeAt(0);
const collapsedRange = range.cloneRange();
const isForward = (0, import_is_selection_forward.default)(selection);
const isCollapsed = selection.isCollapsed;
if (!isCollapsed) {
collapsedRange.collapse(!isForward);
}
const collapsedRangeRect = (0, import_get_rectangle_from_range.default)(collapsedRange);
const rangeRect = (0, import_get_rectangle_from_range.default)(range);
if (!collapsedRangeRect || !rangeRect) {
return false;
}
const rangeHeight = (0, import_get_range_height.default)(range);
if (!isCollapsed && rangeHeight && rangeHeight > collapsedRangeRect.height && isForward === isReverse) {
return false;
}
const isReverseDir = (0, import_is_rtl.default)(container) ? !isReverse : isReverse;
const containerRect = container.getBoundingClientRect();
const x = isReverseDir ? containerRect.left + 1 : containerRect.right - 1;
const y = isReverse ? containerRect.top + 1 : containerRect.bottom - 1;
const testRange = (0, import_scroll_if_no_range.scrollIfNoRange)(
container,
isReverse,
() => (0, import_hidden_caret_range_from_point.default)(ownerDocument, x, y, container)
);
if (!testRange) {
return false;
}
const testRect = (0, import_get_rectangle_from_range.default)(testRange);
if (!testRect) {
return false;
}
const verticalSide = isReverse ? "top" : "bottom";
const horizontalSide = isReverseDir ? "left" : "right";
const verticalDiff = testRect[verticalSide] - rangeRect[verticalSide];
const horizontalDiff = testRect[horizontalSide] - collapsedRangeRect[horizontalSide];
const hasVerticalDiff = Math.abs(verticalDiff) <= 1;
const hasHorizontalDiff = Math.abs(horizontalDiff) <= 1;
return onlyVertical ? hasVerticalDiff : hasVerticalDiff && hasHorizontalDiff;
}
//# sourceMappingURL=is-edge.js.map