1window.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