61 lines
2.2 KiB
HTML
61 lines
2.2 KiB
HTML
<!doctype html>
|
|
<title>Same document navigation to text fragment directives</title>
|
|
<meta charset=utf-8>
|
|
<link rel="help" href="https://wicg.github.io/ScrollToTextFragment/">
|
|
<script src="/resources/testharness.js"></script>
|
|
<script src="/resources/testharnessreport.js"></script>
|
|
<script src="resources/util.js"></script>
|
|
<script>
|
|
function reset() {
|
|
location.hash = '';
|
|
window.scrollTo(0, 0);
|
|
}
|
|
|
|
function runTests() {
|
|
// Ensure a simple text directive works correctly when navigated to the
|
|
// same document using `location.hash`.
|
|
promise_test(async t => {
|
|
assert_implements(document.fragmentDirective, 'Text directive not implemented');
|
|
reset();
|
|
|
|
location.hash = ':~:text=line%20of%20text';
|
|
await t.step_wait(() => window.scrollY > 0, "Wait for scroll");
|
|
assert_true(isInViewport(document.getElementById('text')), 'Scrolled to text');
|
|
}, 'Basic text directive navigation');
|
|
|
|
// Test that we correctly fallback to the element id when we have a text
|
|
// directive that doesn't match any text in the page.
|
|
promise_test(async t => {
|
|
assert_implements(document.fragmentDirective, 'Text directive not implemented');
|
|
reset();
|
|
|
|
location.hash = 'elementid:~:text=textDoesntExist';
|
|
await t.step_wait(() => window.scrollY > 0, "Wait for scroll");
|
|
assert_true(isInViewport(document.getElementById('elementid')), 'Scrolled to `elementid`');
|
|
}, 'Basic element id fallback');
|
|
|
|
// Test that we correctly fallback to the element id when we have a text
|
|
// directive that's malformed and won't be parsed.
|
|
promise_test(async t => {
|
|
assert_implements(document.fragmentDirective, 'Text directive not implemented');
|
|
reset();
|
|
|
|
location.hash = 'elementid:~:text=,,,,,';
|
|
await t.step_wait(() => window.scrollY > 0, "Wait for scroll");
|
|
assert_true(isInViewport(document.getElementById('elementid')), 'Scrolled to `elementid`');
|
|
}, 'Malformed text directive element id fallback');
|
|
}
|
|
</script>
|
|
<style>
|
|
div {
|
|
margin: 200vh 0 200vh 0;
|
|
}
|
|
</style>
|
|
<body onload="runTests()">
|
|
<div id="text">
|
|
This is a line of text.
|
|
</div>
|
|
<div id="elementid">
|
|
This div has an id: 'elementid'.
|
|
</div>
|
|
</body>
|