blob: bc9ee9e6bc550d4e149354e8a989ef7ba29520ca [file] [log] [blame]
Nick Burris3c56e312019-08-22 14:48:481<!doctype html>
2<title>Navigating to a text fragment anchor</title>
Nick Burris97e6b872019-12-11 19:06:383<script src="stash.js"></script>
Nick Burris3c56e312019-08-22 14:48:484<script>
Nick Burris603a2712019-09-06 21:16:475function isInView(element) {
Nick Burrisc1c27e22019-11-04 23:46:416 let rect = element.getBoundingClientRect();
Nick Burrisfb6ccd52019-11-12 03:34:297 return rect.top >= 0 && rect.top <= window.innerHeight
8 && rect.left >= 0 && rect.left <= window.innerWidth;
Nick Burris603a2712019-09-06 21:16:479}
10
Nick Burris3c56e312019-08-22 14:48:4811function checkScroll() {
Nick Burrisc1c27e22019-11-04 23:46:4112 let position = 'unknown';
Nick Burris603a2712019-09-06 21:16:4713 if (window.scrollY == 0)
14 position = 'top';
15 else if (isInView(document.getElementById('element')))
16 position = 'element';
17 else if (isInView(document.getElementById('text')))
18 position = 'text';
Nick Burris186457c2019-11-06 17:55:0119 else if (isInView(document.getElementById('more-text')))
20 position = 'more-text';
21 else if (isInView(document.getElementById('cross-node-context')))
22 position = 'cross-node-context';
23 else if (isInView(document.getElementById('text-directive-parameters')))
24 position = 'text-directive-parameters';
Nick Burrisfb6ccd52019-11-12 03:34:2925 else if (isInView(document.getElementById('shadow-parent')))
26 position = 'shadow-parent';
27 else if (isInView(document.getElementById('hidden')))
28 position = 'hidden';
29 else if (isInView(document.getElementById('horizontal-scroll')) && window.scrollX > 0)
30 position = 'horizontal-scroll';
Nick Burris603a2712019-09-06 21:16:4731
Nick Burris7139b3d2019-12-18 18:58:1232 let target = document.querySelector(":target");
33
34 if (!target && position == 'shadow-parent') {
35 let shadow = document.getElementById("shadow-parent").shadowRoot.firstElementChild;
36 if (shadow.matches(":target")) {
37 target = shadow;
38 position = 'shadow';
39 }
40 }
41
42 let results = {
43 scrollPosition: position,
44 href: window.location.href,
45 target: target ? target.id : 'undefined'
46 };
Nick Burris97e6b872019-12-11 19:06:3847
48 let key = (new URL(document.location)).searchParams.get("key");
49 stashResults(key, results);
Nick Burris3c56e312019-08-22 14:48:4850}
51</script>
52<style>
Nick Burrisfb6ccd52019-11-12 03:34:2953 .scroll-section {
54 /* 1000px margin on top and bottom so only one section can be in view. */
55 margin: 1000px 0px;
Nick Burris3c56e312019-08-22 14:48:4856 }
Nick Burrisfb6ccd52019-11-12 03:34:2957 #hidden {
58 visibility: hidden;
Nick Burris29beb462019-08-27 20:02:0859 }
Nick Burrisfb6ccd52019-11-12 03:34:2960 #horizontal-scroll {
61 margin-left: 2000px;
Nick Burris186457c2019-11-06 17:55:0162 }
Nick Burrisfb6ccd52019-11-12 03:34:2963 #display-none {
64 display: none;
Nick Burris186457c2019-11-06 17:55:0165 }
Nick Burris3c56e312019-08-22 14:48:4866</style>
Nick Burris603a2712019-09-06 21:16:4767<body onload="window.requestAnimationFrame(checkScroll)">
Nick Burrisfb6ccd52019-11-12 03:34:2968 <div id="element" class="scroll-section">Element</div>
69 <p id="text" class="scroll-section">This is a test page !$'()*+./:;=?@_~ &,- &#x30cd;&#x30b3;</p>
70 <p id="more-text" class="scroll-section">More test page text</p>
Nick Burris7139b3d2019-12-18 18:58:1271 <div class="scroll-section">
Nick Burris186457c2019-11-06 17:55:0172 <div>
73 <p>prefix</p>
Nick Burris7139b3d2019-12-18 18:58:1274 <p id="cross-node-context">test page</p>
Nick Burris186457c2019-11-06 17:55:0175 </div>
76 <div><p>suffix</p></div>
77 </div>
Nick Burrisfb6ccd52019-11-12 03:34:2978 <p id="text-directive-parameters" class="scroll-section">this,is,test,page</p>
79 <div id="shadow-parent" class="scroll-section"></div>
80 <script>
81 let shadow = document.getElementById("shadow-parent").attachShadow({mode: 'open'});
Nick Burris7139b3d2019-12-18 18:58:1282 shadow.innerHTML = '<p id="shadow">shadow text</p>';
Nick Burrisfb6ccd52019-11-12 03:34:2983 </script>
84 <p id="hidden" class="scroll-section">hidden text</p>
85 <p id="horizontal-scroll" class="scroll-section">horizontally scrolled text</p>
86 <p id="display-none" class="scroll-section">display none</p>
Nick Burris3c56e312019-08-22 14:48:4887</body>