1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
|
<!doctype html>
<meta charset=utf-8>
<title>focus move tests caused by a call of Selection.removeRange()</title>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<body>
<div style="height: 3000px;">Spacer to check whether or not page was scrolled down to focused editor</div>
<p id="staticBefore">static text</p>
<div id="editor" contenteditable><p>content of editor</p></div>
<div id="outerEditor" contenteditable
><p>content of outer editor</p><div id="staticInEditor" contenteditable="false"
><p>static content of outer editor</p><div id="innerEditor" contenteditable
><p>content of inner editor</p></div></div></div>
<p id="staticAfter">static text</p>
<p><a id="anchor" href="about:blank">anchor</a></p>
<script>
"use strict";
var staticBefore = {
element: document.getElementById("staticBefore"),
textNode: document.getElementById("staticBefore").firstChild,
textLength: document.getElementById("staticBefore").firstChild.length
};
var editor = {
element: document.getElementById("editor"),
textNode: document.getElementById("editor").firstChild.firstChild,
textLength: document.getElementById("editor").firstChild.firstChild.length
};
var outerEditor = {
element: document.getElementById("outerEditor"),
textNode: document.getElementById("outerEditor").firstChild.firstChild,
textLength: document.getElementById("outerEditor").firstChild.firstChild.length
};
var staticInEditor = {
element: document.getElementById("staticInEditor"),
textNode: document.getElementById("staticInEditor").firstChild,
textLength: document.getElementById("staticInEditor").firstChild.length
};
var innerEditor = {
element: document.getElementById("innerEditor"),
textNode: document.getElementById("innerEditor").firstChild.firstChild,
textLength: document.getElementById("innerEditor").firstChild.firstChild.length
};
var staticAfter = {
element: document.getElementById("staticAfter"),
textNode: document.getElementById("staticAfter").firstChild,
textLength: document.getElementById("staticAfter").firstChild.length
};
var anchor = {
element: document.getElementById("anchor"),
textNode: document.getElementById("anchor").firstChild,
textLength: document.getElementById("anchor").firstChild.length
};
function resetFocusAndSelectionRange(aFocus)
{
document.getSelection().removeAllRanges();
if (document.activeElement) {
document.activeElement.blur();
}
if (aFocus) {
aFocus.element.focus();
document.getSelection().collapse(aFocus.textNode, 0);
} else {
document.getSelection().collapse(staticBefore.textNode, 0);
}
document.documentElement.scrollTop = 0;
}
test(function() {
resetFocusAndSelectionRange(staticBefore);
document.getSelection().removeRange(document.getSelection().getRangeAt(0));
assert_equals(document.activeElement, document.body);
assert_equals(document.documentElement.scrollTop, 0);
}, "Active element should be the <body> after Selection.removeRange() to remove selected range at the start of the first text node of 'staticBefore' when active element is the <body>");
test(function() {
resetFocusAndSelectionRange(editor);
document.getSelection().removeRange(document.getSelection().getRangeAt(0));
assert_equals(document.activeElement, editor.element);
assert_equals(document.documentElement.scrollTop, 0);
}, "Active element should be 'editor' after Selection.removeRange() to remove selected range at the start of the first text node of 'editor' when active element is 'editor'");
test(function() {
resetFocusAndSelectionRange(outerEditor);
document.getSelection().removeRange(document.getSelection().getRangeAt(0));
assert_equals(document.activeElement, outerEditor.element);
assert_equals(document.documentElement.scrollTop, 0);
}, "Active element should be 'outerEditor' after Selection.removeRange() to remove selected range at the start of the first text node of 'outerEditor' when active element is 'outerEditor'");
test(function() {
resetFocusAndSelectionRange(staticInEditor);
document.getSelection().removeRange(document.getSelection().getRangeAt(0));
assert_equals(document.activeElement, document.body);
assert_equals(document.documentElement.scrollTop, 0);
}, "Active element should be the <body> after Selection.removeRange() to remove selected range at the start of the first text node of 'staticInEditor' when active element is the <body>");
test(function() {
resetFocusAndSelectionRange(innerEditor);
document.getSelection().removeRange(document.getSelection().getRangeAt(0));
assert_equals(document.activeElement, innerEditor.element);
assert_equals(document.documentElement.scrollTop, 0);
}, "Active element should be 'innerEditor' after Selection.removeRange() to remove selected range at the start of the first text node of 'innerEditor' when active element is 'innerEditor'");
test(function() {
resetFocusAndSelectionRange(staticAfter);
document.getSelection().removeRange(document.getSelection().getRangeAt(0));
assert_equals(document.activeElement, document.body);
assert_equals(document.documentElement.scrollTop, 0);
}, "Active element should be the <body> after Selection.removeRange() to remove selected range at the start of the first text node of 'staticAfter' when active element is the <body>");
test(function() {
resetFocusAndSelectionRange(anchor);
document.getSelection().removeRange(document.getSelection().getRangeAt(0));
assert_equals(document.activeElement, anchor.element);
assert_equals(document.documentElement.scrollTop, 0);
}, "Active element should be 'anchor' after Selection.removeRange() to remove selected range at the start of the first text node of 'anchor' when active element is 'anchor'");
</script>
|