| Index: LayoutTests/editing/selection/offset-from-point.html
|
| diff --git a/LayoutTests/editing/selection/offset-from-point.html b/LayoutTests/editing/selection/offset-from-point.html
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..2106816b91847603d8e9c49926acf0180ab1d438
|
| --- /dev/null
|
| +++ b/LayoutTests/editing/selection/offset-from-point.html
|
| @@ -0,0 +1,71 @@
|
| +<!DOCTYPE html>
|
| +<style>
|
| +p {
|
| + font:20px/1 Ahem;
|
| + margin:.2em;
|
| +}
|
| +.vlr {
|
| + -webkit-writing-mode:vertical-lr;
|
| +}
|
| +.vrl {
|
| + -webkit-writing-mode:vertical-rl;
|
| +}
|
| +</style>
|
| +<p title="LTR"><span>12 345 6789</span></p>
|
| +<p title="RTL" dir=rtl><span>12 345 6789</span></p>
|
| +<p title="VERTICAL-LR" class=vlr><span>12 345 6789</span></p>
|
| +<p title="VERTICAL-RL" class=vrl><span>12 345 6789</span></p>
|
| +<div id=log></div>
|
| +<script>
|
| +Array.prototype.forEach.call(document.querySelectorAll("p"), function (e) {
|
| + testOffsetFromPoint(e.firstChild, e.title);
|
| + e.style.textRendering = "optimizeLegibility";
|
| + testOffsetFromPoint(e.firstChild, e.title + " (Complex Path)");
|
| +});
|
| +
|
| +function testOffsetFromPoint(element, name) {
|
| + var writingMode = getComputedStyle(element).webkitWritingMode;
|
| + var isVertical = writingMode && writingMode[0] == "v";
|
| + var results = [ name ];
|
| + getOffsetFromPoint(element, isVertical, results);
|
| + if (isVertical) // The last character in vertical is flaky by win/mac/linux
|
| + results.splice(-1, 1);
|
| + for (var result of results) {
|
| + var div = document.createElement("div");
|
| + div.innerText = result;
|
| + log.appendChild(div);
|
| + }
|
| +}
|
| +
|
| +function getOffsetFromPoint(element, isVertical, results) {
|
| + if (isVertical) {
|
| + var x = element.offsetLeft + element.offsetWidth / 2;
|
| + var ymin = element.offsetTop;
|
| + var width = element.offsetHeight;
|
| + } else {
|
| + var y = element.offsetTop + element.offsetHeight / 2;
|
| + var xmin = element.offsetLeft;
|
| + width = element.offsetWidth;
|
| + }
|
| + var lastCharacterOffset = null;
|
| + var lastPosition = null;
|
| + for (var position = -1; position <= width + 1; ++position) {
|
| + if (isVertical)
|
| + y = ymin + position;
|
| + else
|
| + x = xmin + position;
|
| + var result = document.caretRangeFromPoint(x, y);
|
| + var characterOffset = result ? result.startOffset : null;
|
| + if (characterOffset === lastCharacterOffset)
|
| + continue;
|
| + var advance = position - lastPosition;
|
| + results.push(characterOffset + "=" + position + " (" + advance + ")");
|
| + lastCharacterOffset = characterOffset;
|
| + lastPosition = position;
|
| + }
|
| + return results;
|
| +}
|
| +
|
| +if (window.testRunner)
|
| + testRunner.dumpAsText();
|
| +</script>
|
|
|