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});