www

Unnamed repository; edit this file 'description' to name the repository.
Log | Files | Refs | Submodules

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);