xref: /aosp_15_r20/external/doclava/res/assets/templates/assets/doclava-developer-reference.js (revision feeed43c7c55e85932c547a3cefc559df175227c)
1*feeed43cSAndroid Build Coastguard Worker
2*feeed43cSAndroid Build Coastguard Worker/* API LEVEL TOGGLE */
3*feeed43cSAndroid Build Coastguard Worker<?cs if:reference.apilevels ?>
4*feeed43cSAndroid Build Coastguard WorkeraddLoadEvent(changeApiLevel);
5*feeed43cSAndroid Build Coastguard Worker<?cs /if ?>
6*feeed43cSAndroid Build Coastguard Worker
7*feeed43cSAndroid Build Coastguard Workervar API_LEVEL_ENABLED_COOKIE = "api_level_enabled";
8*feeed43cSAndroid Build Coastguard Workervar API_LEVEL_COOKIE = "api_level";
9*feeed43cSAndroid Build Coastguard Workervar minLevel = 1;
10*feeed43cSAndroid Build Coastguard Worker
11*feeed43cSAndroid Build Coastguard Workerfunction toggleApiLevelSelector(checkbox) {
12*feeed43cSAndroid Build Coastguard Worker  var date = new Date();
13*feeed43cSAndroid Build Coastguard Worker  date.setTime(date.getTime()+(10*365*24*60*60*1000)); // keep this for 10 years
14*feeed43cSAndroid Build Coastguard Worker  var expiration = date.toGMTString();
15*feeed43cSAndroid Build Coastguard Worker  if (checkbox.checked) {
16*feeed43cSAndroid Build Coastguard Worker    $("#apiLevelSelector").removeAttr("disabled");
17*feeed43cSAndroid Build Coastguard Worker    $("#api-level-toggle label").removeClass("disabled");
18*feeed43cSAndroid Build Coastguard Worker    writeCookie(API_LEVEL_ENABLED_COOKIE, 1, null, expiration);
19*feeed43cSAndroid Build Coastguard Worker  } else {
20*feeed43cSAndroid Build Coastguard Worker    $("#apiLevelSelector").attr("disabled","disabled");
21*feeed43cSAndroid Build Coastguard Worker    $("#api-level-toggle label").addClass("disabled");
22*feeed43cSAndroid Build Coastguard Worker    writeCookie(API_LEVEL_ENABLED_COOKIE, 0, null, expiration);
23*feeed43cSAndroid Build Coastguard Worker  }
24*feeed43cSAndroid Build Coastguard Worker  changeApiLevel();
25*feeed43cSAndroid Build Coastguard Worker}
26*feeed43cSAndroid Build Coastguard Worker
27*feeed43cSAndroid Build Coastguard Workerfunction buildApiLevelSelector() {
28*feeed43cSAndroid Build Coastguard Worker  var maxLevel = SINCE_DATA.length;
29*feeed43cSAndroid Build Coastguard Worker  var userApiLevelEnabled = readCookie(API_LEVEL_ENABLED_COOKIE);
30*feeed43cSAndroid Build Coastguard Worker  var userApiLevel = readCookie(API_LEVEL_COOKIE);
31*feeed43cSAndroid Build Coastguard Worker  userApiLevel = userApiLevel == 0 ? maxLevel : userApiLevel; // If there's no cookie (zero), use the max by default
32*feeed43cSAndroid Build Coastguard Worker
33*feeed43cSAndroid Build Coastguard Worker  if (userApiLevelEnabled == 0) {
34*feeed43cSAndroid Build Coastguard Worker    $("#apiLevelSelector").attr("disabled","disabled");
35*feeed43cSAndroid Build Coastguard Worker  } else {
36*feeed43cSAndroid Build Coastguard Worker    $("#apiLevelCheckbox").attr("checked","checked");
37*feeed43cSAndroid Build Coastguard Worker    $("#api-level-toggle label").removeClass("disabled");
38*feeed43cSAndroid Build Coastguard Worker  }
39*feeed43cSAndroid Build Coastguard Worker
40*feeed43cSAndroid Build Coastguard Worker  minLevel = $("body").attr("class");
41*feeed43cSAndroid Build Coastguard Worker  var select = $("#apiLevelSelector").html("").change(changeApiLevel);
42*feeed43cSAndroid Build Coastguard Worker  for (var i = maxLevel-1; i >= 0; i--) {
43*feeed43cSAndroid Build Coastguard Worker    var option = $("<option />").attr("value",""+SINCE_DATA[i]).append(""+SINCE_DATA[i]);
44*feeed43cSAndroid Build Coastguard Worker  //  if (SINCE_DATA[i] < minLevel) option.addClass("absent"); // always false for strings (codenames)
45*feeed43cSAndroid Build Coastguard Worker    select.append(option);
46*feeed43cSAndroid Build Coastguard Worker  }
47*feeed43cSAndroid Build Coastguard Worker
48*feeed43cSAndroid Build Coastguard Worker  // get the DOM element and use setAttribute cuz IE6 fails when using jquery .attr('selected',true)
49*feeed43cSAndroid Build Coastguard Worker  var selectedLevelItem = $("#apiLevelSelector option[value='"+userApiLevel+"']").get(0);
50*feeed43cSAndroid Build Coastguard Worker  selectedLevelItem.setAttribute('selected',true);
51*feeed43cSAndroid Build Coastguard Worker}
52*feeed43cSAndroid Build Coastguard Worker
53*feeed43cSAndroid Build Coastguard Workerfunction changeApiLevel() {
54*feeed43cSAndroid Build Coastguard Worker  var maxLevel = SINCE_DATA.length;
55*feeed43cSAndroid Build Coastguard Worker  var userApiLevelEnabled = readCookie(API_LEVEL_ENABLED_COOKIE);
56*feeed43cSAndroid Build Coastguard Worker  var selectedLevel = maxLevel;
57*feeed43cSAndroid Build Coastguard Worker
58*feeed43cSAndroid Build Coastguard Worker  if (userApiLevelEnabled == 0) {
59*feeed43cSAndroid Build Coastguard Worker    toggleVisisbleApis(selectedLevel, "body");
60*feeed43cSAndroid Build Coastguard Worker  } else {
61*feeed43cSAndroid Build Coastguard Worker    selectedLevel = $("#apiLevelSelector option:selected").val();
62*feeed43cSAndroid Build Coastguard Worker    toggleVisisbleApis(selectedLevel, "body");
63*feeed43cSAndroid Build Coastguard Worker
64*feeed43cSAndroid Build Coastguard Worker    var date = new Date();
65*feeed43cSAndroid Build Coastguard Worker    date.setTime(date.getTime()+(10*365*24*60*60*1000)); // keep this for 10 years
66*feeed43cSAndroid Build Coastguard Worker    var expiration = date.toGMTString();
67*feeed43cSAndroid Build Coastguard Worker    writeCookie(API_LEVEL_COOKIE, selectedLevel, null, expiration);
68*feeed43cSAndroid Build Coastguard Worker  }
69*feeed43cSAndroid Build Coastguard Worker
70*feeed43cSAndroid Build Coastguard Worker  if (selectedLevel < minLevel) {
71*feeed43cSAndroid Build Coastguard Worker    var thing = ($("#jd-header").html().indexOf("package") != -1) ? "package" : "class";
72*feeed43cSAndroid Build Coastguard Worker    $("#naMessage").show().html("<div><p><strong>This " + thing + " is not available with API Level " + selectedLevel + ".</strong></p>"
73*feeed43cSAndroid Build Coastguard Worker                              + "<p>To use this " + thing + ", your application must specify API Level " + minLevel + " or higher in its manifest "
74*feeed43cSAndroid Build Coastguard Worker                              + "and be compiled against a version of the library that supports an equal or higher API Level. To reveal this "
75*feeed43cSAndroid Build Coastguard Worker                              + "document, change the value of the API Level filter above.</p>"
76*feeed43cSAndroid Build Coastguard Worker                              + "<p><a href='" +toRoot+ "guide/appendix/api-levels.html'>What is the API Level?</a></p></div>");
77*feeed43cSAndroid Build Coastguard Worker  } else {
78*feeed43cSAndroid Build Coastguard Worker    $("#naMessage").hide();
79*feeed43cSAndroid Build Coastguard Worker  }
80*feeed43cSAndroid Build Coastguard Worker}
81*feeed43cSAndroid Build Coastguard Worker
82*feeed43cSAndroid Build Coastguard Workerfunction toggleVisisbleApis(selectedLevel, context) {
83*feeed43cSAndroid Build Coastguard Worker  var apis = $(".api",context);
84*feeed43cSAndroid Build Coastguard Worker  apis.each(function(i) {
85*feeed43cSAndroid Build Coastguard Worker    var obj = $(this);
86*feeed43cSAndroid Build Coastguard Worker    var className = obj.attr("class");
87*feeed43cSAndroid Build Coastguard Worker    var apiLevelIndex = className.lastIndexOf("-")+1;
88*feeed43cSAndroid Build Coastguard Worker    var apiLevelEndIndex = className.indexOf(" ", apiLevelIndex);
89*feeed43cSAndroid Build Coastguard Worker    apiLevelEndIndex = apiLevelEndIndex != -1 ? apiLevelEndIndex : className.length;
90*feeed43cSAndroid Build Coastguard Worker    var apiLevel = className.substring(apiLevelIndex, apiLevelEndIndex);
91*feeed43cSAndroid Build Coastguard Worker    if (apiLevel > selectedLevel) obj.addClass("absent").attr("title","Requires API Level "+apiLevel+" or higher");
92*feeed43cSAndroid Build Coastguard Worker    else obj.removeClass("absent").removeAttr("title");
93*feeed43cSAndroid Build Coastguard Worker  });
94*feeed43cSAndroid Build Coastguard Worker}
95*feeed43cSAndroid Build Coastguard Worker
96*feeed43cSAndroid Build Coastguard Worker/* NAVTREE */
97*feeed43cSAndroid Build Coastguard Worker
98*feeed43cSAndroid Build Coastguard Workerfunction new_node(me, mom, text, link, children_data, api_level)
99*feeed43cSAndroid Build Coastguard Worker{
100*feeed43cSAndroid Build Coastguard Worker  var node = new Object();
101*feeed43cSAndroid Build Coastguard Worker  node.children = Array();
102*feeed43cSAndroid Build Coastguard Worker  node.children_data = children_data;
103*feeed43cSAndroid Build Coastguard Worker  node.depth = mom.depth + 1;
104*feeed43cSAndroid Build Coastguard Worker
105*feeed43cSAndroid Build Coastguard Worker  node.li = document.createElement("li");
106*feeed43cSAndroid Build Coastguard Worker  mom.get_children_ul().appendChild(node.li);
107*feeed43cSAndroid Build Coastguard Worker
108*feeed43cSAndroid Build Coastguard Worker  node.label_div = document.createElement("div");
109*feeed43cSAndroid Build Coastguard Worker  node.label_div.className = "label";
110*feeed43cSAndroid Build Coastguard Worker  if (api_level != null) {
111*feeed43cSAndroid Build Coastguard Worker    $(node.label_div).addClass("api");
112*feeed43cSAndroid Build Coastguard Worker    $(node.label_div).addClass("api-level-"+api_level);
113*feeed43cSAndroid Build Coastguard Worker  }
114*feeed43cSAndroid Build Coastguard Worker  node.li.appendChild(node.label_div);
115*feeed43cSAndroid Build Coastguard Worker  node.label_div.style.paddingLeft = 10*node.depth + "px";
116*feeed43cSAndroid Build Coastguard Worker
117*feeed43cSAndroid Build Coastguard Worker  if (children_data == null) {
118*feeed43cSAndroid Build Coastguard Worker    // 12 is the width of the triangle and padding extra space
119*feeed43cSAndroid Build Coastguard Worker    node.label_div.style.paddingLeft = ((10*node.depth)+12) + "px";
120*feeed43cSAndroid Build Coastguard Worker  } else {
121*feeed43cSAndroid Build Coastguard Worker    node.label_div.style.paddingLeft = 10*node.depth + "px";
122*feeed43cSAndroid Build Coastguard Worker    node.expand_toggle = document.createElement("a");
123*feeed43cSAndroid Build Coastguard Worker    node.expand_toggle.href = "javascript:void(0)";
124*feeed43cSAndroid Build Coastguard Worker    node.expand_toggle.onclick = function() {
125*feeed43cSAndroid Build Coastguard Worker          if (node.expanded) {
126*feeed43cSAndroid Build Coastguard Worker            $(node.get_children_ul()).slideUp("fast");
127*feeed43cSAndroid Build Coastguard Worker            node.plus_img.src = me.toroot + "assets/images/triangle-closed-small.png";
128*feeed43cSAndroid Build Coastguard Worker            node.expanded = false;
129*feeed43cSAndroid Build Coastguard Worker          } else {
130*feeed43cSAndroid Build Coastguard Worker            expand_node(me, node);
131*feeed43cSAndroid Build Coastguard Worker          }
132*feeed43cSAndroid Build Coastguard Worker       };
133*feeed43cSAndroid Build Coastguard Worker    node.label_div.appendChild(node.expand_toggle);
134*feeed43cSAndroid Build Coastguard Worker
135*feeed43cSAndroid Build Coastguard Worker    node.plus_img = document.createElement("img");
136*feeed43cSAndroid Build Coastguard Worker    node.plus_img.src = me.toroot + "assets/images/triangle-closed-small.png";
137*feeed43cSAndroid Build Coastguard Worker    node.plus_img.className = "plus";
138*feeed43cSAndroid Build Coastguard Worker    node.plus_img.border = "0";
139*feeed43cSAndroid Build Coastguard Worker    node.expand_toggle.appendChild(node.plus_img);
140*feeed43cSAndroid Build Coastguard Worker
141*feeed43cSAndroid Build Coastguard Worker    node.expanded = false;
142*feeed43cSAndroid Build Coastguard Worker  }
143*feeed43cSAndroid Build Coastguard Worker
144*feeed43cSAndroid Build Coastguard Worker  var a = document.createElement("a");
145*feeed43cSAndroid Build Coastguard Worker  node.label_div.appendChild(a);
146*feeed43cSAndroid Build Coastguard Worker  node.label = document.createTextNode(text);
147*feeed43cSAndroid Build Coastguard Worker  a.appendChild(node.label);
148*feeed43cSAndroid Build Coastguard Worker  if (link) {
149*feeed43cSAndroid Build Coastguard Worker    a.href = me.toroot + link;
150*feeed43cSAndroid Build Coastguard Worker  } else {
151*feeed43cSAndroid Build Coastguard Worker    if (children_data != null) {
152*feeed43cSAndroid Build Coastguard Worker      a.className = "nolink";
153*feeed43cSAndroid Build Coastguard Worker      a.href = "javascript:void(0)";
154*feeed43cSAndroid Build Coastguard Worker      a.onclick = node.expand_toggle.onclick;
155*feeed43cSAndroid Build Coastguard Worker      // This next line shouldn't be necessary.  I'll buy a beer for the first
156*feeed43cSAndroid Build Coastguard Worker      // person who figures out how to remove this line and have the link
157*feeed43cSAndroid Build Coastguard Worker      // toggle shut on the first try. [email protected]
158*feeed43cSAndroid Build Coastguard Worker      node.expanded = false;
159*feeed43cSAndroid Build Coastguard Worker    }
160*feeed43cSAndroid Build Coastguard Worker  }
161*feeed43cSAndroid Build Coastguard Worker
162*feeed43cSAndroid Build Coastguard Worker
163*feeed43cSAndroid Build Coastguard Worker  node.children_ul = null;
164*feeed43cSAndroid Build Coastguard Worker  node.get_children_ul = function() {
165*feeed43cSAndroid Build Coastguard Worker      if (!node.children_ul) {
166*feeed43cSAndroid Build Coastguard Worker        node.children_ul = document.createElement("ul");
167*feeed43cSAndroid Build Coastguard Worker        node.children_ul.className = "children_ul";
168*feeed43cSAndroid Build Coastguard Worker        node.children_ul.style.display = "none";
169*feeed43cSAndroid Build Coastguard Worker        node.li.appendChild(node.children_ul);
170*feeed43cSAndroid Build Coastguard Worker      }
171*feeed43cSAndroid Build Coastguard Worker      return node.children_ul;
172*feeed43cSAndroid Build Coastguard Worker    };
173*feeed43cSAndroid Build Coastguard Worker
174*feeed43cSAndroid Build Coastguard Worker  return node;
175*feeed43cSAndroid Build Coastguard Worker}
176*feeed43cSAndroid Build Coastguard Worker
177*feeed43cSAndroid Build Coastguard Workerfunction expand_node(me, node)
178*feeed43cSAndroid Build Coastguard Worker{
179*feeed43cSAndroid Build Coastguard Worker  if (node.children_data && !node.expanded) {
180*feeed43cSAndroid Build Coastguard Worker    if (node.children_visited) {
181*feeed43cSAndroid Build Coastguard Worker      $(node.get_children_ul()).slideDown("fast");
182*feeed43cSAndroid Build Coastguard Worker    } else {
183*feeed43cSAndroid Build Coastguard Worker      get_node(me, node);
184*feeed43cSAndroid Build Coastguard Worker      if ($(node.label_div).hasClass("absent")) $(node.get_children_ul()).addClass("absent");
185*feeed43cSAndroid Build Coastguard Worker      $(node.get_children_ul()).slideDown("fast");
186*feeed43cSAndroid Build Coastguard Worker    }
187*feeed43cSAndroid Build Coastguard Worker    node.plus_img.src = me.toroot + "assets/images/triangle-opened-small.png";
188*feeed43cSAndroid Build Coastguard Worker    node.expanded = true;
189*feeed43cSAndroid Build Coastguard Worker
190*feeed43cSAndroid Build Coastguard Worker    // perform api level toggling because new nodes are new to the DOM
191*feeed43cSAndroid Build Coastguard Worker    var selectedLevel = $("#apiLevelSelector option:selected").val();
192*feeed43cSAndroid Build Coastguard Worker    toggleVisisbleApis(selectedLevel, "#side-nav");
193*feeed43cSAndroid Build Coastguard Worker  }
194*feeed43cSAndroid Build Coastguard Worker}
195*feeed43cSAndroid Build Coastguard Worker
196*feeed43cSAndroid Build Coastguard Workerfunction get_node(me, mom)
197*feeed43cSAndroid Build Coastguard Worker{
198*feeed43cSAndroid Build Coastguard Worker  mom.children_visited = true;
199*feeed43cSAndroid Build Coastguard Worker  for (var i in mom.children_data) {
200*feeed43cSAndroid Build Coastguard Worker    var node_data = mom.children_data[i];
201*feeed43cSAndroid Build Coastguard Worker    mom.children[i] = new_node(me, mom, node_data[0], node_data[1],
202*feeed43cSAndroid Build Coastguard Worker        node_data[2], node_data[3]);
203*feeed43cSAndroid Build Coastguard Worker  }
204*feeed43cSAndroid Build Coastguard Worker}
205*feeed43cSAndroid Build Coastguard Worker
206*feeed43cSAndroid Build Coastguard Workerfunction this_page_relative(toroot)
207*feeed43cSAndroid Build Coastguard Worker{
208*feeed43cSAndroid Build Coastguard Worker  var full = document.location.pathname;
209*feeed43cSAndroid Build Coastguard Worker  var file = "";
210*feeed43cSAndroid Build Coastguard Worker  if (toroot.substr(0, 1) == "/") {
211*feeed43cSAndroid Build Coastguard Worker    if (full.substr(0, toroot.length) == toroot) {
212*feeed43cSAndroid Build Coastguard Worker      return full.substr(toroot.length);
213*feeed43cSAndroid Build Coastguard Worker    } else {
214*feeed43cSAndroid Build Coastguard Worker      // the file isn't under toroot.  Fail.
215*feeed43cSAndroid Build Coastguard Worker      return null;
216*feeed43cSAndroid Build Coastguard Worker    }
217*feeed43cSAndroid Build Coastguard Worker  } else {
218*feeed43cSAndroid Build Coastguard Worker    if (toroot != "./") {
219*feeed43cSAndroid Build Coastguard Worker      toroot = "./" + toroot;
220*feeed43cSAndroid Build Coastguard Worker    }
221*feeed43cSAndroid Build Coastguard Worker    do {
222*feeed43cSAndroid Build Coastguard Worker      if (toroot.substr(toroot.length-3, 3) == "../" || toroot == "./") {
223*feeed43cSAndroid Build Coastguard Worker        var pos = full.lastIndexOf("/");
224*feeed43cSAndroid Build Coastguard Worker        file = full.substr(pos) + file;
225*feeed43cSAndroid Build Coastguard Worker        full = full.substr(0, pos);
226*feeed43cSAndroid Build Coastguard Worker        toroot = toroot.substr(0, toroot.length-3);
227*feeed43cSAndroid Build Coastguard Worker      }
228*feeed43cSAndroid Build Coastguard Worker    } while (toroot != "" && toroot != "/");
229*feeed43cSAndroid Build Coastguard Worker    return file.substr(1);
230*feeed43cSAndroid Build Coastguard Worker  }
231*feeed43cSAndroid Build Coastguard Worker}
232*feeed43cSAndroid Build Coastguard Worker
233*feeed43cSAndroid Build Coastguard Workerfunction find_page(url, data)
234*feeed43cSAndroid Build Coastguard Worker{
235*feeed43cSAndroid Build Coastguard Worker  var nodes = data;
236*feeed43cSAndroid Build Coastguard Worker  var result = null;
237*feeed43cSAndroid Build Coastguard Worker  for (var i in nodes) {
238*feeed43cSAndroid Build Coastguard Worker    var d = nodes[i];
239*feeed43cSAndroid Build Coastguard Worker    if (d[1] == url) {
240*feeed43cSAndroid Build Coastguard Worker      return new Array(i);
241*feeed43cSAndroid Build Coastguard Worker    }
242*feeed43cSAndroid Build Coastguard Worker    else if (d[2] != null) {
243*feeed43cSAndroid Build Coastguard Worker      result = find_page(url, d[2]);
244*feeed43cSAndroid Build Coastguard Worker      if (result != null) {
245*feeed43cSAndroid Build Coastguard Worker        return (new Array(i).concat(result));
246*feeed43cSAndroid Build Coastguard Worker      }
247*feeed43cSAndroid Build Coastguard Worker    }
248*feeed43cSAndroid Build Coastguard Worker  }
249*feeed43cSAndroid Build Coastguard Worker  return null;
250*feeed43cSAndroid Build Coastguard Worker}
251*feeed43cSAndroid Build Coastguard Worker
252*feeed43cSAndroid Build Coastguard Workerfunction load_navtree_data(toroot) {
253*feeed43cSAndroid Build Coastguard Worker  var navtreeData = document.createElement("script");
254*feeed43cSAndroid Build Coastguard Worker  navtreeData.setAttribute("type","text/javascript");
255*feeed43cSAndroid Build Coastguard Worker  navtreeData.setAttribute("src", toroot+"navtree_data.js");
256*feeed43cSAndroid Build Coastguard Worker  $("head").append($(navtreeData));
257*feeed43cSAndroid Build Coastguard Worker}
258*feeed43cSAndroid Build Coastguard Worker
259*feeed43cSAndroid Build Coastguard Workerfunction init_default_navtree(toroot) {
260*feeed43cSAndroid Build Coastguard Worker  init_navtree("nav-tree", toroot, NAVTREE_DATA);
261*feeed43cSAndroid Build Coastguard Worker
262*feeed43cSAndroid Build Coastguard Worker  // perform api level toggling because because the whole tree is new to the DOM
263*feeed43cSAndroid Build Coastguard Worker  var selectedLevel = $("#apiLevelSelector option:selected").val();
264*feeed43cSAndroid Build Coastguard Worker  toggleVisisbleApis(selectedLevel, "#side-nav");
265*feeed43cSAndroid Build Coastguard Worker}
266*feeed43cSAndroid Build Coastguard Worker
267*feeed43cSAndroid Build Coastguard Workerfunction init_navtree(navtree_id, toroot, root_nodes)
268*feeed43cSAndroid Build Coastguard Worker{
269*feeed43cSAndroid Build Coastguard Worker  var me = new Object();
270*feeed43cSAndroid Build Coastguard Worker  me.toroot = toroot;
271*feeed43cSAndroid Build Coastguard Worker  me.node = new Object();
272*feeed43cSAndroid Build Coastguard Worker
273*feeed43cSAndroid Build Coastguard Worker  me.node.li = document.getElementById(navtree_id);
274*feeed43cSAndroid Build Coastguard Worker  me.node.children_data = root_nodes;
275*feeed43cSAndroid Build Coastguard Worker  me.node.children = new Array();
276*feeed43cSAndroid Build Coastguard Worker  me.node.children_ul = document.createElement("ul");
277*feeed43cSAndroid Build Coastguard Worker  me.node.get_children_ul = function() { return me.node.children_ul; };
278*feeed43cSAndroid Build Coastguard Worker  //me.node.children_ul.className = "children_ul";
279*feeed43cSAndroid Build Coastguard Worker  me.node.li.appendChild(me.node.children_ul);
280*feeed43cSAndroid Build Coastguard Worker  me.node.depth = 0;
281*feeed43cSAndroid Build Coastguard Worker
282*feeed43cSAndroid Build Coastguard Worker  get_node(me, me.node);
283*feeed43cSAndroid Build Coastguard Worker
284*feeed43cSAndroid Build Coastguard Worker  me.this_page = this_page_relative(toroot);
285*feeed43cSAndroid Build Coastguard Worker  me.breadcrumbs = find_page(me.this_page, root_nodes);
286*feeed43cSAndroid Build Coastguard Worker  if (me.breadcrumbs != null && me.breadcrumbs.length != 0) {
287*feeed43cSAndroid Build Coastguard Worker    var mom = me.node;
288*feeed43cSAndroid Build Coastguard Worker    for (var i in me.breadcrumbs) {
289*feeed43cSAndroid Build Coastguard Worker      var j = me.breadcrumbs[i];
290*feeed43cSAndroid Build Coastguard Worker      mom = mom.children[j];
291*feeed43cSAndroid Build Coastguard Worker      expand_node(me, mom);
292*feeed43cSAndroid Build Coastguard Worker    }
293*feeed43cSAndroid Build Coastguard Worker    mom.label_div.className = mom.label_div.className + " selected";
294*feeed43cSAndroid Build Coastguard Worker    addLoadEvent(function() {
295*feeed43cSAndroid Build Coastguard Worker      scrollIntoView("nav-tree");
296*feeed43cSAndroid Build Coastguard Worker      });
297*feeed43cSAndroid Build Coastguard Worker  }
298*feeed43cSAndroid Build Coastguard Worker}
299*feeed43cSAndroid Build Coastguard Worker
300*feeed43cSAndroid Build Coastguard Worker/* TOGGLE INHERITED MEMBERS */
301*feeed43cSAndroid Build Coastguard Worker
302*feeed43cSAndroid Build Coastguard Worker/* Toggle an inherited class (arrow toggle)
303*feeed43cSAndroid Build Coastguard Worker * @param linkObj  The link that was clicked.
304*feeed43cSAndroid Build Coastguard Worker * @param expand  'true' to ensure it's expanded. 'false' to ensure it's closed.
305*feeed43cSAndroid Build Coastguard Worker *                'null' to simply toggle.
306*feeed43cSAndroid Build Coastguard Worker */
307*feeed43cSAndroid Build Coastguard Workerfunction toggleInherited(linkObj, expand) {
308*feeed43cSAndroid Build Coastguard Worker    var base = linkObj.getAttribute("id");
309*feeed43cSAndroid Build Coastguard Worker    var list = document.getElementById(base + "-list");
310*feeed43cSAndroid Build Coastguard Worker    var summary = document.getElementById(base + "-summary");
311*feeed43cSAndroid Build Coastguard Worker    var trigger = document.getElementById(base + "-trigger");
312*feeed43cSAndroid Build Coastguard Worker    var a = $(linkObj);
313*feeed43cSAndroid Build Coastguard Worker    if ( (expand == null && a.hasClass("closed")) || expand ) {
314*feeed43cSAndroid Build Coastguard Worker        list.style.display = "none";
315*feeed43cSAndroid Build Coastguard Worker        summary.style.display = "block";
316*feeed43cSAndroid Build Coastguard Worker        trigger.src = toRoot + "assets/images/triangle-opened.png";
317*feeed43cSAndroid Build Coastguard Worker        a.removeClass("closed");
318*feeed43cSAndroid Build Coastguard Worker        a.addClass("opened");
319*feeed43cSAndroid Build Coastguard Worker    } else if ( (expand == null && a.hasClass("opened")) || (expand == false) ) {
320*feeed43cSAndroid Build Coastguard Worker        list.style.display = "block";
321*feeed43cSAndroid Build Coastguard Worker        summary.style.display = "none";
322*feeed43cSAndroid Build Coastguard Worker        trigger.src = toRoot + "assets/images/triangle-closed.png";
323*feeed43cSAndroid Build Coastguard Worker        a.removeClass("opened");
324*feeed43cSAndroid Build Coastguard Worker        a.addClass("closed");
325*feeed43cSAndroid Build Coastguard Worker    }
326*feeed43cSAndroid Build Coastguard Worker    return false;
327*feeed43cSAndroid Build Coastguard Worker}
328*feeed43cSAndroid Build Coastguard Worker
329*feeed43cSAndroid Build Coastguard Worker/* Toggle all inherited classes in a single table (e.g. all inherited methods)
330*feeed43cSAndroid Build Coastguard Worker * @param linkObj  The link that was clicked.
331*feeed43cSAndroid Build Coastguard Worker * @param expand  'true' to ensure it's expanded. 'false' to ensure it's closed.
332*feeed43cSAndroid Build Coastguard Worker *                'null' to simply toggle.
333*feeed43cSAndroid Build Coastguard Worker */
334*feeed43cSAndroid Build Coastguard Workerfunction toggleAllInherited(linkObj, expand) {
335*feeed43cSAndroid Build Coastguard Worker  var a = $(linkObj);
336*feeed43cSAndroid Build Coastguard Worker  var table = $(a.parent().parent().parent()); // ugly way to get table/tbody
337*feeed43cSAndroid Build Coastguard Worker  var expandos = $(".jd-expando-trigger", table);
338*feeed43cSAndroid Build Coastguard Worker  if ( (expand == null && a.text() == "[Expand]") || expand ) {
339*feeed43cSAndroid Build Coastguard Worker    expandos.each(function(i) {
340*feeed43cSAndroid Build Coastguard Worker      toggleInherited(this, true);
341*feeed43cSAndroid Build Coastguard Worker    });
342*feeed43cSAndroid Build Coastguard Worker    a.text("[Collapse]");
343*feeed43cSAndroid Build Coastguard Worker  } else if ( (expand == null && a.text() == "[Collapse]") || (expand == false) ) {
344*feeed43cSAndroid Build Coastguard Worker    expandos.each(function(i) {
345*feeed43cSAndroid Build Coastguard Worker      toggleInherited(this, false);
346*feeed43cSAndroid Build Coastguard Worker    });
347*feeed43cSAndroid Build Coastguard Worker    a.text("[Expand]");
348*feeed43cSAndroid Build Coastguard Worker  }
349*feeed43cSAndroid Build Coastguard Worker  return false;
350*feeed43cSAndroid Build Coastguard Worker}
351*feeed43cSAndroid Build Coastguard Worker
352*feeed43cSAndroid Build Coastguard Worker/* Toggle all inherited members in the class (link in the class title)
353*feeed43cSAndroid Build Coastguard Worker */
354*feeed43cSAndroid Build Coastguard Workerfunction toggleAllClassInherited() {
355*feeed43cSAndroid Build Coastguard Worker  var a = $("#toggleAllClassInherited"); // get toggle link from class title
356*feeed43cSAndroid Build Coastguard Worker  var toggles = $(".toggle-all", $("#doc-content"));
357*feeed43cSAndroid Build Coastguard Worker  if (a.text() == "[Expand All]") {
358*feeed43cSAndroid Build Coastguard Worker    toggles.each(function(i) {
359*feeed43cSAndroid Build Coastguard Worker      toggleAllInherited(this, true);
360*feeed43cSAndroid Build Coastguard Worker    });
361*feeed43cSAndroid Build Coastguard Worker    a.text("[Collapse All]");
362*feeed43cSAndroid Build Coastguard Worker  } else {
363*feeed43cSAndroid Build Coastguard Worker    toggles.each(function(i) {
364*feeed43cSAndroid Build Coastguard Worker      toggleAllInherited(this, false);
365*feeed43cSAndroid Build Coastguard Worker    });
366*feeed43cSAndroid Build Coastguard Worker    a.text("[Expand All]");
367*feeed43cSAndroid Build Coastguard Worker  }
368*feeed43cSAndroid Build Coastguard Worker  return false;
369*feeed43cSAndroid Build Coastguard Worker}
370*feeed43cSAndroid Build Coastguard Worker
371*feeed43cSAndroid Build Coastguard Worker/* Expand all inherited members in the class. Used when initiating page search */
372*feeed43cSAndroid Build Coastguard Workerfunction ensureAllInheritedExpanded() {
373*feeed43cSAndroid Build Coastguard Worker  var toggles = $(".toggle-all", $("#doc-content"));
374*feeed43cSAndroid Build Coastguard Worker  toggles.each(function(i) {
375*feeed43cSAndroid Build Coastguard Worker    toggleAllInherited(this, true);
376*feeed43cSAndroid Build Coastguard Worker  });
377*feeed43cSAndroid Build Coastguard Worker  $("#toggleAllClassInherited").text("[Collapse All]");
378*feeed43cSAndroid Build Coastguard Worker}
379*feeed43cSAndroid Build Coastguard Worker
380*feeed43cSAndroid Build Coastguard Worker
381*feeed43cSAndroid Build Coastguard Worker/* HANDLE KEY EVENTS
382*feeed43cSAndroid Build Coastguard Worker * - Listen for Ctrl+F (Cmd on Mac) and expand all inherited members (to aid page search)
383*feeed43cSAndroid Build Coastguard Worker */
384*feeed43cSAndroid Build Coastguard Workervar agent = navigator['userAgent'].toLowerCase();
385*feeed43cSAndroid Build Coastguard Workervar mac = agent.indexOf("macintosh") != -1;
386*feeed43cSAndroid Build Coastguard Worker
387*feeed43cSAndroid Build Coastguard Worker$(document).keydown( function(e) {
388*feeed43cSAndroid Build Coastguard Workervar control = mac ? e.metaKey && !e.ctrlKey : e.ctrlKey; // get ctrl key
389*feeed43cSAndroid Build Coastguard Worker  if (control && e.which == 70) {  // 70 is "F"
390*feeed43cSAndroid Build Coastguard Worker    ensureAllInheritedExpanded();
391*feeed43cSAndroid Build Coastguard Worker  }
392*feeed43cSAndroid Build Coastguard Worker});