blob: 8e7a91caf0cbba1da1847d05804c2157ea34d920 [file] [log] [blame]
The Android Open Source Project88b60792009-03-03 19:28:42 -08001
2function new_node(me, mom, text, link, children_data)
3{
4 var node = new Object();
5 node.children = Array();
6 node.children_data = children_data;
7 node.depth = mom.depth + 1;
8
9 node.li = document.createElement("li");
10 mom.get_children_ul().appendChild(node.li);
11
12 node.label_div = document.createElement("div");
13 node.li.appendChild(node.label_div);
14 node.label_div.style.paddingLeft = 10*node.depth + "px";
15 node.label_div.className = "label";
16
17 if (children_data == null) {
18 // 12 is the width of the triangle and padding extra space
19 node.label_div.style.paddingLeft = ((10*node.depth)+12) + "px";
20 } else {
21 node.label_div.style.paddingLeft = 10*node.depth + "px";
22 node.expand_toggle = document.createElement("a");
23 node.expand_toggle.href = "javascript:void(0)";
24 node.expand_toggle.onclick = function() {
25 if (node.expanded) {
26 $(node.get_children_ul()).slideUp("fast");
27 node.plus_img.src = me.toroot + "assets/images/triangle-closed-small.png";
28 node.expanded = false;
29 } else {
30 expand_node(me, node);
31 }
32 };
33 node.label_div.appendChild(node.expand_toggle);
34
35 node.plus_img = document.createElement("img");
36 node.plus_img.src = me.toroot + "assets/images/triangle-closed-small.png";
37 node.plus_img.className = "plus";
38 node.plus_img.border = "0";
39 node.expand_toggle.appendChild(node.plus_img);
40
41 node.expanded = false;
42 }
43
44 var a = document.createElement("a");
45 node.label_div.appendChild(a);
46 node.label = document.createTextNode(text);
47 a.appendChild(node.label);
48 if (link) {
49 a.href = me.toroot + link;
50 } else {
51 if (children_data != null) {
52 a.className = "nolink";
53 a.href = "javascript:void(0)";
54 a.onclick = node.expand_toggle.onclick;
55 // This next line shouldn't be necessary. I'll buy a beer for the first
56 // person who figures out how to remove this line and have the link
57 // toggle shut on the first try. --joeo@android.com
58 node.expanded = false;
59 }
60 }
61
62
63 node.children_ul = null;
64 node.get_children_ul = function() {
65 if (!node.children_ul) {
66 node.children_ul = document.createElement("ul");
67 node.children_ul.className = "children_ul";
68 node.children_ul.style.display = "none";
69 node.li.appendChild(node.children_ul);
70 }
71 return node.children_ul;
72 };
73
74 return node;
75}
76
77function expand_node(me, node)
78{
79 if (node.children_data && !node.expanded) {
80 if (node.children_visited) {
81 $(node.get_children_ul()).slideDown("fast");
82 } else {
83 get_node(me, node);
84 $(node.get_children_ul()).slideDown("fast");
85 }
86 node.plus_img.src = me.toroot + "assets/images/triangle-opened-small.png";
87 node.expanded = true;
88 }
89}
90
91function get_node(me, mom)
92{
93 mom.children_visited = true;
94 for (var i in mom.children_data) {
95 var node_data = mom.children_data[i];
96 mom.children[i] = new_node(me, mom, node_data[0], node_data[1],
97 node_data[2]);
98 }
99}
100
101function this_page_relative(toroot)
102{
103 var full = document.location.pathname;
104 var file = "";
105 if (toroot.substr(0, 1) == "/") {
106 if (full.substr(0, toroot.length) == toroot) {
107 return full.substr(toroot.length);
108 } else {
109 // the file isn't under toroot. Fail.
110 return null;
111 }
112 } else {
113 if (toroot != "./") {
114 toroot = "./" + toroot;
115 }
116 do {
117 if (toroot.substr(toroot.length-3, 3) == "../" || toroot == "./") {
118 var pos = full.lastIndexOf("/");
119 file = full.substr(pos) + file;
120 full = full.substr(0, pos);
121 toroot = toroot.substr(0, toroot.length-3);
122 }
123 } while (toroot != "" && toroot != "/");
124 return file.substr(1);
125 }
126}
127
128function find_page(url, data)
129{
130 var nodes = data;
131 var result = null;
132 for (var i in nodes) {
133 var d = nodes[i];
134 if (d[1] == url) {
135 return new Array(i);
136 }
137 else if (d[2] != null) {
138 result = find_page(url, d[2]);
139 if (result != null) {
140 return (new Array(i).concat(result));
141 }
142 }
143 }
144 return null;
145}
146
Scott Main5b53cd72009-06-04 11:10:17 -0700147function load_navtree_data(toroot) {
148 var navtreeData = document.createElement("script");
149 navtreeData.setAttribute("type","text/javascript");
150 navtreeData.setAttribute("src", toroot+"navtree_data.js");
151 $("head").append($(navtreeData));
152}
153
154function init_default_navtree(toroot) {
155 load_navtree_data(toroot);
156 init_navtree("nav-tree", toroot, NAVTREE_DATA);
157}
158
The Android Open Source Project88b60792009-03-03 19:28:42 -0800159function init_navtree(navtree_id, toroot, root_nodes)
Scott Main5b53cd72009-06-04 11:10:17 -0700160{
The Android Open Source Project88b60792009-03-03 19:28:42 -0800161 var me = new Object();
162 me.toroot = toroot;
163 me.node = new Object();
164
165 me.node.li = document.getElementById(navtree_id);
166 me.node.children_data = root_nodes;
167 me.node.children = new Array();
168 me.node.children_ul = document.createElement("ul");
169 me.node.get_children_ul = function() { return me.node.children_ul; };
170 //me.node.children_ul.className = "children_ul";
171 me.node.li.appendChild(me.node.children_ul);
172 me.node.depth = 0;
173
174 get_node(me, me.node);
175
176 me.this_page = this_page_relative(toroot);
177 me.breadcrumbs = find_page(me.this_page, root_nodes);
178 if (me.breadcrumbs != null && me.breadcrumbs.length != 0) {
179 var mom = me.node;
180 for (var i in me.breadcrumbs) {
181 var j = me.breadcrumbs[i];
182 mom = mom.children[j];
183 expand_node(me, mom);
184 }
185 mom.label_div.className = mom.label_div.className + " selected";
186 addLoadEvent(function() {
187 scrollIntoView("nav-tree");
188 });
189 }
190}
191