Home | History | Annotate | Download | only in include
      1 window.initStyleGuide = function(init) {
      2   // Runs the callback on every element matched by the query selector.
      3   function find(querySelector, callback) {
      4     var elements = [].slice.call(document.querySelectorAll(querySelector));
      5     for (var i = 0; i < elements.length; i++) {
      6       callback(elements[i]);
      7     }
      8   }
      9   // Add the tocDiv at the top.
     10   var title = document.getElementsByTagName('h1')[0];
     11   var toc = document.createElement('div');
     12   toc.id = 'tocDiv';
     13   toc.className = 'vertical_toc';
     14   title.parentNode.insertBefore(toc, title.nextSibling);
     15 
     16   // If a paragraph starts with (e.g.) "Note:" or "Tip:" then add
     17   // that "callout class" to its element.
     18   find('p', function(paragraph) {
     19     var match = /^([a-z]+):/i.exec(paragraph.textContent);
     20     if (match) {
     21       paragraph.classList.add(match[1].toLowerCase());
     22     }
     23   });
     24 
     25   // Fill in text for intra-document links, ensuring that links
     26   // remain up-to-date even if sections are moved or renumbered.
     27   // This triggers on any link with "??" as its text and a URL
     28   // starting with "#", and the filled-in text is exactly the same
     29   // as the text of the referenced section heading.
     30   find('a[href^="#"]', function(link) {
     31     var href = link.getAttribute('href');
     32     var heading = document.getElementById(href.substring(1));
     33     // Fill in link text with heading title
     34     if (heading && link.textContent == '??') {
     35       link.textContent = heading.textContent;
     36     }
     37   });
     38 
     39   // Hoedown renders fenced code blocks incompatibly with what
     40   // prettify expects. As a result, prettify doesn't handle them
     41   // properly. Fix it by moving the code directly into the pre.
     42   find('pre > code', function(code) {
     43     var pre = code.parentElement;
     44     pre.className = code.className;
     45     pre.innerHTML = code.innerHTML;
     46   });
     47 
     48   // Run the normal init function.
     49   init();
     50 
     51   // Call the pretty-printer after we've fixed up the code blocks.
     52   var pretty = document.createElement('script');
     53   pretty.src = 'https://cdn.rawgit.com/google/code-prettify/master/loader/' +
     54       'run_prettify.js';
     55   document.body.appendChild(pretty);
     56 }.bind(null, window.initStyleGuide);
     57