cannam@133
|
1 function initSidebar() {
|
cannam@133
|
2 var filename = document.location.pathname;
|
cannam@133
|
3
|
cannam@133
|
4 if (filename.slice(0, 5) == "/next") {
|
cannam@133
|
5 filename = filename.slice(5);
|
cannam@133
|
6 }
|
cannam@133
|
7
|
cannam@133
|
8 if (filename == "/") {
|
cannam@133
|
9 filename = "/index.html";
|
cannam@133
|
10 } else if (filename.slice(0, 6) == "/news/") {
|
cannam@133
|
11 filename = "/news/";
|
cannam@133
|
12 }
|
cannam@133
|
13
|
cannam@133
|
14 var menu = document.getElementById("menu");
|
cannam@133
|
15 var setMenuLayout = function() {
|
cannam@133
|
16 if (window.innerWidth < 900) {
|
cannam@133
|
17 document.body.className = "narrow";
|
cannam@133
|
18 menu.className = "";
|
cannam@133
|
19 } else {
|
cannam@133
|
20 if (document.body.clientWidth < 1340) {
|
cannam@133
|
21 document.body.className = "normal";
|
cannam@133
|
22 } else {
|
cannam@133
|
23 document.body.className = "wide";
|
cannam@133
|
24 }
|
cannam@133
|
25
|
cannam@133
|
26 var y = (window.pageYOffset !== undefined) ? window.pageYOffset :
|
cannam@133
|
27 (document.documentElement || document.body.parentNode || document.body).scrollTop;
|
cannam@133
|
28
|
cannam@133
|
29 if (y < 444 || window.innerHeight < menu.clientHeight + 100) {
|
cannam@133
|
30 menu.className = "";
|
cannam@133
|
31 } else {
|
cannam@133
|
32 menu.className = "floating";
|
cannam@133
|
33 }
|
cannam@133
|
34 }
|
cannam@133
|
35 };
|
cannam@133
|
36 setMenuLayout();
|
cannam@133
|
37 window.onresize = setMenuLayout;
|
cannam@133
|
38 window.onscroll = setMenuLayout;
|
cannam@133
|
39
|
cannam@133
|
40 var items = menu.getElementsByTagName("li");
|
cannam@133
|
41 var toc = null;
|
cannam@133
|
42 for (var i = 0; i < items.length; i++) {
|
cannam@133
|
43 var link = items[i].getElementsByTagName("a")[0];
|
cannam@133
|
44 var href = link.href;
|
cannam@133
|
45 if (href.lastIndexOf(filename) >= 0) {
|
cannam@133
|
46 var parent = link.parentNode;
|
cannam@133
|
47
|
cannam@133
|
48 while (link.childNodes.length > 0) {
|
cannam@133
|
49 var child = link.childNodes[0];
|
cannam@133
|
50 link.removeChild(child);
|
cannam@133
|
51 parent.appendChild(child);
|
cannam@133
|
52 }
|
cannam@133
|
53 parent.removeChild(link);
|
cannam@133
|
54 items[i].className = "selected";
|
cannam@133
|
55 toc = document.createElement("ul");
|
cannam@133
|
56 toc.id = "toc";
|
cannam@133
|
57 items[i].appendChild(toc);
|
cannam@133
|
58 }
|
cannam@133
|
59 }
|
cannam@133
|
60
|
cannam@133
|
61 document.getElementById("main_content").style.minHeight = menu.clientHeight + 100 + "px";
|
cannam@133
|
62
|
cannam@133
|
63 return toc;
|
cannam@133
|
64 }
|
cannam@133
|
65
|
cannam@133
|
66 function setupSidebar() {
|
cannam@133
|
67 var filename = document.location.pathname;
|
cannam@133
|
68
|
cannam@133
|
69 if (filename.slice(0, 5) == "/next") {
|
cannam@133
|
70 filename = filename.slice(5);
|
cannam@133
|
71 }
|
cannam@133
|
72
|
cannam@133
|
73 var isNews = filename.slice(0, 6) == "/news/";
|
cannam@133
|
74
|
cannam@133
|
75 var toc = initSidebar();
|
cannam@133
|
76 if (toc) {
|
cannam@133
|
77 var content = document.getElementById("main_content").childNodes;
|
cannam@133
|
78 var headings = [];
|
cannam@133
|
79
|
cannam@133
|
80 for (var i = 0; i < content.length; i++) {
|
cannam@133
|
81 if (content[i].tagName == "H2" ||
|
cannam@133
|
82 (!isNews && (content[i].tagName == "H3" || content[i].tagName == "H4"))) {
|
cannam@133
|
83 headings.push(content[i]);
|
cannam@133
|
84 }
|
cannam@133
|
85 }
|
cannam@133
|
86
|
cannam@133
|
87 var levels = [toc];
|
cannam@133
|
88 for (var i in headings) {
|
cannam@133
|
89 var hl = headings[i].tagName.slice(1) - 1;
|
cannam@133
|
90 while (hl > levels.length) {
|
cannam@133
|
91 var parent = levels[levels.length - 1];
|
cannam@133
|
92 var item = parent.childNodes[parent.childNodes.length - 1];
|
cannam@133
|
93 var sublist = document.createElement("ul");
|
cannam@133
|
94 item.appendChild(sublist);
|
cannam@133
|
95 levels.push(sublist);
|
cannam@133
|
96 }
|
cannam@133
|
97 while (hl < levels.length) {
|
cannam@133
|
98 levels.pop();
|
cannam@133
|
99 }
|
cannam@133
|
100
|
cannam@133
|
101 var parent = levels[levels.length - 1];
|
cannam@133
|
102 var item = document.createElement("li");
|
cannam@133
|
103 var p = document.createElement("p");
|
cannam@133
|
104 var link = document.createElement("a");
|
cannam@133
|
105 p.appendChild(document.createTextNode(headings[i].innerText || headings[i].textContent));
|
cannam@133
|
106 var hlinks = headings[i].getElementsByTagName("a");
|
cannam@133
|
107 if (hlinks.length == 1) {
|
cannam@133
|
108 link.href = hlinks[0].href;
|
cannam@133
|
109 } else {
|
cannam@133
|
110 link.href = "#" + headings[i].id;
|
cannam@133
|
111 }
|
cannam@133
|
112 link.appendChild(p);
|
cannam@133
|
113 item.appendChild(link);
|
cannam@133
|
114 parent.appendChild(item);
|
cannam@133
|
115 }
|
cannam@133
|
116 }
|
cannam@133
|
117 }
|
cannam@133
|
118
|
cannam@133
|
119 function setupNewsSidebar(items) {
|
cannam@133
|
120 var toc = initSidebar();
|
cannam@133
|
121 if (toc) {
|
cannam@133
|
122 for (var i in items) {
|
cannam@133
|
123 var item = document.createElement("li");
|
cannam@133
|
124 var p = document.createElement("p");
|
cannam@133
|
125 var link = document.createElement("a");
|
cannam@133
|
126 p.appendChild(document.createTextNode(items[i].title));
|
cannam@133
|
127 link.href = items[i].url;
|
cannam@133
|
128 link.appendChild(p);
|
cannam@133
|
129 item.appendChild(link);
|
cannam@133
|
130 toc.appendChild(item);
|
cannam@133
|
131 }
|
cannam@133
|
132 }
|
cannam@133
|
133 }
|