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