implement api level toggling
and rename navtree.js to android-developer-reference.js for all reference related scripts
TODO: shading for hidden classes in the treeview navigation... these aren't dynamic yet.
diff --git a/tools/droiddoc/templates/assets/android-developer-docs.css b/tools/droiddoc/templates/assets/android-developer-docs.css
index e5489e6..726694d 100644
--- a/tools/droiddoc/templates/assets/android-developer-docs.css
+++ b/tools/droiddoc/templates/assets/android-developer-docs.css
@@ -276,9 +276,9 @@
/* summary tables for reference pages */
.jd-sumtable {
-margin: .5em 1em 1em 1em;
-width:99%;
-font-size:.9em;
+ margin: .5em 1em 1em 1em;
+ width:95%; /* consistent table widths; within IE's quirks */
+ font-size:.9em;
}
.jd-sumtable a {
@@ -330,8 +330,7 @@
links to summary tables) */
#api-info-block {
font-size:.8em;
- margin:0;
- padding:6px;
+ padding:6px 10px;
font-weight:normal;
float:right;
text-align:right;
@@ -346,20 +345,56 @@
color:#999;
}
-h4.jd-details-title .api-level,
-div#jd-header .api-level {
- font-size:12px;
+div.api-level {
+ font-size:.8em;
font-weight:normal;
color:#999;
- position:absolute;
- top:5px;
- right:5px;
+ float:right;
+ padding:0 7px 0;
+ margin-top:-25px;
}
-div#jd-header .api-level {
- position:relative;
- float:right;
- margin-top:-1.7em;
+#api-info-block div.api-level {
+ font-size:1.3em;
+ font-weight:bold;
+ float:none;
+ color:#444;
+ padding:0;
+ margin:0;
+}
+
+/* Force link colors for IE6 */
+div.api-level a {
+ color:#999;
+}
+#api-info-block div.api-level a:link {
+ color:#444;
+}
+#api-level-toggle a {
+ color:#999;
+}
+
+div#naMessage {
+ display:none;
+ width:555px;
+ height:0;
+ margin:0 auto;
+}
+
+div#naMessage div {
+ width:450px;
+ position:fixed;
+ margin:50px 0;
+ padding:4em 4em 3em;
+ background:#FFF;
+ background:rgba(255,255,255,0.7);
+ border:1px solid #dddd00;
+}
+/* IE6 can't position fixed */
+* html div#naMessage div { position:absolute; }
+
+div#naMessage strong {
+ font-size:1.1em;
}
.absent,
@@ -367,25 +402,53 @@
.absent a:visited,
.absent a:hover,
.absent * {
- color:#aaa !important;
- background-color:#f6f6f6 !important;
+ color:#bbb !important;
cursor:default !important;
text-decoration:none !important;
}
-#side-nav li.absent,
-#side-nav li.absent * {
- background-color:#fff !important;
+#api-level-toggle a,
+.api-level a {
+ color:inherit;
+ text-decoration:none;
+}
+
+#api-level-toggle a:hover,
+.api-level a:hover {
+ color:inherit;
+ text-decoration:underline !important;
+ cursor:pointer !important;
}
#side-nav li.absent.selected,
-#side-nav li.absent.selected * {
- background-color:#eee !important;
+#side-nav li.absent.selected *,
+#side-nav div.label.absent.selected,
+#side-nav div.label.absent.selected * {
+ background-color:#eaeaea !important;
}
+/* IE6 quirk (won't chain classes, so just keep background blue) */
+* html #side-nav li.selected,
+* html #side-nav li.selected *,
+* html #side-nav div.label.selected,
+* html #side-nav div.label.selected * {
+ background-color: #435a6e !important;
+}
+
+
+.absent h4.jd-details-title,
+.absent h4.jd-details-title * {
+ background-color:#f6f6f6 !important;
+}
+
+.absent img {
+ opacity: .3;
+ filter: alpha(opacity=30);
+ -ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=30)";
+}
+
/* applies to a div containing links to summary tables */
.sum-details-links {
- margin:0 .5em;
padding:0;
font-weight:normal;
}
@@ -554,8 +617,7 @@
font-size:1.15em;
background-color: #E2E2E2;
margin:1.5em 0 .6em;
- padding:3px;
- position:relative; /* so the api level can be absolute */
+ padding:3px 95px 3px 3px; /* room for api-level */
}
h4.jd-tagtitle {
diff --git a/tools/droiddoc/templates/assets/android-developer-docs.js b/tools/droiddoc/templates/assets/android-developer-docs.js
index 2edf39d..b16ed0d 100644
--- a/tools/droiddoc/templates/assets/android-developer-docs.js
+++ b/tools/droiddoc/templates/assets/android-developer-docs.js
@@ -31,16 +31,9 @@
addLoadEvent(mobileSetup);
}
-/* loads the lists.js file to the page.
-Loading this in the head was slowing page load time */
-addLoadEvent( function() {
- var lists = document.createElement("script");
- lists.setAttribute("type","text/javascript");
- lists.setAttribute("src", toRoot+"reference/lists.js");
- $("head").append($(lists));
-} );
-
+addLoadEvent(function() {
window.onresize = resizeAll;
+});
function mobileSetup() {
$("body").css({'overflow':'auto'});
@@ -51,6 +44,15 @@
$("#nav-tree").css({'overflow-y': 'auto'});
}
+/* loads the lists.js file to the page.
+Loading this in the head was slowing page load time */
+addLoadEvent( function() {
+ var lists = document.createElement("script");
+ lists.setAttribute("type","text/javascript");
+ lists.setAttribute("src", toRoot+"reference/lists.js");
+ $("head").append($(lists));
+} );
+
function setToRoot(root) {
toRoot = root;
// note: toRoot also used by carousel.js
diff --git a/tools/droiddoc/templates/assets/navtree.js b/tools/droiddoc/templates/assets/android-developer-reference.js
similarity index 64%
rename from tools/droiddoc/templates/assets/navtree.js
rename to tools/droiddoc/templates/assets/android-developer-reference.js
index 33a4f81..44fa903 100644
--- a/tools/droiddoc/templates/assets/navtree.js
+++ b/tools/droiddoc/templates/assets/android-developer-reference.js
@@ -1,5 +1,65 @@
-function new_node(me, mom, text, link, children_data)
+/* API LEVEL TOGGLE */
+addLoadEvent(changeApiLevel);
+var API_LEVEL_COOKIE = "api_level";
+var minLevel = 1;
+
+function buildApiLevelToggle() {
+ var maxLevel = SINCE_DATA.length;
+ var userApiLevel = readCookie(API_LEVEL_COOKIE);
+
+ if (userApiLevel != 0) {
+ selectedLevel = userApiLevel;
+ } else {
+ selectedLevel = maxLevel;
+ }
+
+ minLevel = $("body").attr("class");
+ var select = $("#apiLevelControl").html("").change(changeApiLevel);
+ for (var i = maxLevel-1; i >= 0; i--) {
+ var option = $("<option />").attr("value",""+SINCE_DATA[i]).append(""+SINCE_DATA[i]);
+// if (SINCE_DATA[i] < minLevel) option.addClass("absent"); // always false for strings (codenames)
+ select.append(option);
+ }
+
+ // get the DOM element and use setAttribute cuz IE6 fails when using jquery .attr('selected',true)
+ var selectedLevelItem = $("#apiLevelControl option[value='"+selectedLevel+"']").get(0);
+ selectedLevelItem.setAttribute('selected',true);
+}
+
+function changeApiLevel() {
+ var selectedLevel = $("#apiLevelControl option:selected").val();
+ var apis = $(".api");
+ apis.each(function(i) {
+ var obj = $(this);
+ var className = obj.attr("class");
+ var apiLevelIndex = className.lastIndexOf("-")+1;
+ var apiLevelEndIndex = className.indexOf(" ", apiLevelIndex);
+ apiLevelEndIndex = apiLevelEndIndex != -1 ? apiLevelEndIndex : className.length;
+ var apiLevel = className.substring(apiLevelIndex, apiLevelEndIndex);
+ if (apiLevel > selectedLevel) obj.addClass("absent").attr("title","Requires API Level "+apiLevel+" or higher");
+ else obj.removeClass("absent").removeAttr("title");
+ });
+
+ var date = new Date();
+ date.setTime(date.getTime()+(50*365*24*60*60*1000)); // keep this for 50 years
+ writeCookie(API_LEVEL_COOKIE, selectedLevel, null, date);
+
+ if (selectedLevel < minLevel) {
+ var thing = ($("#jd-header").html().indexOf("package") != -1) ? "package" : "class";
+ $("#naMessage").show().html("<div><p><strong>This " + thing + " is not available with API Level " + selectedLevel + ".</strong></p>"
+ + "<p>To use this " + thing + ", your application must specify API Level " + minLevel + " or higher in its manifest "
+ + "and be compiled against a version of the Android library that supports an equal or higher API Level. To reveal this "
+ + "document, change the value of the API Level filter above.</p>"
+ + "<p><a href='" +toRoot+ "guide/appendix/api-levels.html'>What is the API Level?</a></p></div>");
+ } else {
+ $("#naMessage").hide();
+ }
+}
+
+/* NAVTREE */
+
+function new_node(me, mom, text, link, children_data, api_level)
{
var node = new Object();
node.children = Array();
@@ -10,9 +70,13 @@
mom.get_children_ul().appendChild(node.li);
node.label_div = document.createElement("div");
+ node.label_div.className = "label";
+ if (api_level != null) {
+ $(node.label_div).addClass("api");
+ $(node.label_div).addClass("api-level-"+api_level);
+ }
node.li.appendChild(node.label_div);
node.label_div.style.paddingLeft = 10*node.depth + "px";
- node.label_div.className = "label";
if (children_data == null) {
// 12 is the width of the triangle and padding extra space
@@ -81,6 +145,7 @@
$(node.get_children_ul()).slideDown("fast");
} else {
get_node(me, node);
+ if ($(node.label_div).hasClass("absent")) $(node.get_children_ul()).addClass("absent");
$(node.get_children_ul()).slideDown("fast");
}
node.plus_img.src = me.toroot + "assets/images/triangle-opened-small.png";
@@ -94,7 +159,7 @@
for (var i in mom.children_data) {
var node_data = mom.children_data[i];
mom.children[i] = new_node(me, mom, node_data[0], node_data[1],
- node_data[2]);
+ node_data[2], node_data[3]);
}
}
@@ -104,8 +169,7 @@
var file = "";
if (toroot.substr(0, 1) == "/") {
if (full.substr(0, toroot.length) == toroot) {
- var basePath = getBaseUri(full);
- return basePath.substring(toroot.length);
+ return full.substr(toroot.length);
} else {
// the file isn't under toroot. Fail.
return null;
@@ -150,15 +214,14 @@
navtreeData.setAttribute("type","text/javascript");
navtreeData.setAttribute("src", toroot+"navtree_data.js");
$("head").append($(navtreeData));
-}
+}
function init_default_navtree(toroot) {
- load_navtree_data(toroot);
init_navtree("nav-tree", toroot, NAVTREE_DATA);
}
function init_navtree(navtree_id, toroot, root_nodes)
-{
+{
var me = new Object();
me.toroot = toroot;
me.node = new Object();
@@ -189,4 +252,3 @@
});
}
}
-