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