github.com/sercand/please@v13.4.0+incompatible/docs/action.js (about)

     1  document.addEventListener('DOMContentLoaded', function() {
     2      var elems = document.querySelectorAll('a[name]');
     3      var elemMap = {}, menuItems = {};
     4      for (var i = 0; i < elems.length; ++i) {
     5          elemMap[elems[i].name] = elems[i];
     6      }
     7      var menuElems = document.querySelectorAll('.menu .selected a');
     8      var found = false;
     9      for (var i = 0; i < menuElems.length; ++i) {
    10          var href = menuElems[i].href;
    11          var hash = href.indexOf('#');
    12          if (hash != -1) {
    13              var name = href.substr(hash + 1);
    14              if (name in elemMap) {
    15                  menuItems[name] = menuElems[i];
    16                  found = true;
    17              }
    18          }
    19      }
    20  
    21      var angle = function(el) {
    22          var tr = window.getComputedStyle(el, null).getPropertyValue("transform");
    23          if (tr === "none") {
    24              return 0;
    25          }
    26          var values = tr.split('(')[1];
    27          values = values.split(')')[0];
    28          values = values.split(',');
    29          var a = values[0];
    30          var b = values[1];
    31          var c = values[2];
    32          var d = values[3];
    33          return Math.round(Math.atan2(b, a) * (180/Math.PI));
    34      }
    35  
    36      var pics = document.querySelectorAll('.menu-graphic img, .sideimg img');
    37      var rots = new Array(pics.length);
    38      for (var i = 0; i < pics.length; ++i) {
    39          rots[i] = angle(pics[i]);
    40      }
    41  
    42      window.addEventListener('scroll', function(e) {
    43          if (found) {
    44              var maxY = 0;
    45              var winner = "";
    46              for (var key in menuItems) {
    47                  var y = elemMap[key].offsetTop;
    48                  if (y < window.scrollY + window.innerHeight/2 && y > maxY) {
    49                      maxY = y;
    50                      winner = key;
    51                  }
    52                  menuItems[key].className = "";
    53              }
    54              if (winner) {
    55                  menuItems[winner].className = "selected";
    56              }
    57          }
    58          var rot = window.scrollY / 100;
    59          for (var i = 0; i < pics.length; ++i) {
    60              pics[i].style.transform = 'rotate(' + (rot + rots[i]) + 'deg)';
    61          }
    62      });
    63  
    64      var toggleMenu = function() {
    65          var elem = document.querySelector('nav > ul');
    66          if (elem.classList.contains('hide')) {
    67              elem.classList.remove('hide');
    68          } else {
    69              elem.classList.add('hide');
    70          }
    71      };
    72  
    73      document.querySelector('nav > p a').addEventListener('click', function(e) {
    74          toggleMenu();
    75          e.preventDefault();
    76          return false;
    77      });
    78  
    79      if (window.innerWidth < 800) {
    80          toggleMenu();
    81      }
    82  }, false);