mirror of
https://github.com/servo/servo.git
synced 2025-08-03 12:40:06 +01:00
#1716 The indicated part of the document.
Interactive test for fragid resolution. Added HTML tests for scrolling to fragid Applied algorithm from whatwg spec https://html.spec.whatwg.org/multipage/#the-indicated-part-of-the-document Changes following code review
This commit is contained in:
parent
7aedb9c7cd
commit
e39e59ef18
11 changed files with 424 additions and 12 deletions
|
@ -0,0 +1,59 @@
|
|||
<!doctype html>
|
||||
<title>Fragment Navigation: fragment id should be percent-decoded</title>
|
||||
<meta name=timeout content=long>
|
||||
<script src="/resources/testharness.js"></script>
|
||||
<script src="/resources/testharnessreport.js"></script>
|
||||
<body>
|
||||
<div></div>
|
||||
<div id="has two spaces" style="position:absolute; top:200px;"></div>
|
||||
<div id="escape%20collision" style="position:absolute; top:300px;"></div>
|
||||
<div id="escape collision" style="position:absolute; top:400px;"></div>
|
||||
<div id="do%20not%20go%20here" style="position:absolute; top:400px;"></div>
|
||||
<div style="height:200em;"></div>
|
||||
<script>
|
||||
var steps = [{
|
||||
fragid:'has%20two%20spaces',
|
||||
handler: function(){
|
||||
assert_equals( scrollPosition(), 200 );
|
||||
}
|
||||
},{
|
||||
fragid:'escape%20collision',
|
||||
handler: function(){
|
||||
assert_equals( scrollPosition(), 400 );
|
||||
}
|
||||
},{
|
||||
fragid:'do%20not%20go%20here',
|
||||
handler: function(){
|
||||
// don't move
|
||||
assert_equals( scrollPosition(), 400 );
|
||||
}
|
||||
}];
|
||||
|
||||
function scrollPosition(){
|
||||
return document.documentElement.scrollTop || document.body.scrollTop;
|
||||
}
|
||||
|
||||
function runNextStep(){
|
||||
if( steps.length > 0 ) {
|
||||
var step = steps.shift();
|
||||
var listener = t.step_func( function(){
|
||||
step.handler();
|
||||
runNextStep();
|
||||
});
|
||||
scrollToFragmentThenDo( step.fragid, listener );
|
||||
} else {
|
||||
t.done();
|
||||
}
|
||||
}
|
||||
|
||||
function scrollToFragmentThenDo( fragid, then ){
|
||||
location.hash = fragid;
|
||||
setTimeout( then, 1 );
|
||||
}
|
||||
|
||||
var t = async_test();
|
||||
t.step( function(){
|
||||
assert_equals(location.hash, "", "Page must be loaded with no hash");
|
||||
runNextStep();
|
||||
})
|
||||
</script>
|
|
@ -0,0 +1,53 @@
|
|||
<!doctype html>
|
||||
<title>Fragment Navigation: scroll to anchor name is lower priority than equal id</title>
|
||||
<meta name=timeout content=long>
|
||||
<script src="/resources/testharness.js"></script>
|
||||
<script src="/resources/testharnessreport.js"></script>
|
||||
<body>
|
||||
<div></div>
|
||||
<a name="anchor1" style="position:absolute; top:200px;"></a>
|
||||
<div id="id-equals-anchor" style="position:absolute; top:300px;"></div>
|
||||
<a name="id-equals-anchor" style="position:absolute; top:400px;"></a>
|
||||
<div style="height:200em;"></div>
|
||||
<script>
|
||||
var steps = [{
|
||||
fragid:'anchor1',
|
||||
handler: function(){
|
||||
assert_equals( scrollPosition(), 200 );
|
||||
}
|
||||
},{
|
||||
fragid:'id-equals-anchor',
|
||||
handler: function(){
|
||||
// id still takes precedence over anchor name
|
||||
assert_equals( scrollPosition(), 300 );
|
||||
}
|
||||
}];
|
||||
|
||||
function scrollPosition(){
|
||||
return document.documentElement.scrollTop || document.body.scrollTop;
|
||||
}
|
||||
|
||||
function runNextStep(){
|
||||
if( steps.length > 0 ) {
|
||||
var step = steps.shift();
|
||||
var listener = t.step_func( function(){
|
||||
step.handler();
|
||||
runNextStep();
|
||||
});
|
||||
scrollToFragmentThenDo( step.fragid, listener );
|
||||
} else {
|
||||
t.done();
|
||||
}
|
||||
}
|
||||
|
||||
function scrollToFragmentThenDo( fragid, then ){
|
||||
location.hash = fragid;
|
||||
setTimeout( then, 1 );
|
||||
}
|
||||
|
||||
var t = async_test();
|
||||
t.step( function(){
|
||||
assert_equals(location.hash, "", "Page must be loaded with no hash");
|
||||
runNextStep();
|
||||
})
|
||||
</script>
|
|
@ -0,0 +1,51 @@
|
|||
<!doctype html>
|
||||
<title>Fragment Navigation: TOP is a valid element id, which overrides navigating to top of the document</title>
|
||||
<meta name=timeout content=long>
|
||||
<script src="/resources/testharness.js"></script>
|
||||
<script src="/resources/testharnessreport.js"></script>
|
||||
<body>
|
||||
<div></div>
|
||||
<div id="Top" style="position:absolute; top:200px;"></div>
|
||||
<div style="height:200em; position:relative;"></div>
|
||||
<script>
|
||||
var steps = [{
|
||||
fragid:'Top',
|
||||
handler: function(){
|
||||
assert_equals( scrollPosition(), 200 );
|
||||
}
|
||||
},{
|
||||
// scroling to top should work when fragid differs from id by case.
|
||||
fragid:'top',
|
||||
handler: function(){
|
||||
assert_equals( scrollPosition(), 0 );
|
||||
}
|
||||
}];
|
||||
|
||||
function scrollPosition(){
|
||||
return document.documentElement.scrollTop || document.body.scrollTop;
|
||||
}
|
||||
|
||||
function runNextStep(){
|
||||
if( steps.length > 0 ) {
|
||||
var step = steps.shift();
|
||||
var listener = t.step_func( function(){
|
||||
step.handler();
|
||||
runNextStep();
|
||||
});
|
||||
scrollToFragmentThenDo( step.fragid, listener );
|
||||
} else {
|
||||
t.done();
|
||||
}
|
||||
}
|
||||
|
||||
function scrollToFragmentThenDo( fragid, then ){
|
||||
location.hash = fragid;
|
||||
setTimeout( then, 1 );
|
||||
}
|
||||
|
||||
var t = async_test();
|
||||
t.step( function(){
|
||||
assert_equals(location.hash, "", "Page must be loaded with no hash");
|
||||
runNextStep();
|
||||
})
|
||||
</script>
|
|
@ -0,0 +1,60 @@
|
|||
<!doctype html>
|
||||
<title>Fragment Navigation: When fragid is TOP scroll to the top of the document</title>
|
||||
<meta name=timeout content=long>
|
||||
<script src="/resources/testharness.js"></script>
|
||||
<script src="/resources/testharnessreport.js"></script>
|
||||
<body>
|
||||
<div></div>
|
||||
<div id="not-the-top"></div>
|
||||
<div style="height:200em"></div>
|
||||
<script>
|
||||
var steps = [{
|
||||
fragid:'not-the-top',
|
||||
handler: function(){
|
||||
assert_not_equals( scrollPosition(), 0 );
|
||||
}
|
||||
},{
|
||||
fragid:'top',
|
||||
handler: function(){
|
||||
assert_equals( scrollPosition(), 0 );
|
||||
}
|
||||
},{
|
||||
fragid:'not-the-top',
|
||||
handler: function(){
|
||||
assert_not_equals( scrollPosition(), 0 );
|
||||
}
|
||||
},{
|
||||
fragid:'TOP',
|
||||
handler: function(){
|
||||
assert_equals( scrollPosition(), 0 );
|
||||
}
|
||||
}];
|
||||
|
||||
function scrollPosition(){
|
||||
return document.documentElement.scrollTop || document.body.scrollTop;
|
||||
}
|
||||
|
||||
function runNextStep(){
|
||||
if( steps.length > 0 ) {
|
||||
var step = steps.shift();
|
||||
var listener = t.step_func( function(){
|
||||
step.handler();
|
||||
runNextStep();
|
||||
});
|
||||
scrollToFragmentThenDo( step.fragid, listener );
|
||||
} else {
|
||||
t.done();
|
||||
}
|
||||
}
|
||||
|
||||
function scrollToFragmentThenDo( fragid, then ){
|
||||
location.hash = fragid;
|
||||
setTimeout( then, 1 );
|
||||
}
|
||||
|
||||
var t = async_test();
|
||||
t.step( function(){
|
||||
assert_equals(location.hash, "", "Page must be loaded with no hash");
|
||||
runNextStep();
|
||||
})
|
||||
</script>
|
Loading…
Add table
Add a link
Reference in a new issue