target-within-shim.js (1308B)
1 function toggle(element, className, enable) { 2 var cls = element.className.split(' '); 3 var newcls = [] 4 for (var i = 0; i < cls.length; i++) { if (cls[i] != className) { newcls[newcls.length] = cls[i]; } } 5 if (enable) { newcls[newcls.length] = className; } 6 element.className = newcls.join(' '); 7 } 8 9 function reverseAncestorsAndSelf(id) { 10 ancestorsAndSelf = []; 11 if (id) { 12 for (var e = document.getElementById(id); e; e = e.parentElement) { 13 ancestorsAndSelf[ancestorsAndSelf.length] = e; 14 } 15 } 16 return ancestorsAndSelf.reverse(); 17 } 18 19 var current_hash = ''; 20 21 function hashChange() { 22 var oldElements = reverseAncestorsAndSelf(current_hash); 23 current_hash = window.location.hash.substr(1); 24 var newElements = reverseAncestorsAndSelf(current_hash); 25 var i = 0; 26 while (i < oldElements.length && i < newElements.length && oldElements[i] == newElements[i]) { i++; } 27 for (var j = i; j < oldElements.length; j++) { toggle(oldElements[j], 'target-within', false); } 28 for (var j = i; j < newElements.length; j++) { toggle(newElements[j], 'target-within', true); } 29 } 30 31 window.addEventListener('load', hashChange, false); 32 window.addEventListener('DOMContentLoaded', hashChange, false); 33 window.addEventListener('hashchange', hashChange, false);