294 lines
		
	
	
		
			10 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
			
		
		
	
	
			294 lines
		
	
	
		
			10 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
| function toggle_private() {
 | |
|         // Search for any private/public links on this page.  Store
 | |
|         // their old text in "cmd," so we will know what action to
 | |
|         // take; and change their text to the opposite action.
 | |
|         var cmd = "?";
 | |
|         var elts = document.getElementsByTagName("a");
 | |
|         for(var i=0; i<elts.length; i++) {
 | |
|           if (elts[i].className == "privatelink") {
 | |
|             cmd = elts[i].innerHTML;
 | |
|             elts[i].innerHTML = ((cmd && cmd.substr(0,4)=="show")?
 | |
|                                     "hide private":"show private");
 | |
|           }
 | |
|         }
 | |
|         // Update all DIVs containing private objects.
 | |
|         var elts = document.getElementsByTagName("div");
 | |
|         for(var i=0; i<elts.length; i++) {
 | |
|           if (elts[i].className == "private") {
 | |
|             elts[i].style.display = ((cmd && cmd.substr(0,4)=="hide")?"none":"block");
 | |
|           }
 | |
|           else if (elts[i].className == "public") {
 | |
|             elts[i].style.display = ((cmd && cmd.substr(0,4)=="hide")?"block":"none");
 | |
|           }
 | |
|         }
 | |
|         // Update all table rows containing private objects.  Note, we
 | |
|         // use "" instead of "block" becaue IE & firefox disagree on what
 | |
|         // this should be (block vs table-row), and "" just gives the
 | |
|         // default for both browsers.
 | |
|         var elts = document.getElementsByTagName("tr");
 | |
|         for(var i=0; i<elts.length; i++) {
 | |
|           if (elts[i].className == "private") {
 | |
|             elts[i].style.display = ((cmd && cmd.substr(0,4)=="hide")?"none":"");
 | |
|           }
 | |
|         }
 | |
|         // Update all list items containing private objects.
 | |
|         var elts = document.getElementsByTagName("li");
 | |
|         for(var i=0; i<elts.length; i++) {
 | |
|           if (elts[i].className == "private") {
 | |
|             elts[i].style.display = ((cmd && cmd.substr(0,4)=="hide")?
 | |
|                                         "none":"");
 | |
|           }
 | |
|         }
 | |
|         // Update all list items containing private objects.
 | |
|         var elts = document.getElementsByTagName("ul");
 | |
|         for(var i=0; i<elts.length; i++) {
 | |
|           if (elts[i].className == "private") {
 | |
|             elts[i].style.display = ((cmd && cmd.substr(0,4)=="hide")?"none":"block");
 | |
|           }
 | |
|         }
 | |
|         // Set a cookie to remember the current option.
 | |
|         document.cookie = "EpydocPrivate="+cmd;
 | |
|       }
 | |
| function show_private() {
 | |
|         var elts = document.getElementsByTagName("a");
 | |
|         for(var i=0; i<elts.length; i++) {
 | |
|           if (elts[i].className == "privatelink") {
 | |
|             cmd = elts[i].innerHTML;
 | |
|             if (cmd && cmd.substr(0,4)=="show")
 | |
|                 toggle_private();
 | |
|           }
 | |
|         }
 | |
|       }
 | |
| function getCookie(name) {
 | |
|         var dc = document.cookie;
 | |
|         var prefix = name + "=";
 | |
|         var begin = dc.indexOf("; " + prefix);
 | |
|         if (begin == -1) {
 | |
|           begin = dc.indexOf(prefix);
 | |
|           if (begin != 0) return null;
 | |
|         } else
 | |
|         { begin += 2; }
 | |
|         var end = document.cookie.indexOf(";", begin);
 | |
|         if (end == -1)
 | |
|         { end = dc.length; }
 | |
|         return unescape(dc.substring(begin + prefix.length, end));
 | |
|       }
 | |
| function setFrame(url1, url2) {
 | |
|           parent.frames[1].location.href = url1;
 | |
|           parent.frames[2].location.href = url2;
 | |
|       }
 | |
| function checkCookie() {
 | |
|         var cmd=getCookie("EpydocPrivate");
 | |
|         if (cmd && cmd.substr(0,4)!="show" && location.href.indexOf("#_") < 0)
 | |
|             toggle_private();
 | |
|       }
 | |
| function toggleCallGraph(id) {
 | |
|         var elt = document.getElementById(id);
 | |
|         if (elt.style.display == "none")
 | |
|             elt.style.display = "block";
 | |
|         else
 | |
|             elt.style.display = "none";
 | |
|       }
 | |
| function expand(id) {
 | |
|   var elt = document.getElementById(id+"-expanded");
 | |
|   if (elt) elt.style.display = "block";
 | |
|   var elt = document.getElementById(id+"-expanded-linenums");
 | |
|   if (elt) elt.style.display = "block";
 | |
|   var elt = document.getElementById(id+"-collapsed");
 | |
|   if (elt) { elt.innerHTML = ""; elt.style.display = "none"; }
 | |
|   var elt = document.getElementById(id+"-collapsed-linenums");
 | |
|   if (elt) { elt.innerHTML = ""; elt.style.display = "none"; }
 | |
|   var elt = document.getElementById(id+"-toggle");
 | |
|   if (elt) { elt.innerHTML = "-"; }
 | |
| }
 | |
| 
 | |
| function collapse(id) {
 | |
|   var elt = document.getElementById(id+"-expanded");
 | |
|   if (elt) elt.style.display = "none";
 | |
|   var elt = document.getElementById(id+"-expanded-linenums");
 | |
|   if (elt) elt.style.display = "none";
 | |
|   var elt = document.getElementById(id+"-collapsed-linenums");
 | |
|   if (elt) { elt.innerHTML = "<br />"; elt.style.display="block"; }
 | |
|   var elt = document.getElementById(id+"-toggle");
 | |
|   if (elt) { elt.innerHTML = "+"; }
 | |
|   var elt = document.getElementById(id+"-collapsed");
 | |
|   if (elt) {
 | |
|     elt.style.display = "block";
 | |
|     
 | |
|     var indent = elt.getAttribute("indent");
 | |
|     var pad = elt.getAttribute("pad");
 | |
|     var s = "<tt class='py-lineno'>";
 | |
|     for (var i=0; i<pad.length; i++) { s += " " }
 | |
|     s += "</tt>";
 | |
|     s += "  <tt class='py-line'>";
 | |
|     for (var i=0; i<indent.length; i++) { s += " " }
 | |
|     s += "<a href='#' onclick='expand(\"" + id;
 | |
|     s += "\");return false'>...</a></tt><br />";
 | |
|     elt.innerHTML = s;
 | |
|   }
 | |
| }
 | |
| 
 | |
| function toggle(id) {
 | |
|   elt = document.getElementById(id+"-toggle");
 | |
|   if (elt.innerHTML == "-")
 | |
|       collapse(id); 
 | |
|   else
 | |
|       expand(id);
 | |
|   return false;
 | |
| }
 | |
| 
 | |
| function highlight(id) {
 | |
|   var elt = document.getElementById(id+"-def");
 | |
|   if (elt) elt.className = "py-highlight-hdr";
 | |
|   var elt = document.getElementById(id+"-expanded");
 | |
|   if (elt) elt.className = "py-highlight";
 | |
|   var elt = document.getElementById(id+"-collapsed");
 | |
|   if (elt) elt.className = "py-highlight";
 | |
| }
 | |
| 
 | |
| function num_lines(s) {
 | |
|   var n = 1;
 | |
|   var pos = s.indexOf("\n");
 | |
|   while ( pos > 0) {
 | |
|     n += 1;
 | |
|     pos = s.indexOf("\n", pos+1);
 | |
|   }
 | |
|   return n;
 | |
| }
 | |
| 
 | |
| // Collapse all blocks that mave more than `min_lines` lines.
 | |
| function collapse_all(min_lines) {
 | |
|   var elts = document.getElementsByTagName("div");
 | |
|   for (var i=0; i<elts.length; i++) {
 | |
|     var elt = elts[i];
 | |
|     var split = elt.id.indexOf("-");
 | |
|     if (split > 0)
 | |
|       if (elt.id.substring(split, elt.id.length) == "-expanded")
 | |
|         if (num_lines(elt.innerHTML) > min_lines)
 | |
|           collapse(elt.id.substring(0, split));
 | |
|   }
 | |
| }
 | |
| 
 | |
| function expandto(href) {
 | |
|   var start = href.indexOf("#")+1;
 | |
|   if (start != 0 && start != href.length) {
 | |
|     if (href.substring(start, href.length) != "-") {
 | |
|       collapse_all(4);
 | |
|       pos = href.indexOf(".", start);
 | |
|       while (pos != -1) {
 | |
|         var id = href.substring(start, pos);
 | |
|         expand(id);
 | |
|         pos = href.indexOf(".", pos+1);
 | |
|       }
 | |
|       var id = href.substring(start, href.length);
 | |
|       expand(id);
 | |
|       highlight(id);
 | |
|     }
 | |
|   }
 | |
| }
 | |
| 
 | |
| function kill_doclink(id) {
 | |
|   var parent = document.getElementById(id);
 | |
|   parent.removeChild(parent.childNodes.item(0));
 | |
| }
 | |
| function auto_kill_doclink(ev) {
 | |
|   if (!ev) var ev = window.event;
 | |
|   if (!this.contains(ev.toElement)) {
 | |
|     var parent = document.getElementById(this.parentID);
 | |
|     parent.removeChild(parent.childNodes.item(0));
 | |
|   }
 | |
| }
 | |
| 
 | |
| function doclink(id, name, targets_id) {
 | |
|   var elt = document.getElementById(id);
 | |
| 
 | |
|   // If we already opened the box, then destroy it.
 | |
|   // (This case should never occur, but leave it in just in case.)
 | |
|   if (elt.childNodes.length > 1) {
 | |
|     elt.removeChild(elt.childNodes.item(0));
 | |
|   }
 | |
|   else {
 | |
|     // The outer box: relative + inline positioning.
 | |
|     var box1 = document.createElement("div");
 | |
|     box1.style.position = "relative";
 | |
|     box1.style.display = "inline";
 | |
|     box1.style.top = 0;
 | |
|     box1.style.left = 0;
 | |
|   
 | |
|     // A shadow for fun
 | |
|     var shadow = document.createElement("div");
 | |
|     shadow.style.position = "absolute";
 | |
|     shadow.style.left = "-1.3em";
 | |
|     shadow.style.top = "-1.3em";
 | |
|     shadow.style.background = "#404040";
 | |
|     
 | |
|     // The inner box: absolute positioning.
 | |
|     var box2 = document.createElement("div");
 | |
|     box2.style.position = "relative";
 | |
|     box2.style.border = "1px solid #a0a0a0";
 | |
|     box2.style.left = "-.2em";
 | |
|     box2.style.top = "-.2em";
 | |
|     box2.style.background = "white";
 | |
|     box2.style.padding = ".3em .4em .3em .4em";
 | |
|     box2.style.fontStyle = "normal";
 | |
|     box2.onmouseout=auto_kill_doclink;
 | |
|     box2.parentID = id;
 | |
| 
 | |
|     // Get the targets
 | |
|     var targets_elt = document.getElementById(targets_id);
 | |
|     var targets = targets_elt.getAttribute("targets");
 | |
|     var links = "";
 | |
|     target_list = targets.split(",");
 | |
|     for (var i=0; i<target_list.length; i++) {
 | |
|         var target = target_list[i].split("=");
 | |
|         links += "<li><a href='" + target[1] + 
 | |
|                "' style='text-decoration:none'>" +
 | |
|                target[0] + "</a></li>";
 | |
|     }
 | |
|   
 | |
|     // Put it all together.
 | |
|     elt.insertBefore(box1, elt.childNodes.item(0));
 | |
|     //box1.appendChild(box2);
 | |
|     box1.appendChild(shadow);
 | |
|     shadow.appendChild(box2);
 | |
|     box2.innerHTML =
 | |
|         "Which <b>"+name+"</b> do you want to see documentation for?" +
 | |
|         "<ul style='margin-bottom: 0;'>" +
 | |
|         links + 
 | |
|         "<li><a href='#' style='text-decoration:none' " +
 | |
|         "onclick='kill_doclink(\""+id+"\");return false;'>"+
 | |
|         "<i>None of the above</i></a></li></ul>";
 | |
|   }
 | |
|   return false;
 | |
| }
 | |
| 
 | |
| function get_anchor() {
 | |
|           var href = location.href;
 | |
|           var start = href.indexOf("#")+1;
 | |
|           if ((start != 0) && (start != href.length))
 | |
|               return href.substring(start, href.length);
 | |
|       }
 | |
| function redirect_url(dottedName) {
 | |
|           // Scan through each element of the "pages" list, and check
 | |
|           // if "name" matches with any of them.
 | |
|           for (var i=0; i<pages.length; i++) {
 | |
| 
 | |
|               // Each page has the form "<pagename>-m" or "<pagename>-c";
 | |
|               // extract the <pagename> portion & compare it to dottedName.
 | |
|               var pagename = pages[i].substring(0, pages[i].length-2);
 | |
|               if (pagename == dottedName.substring(0,pagename.length)) {
 | |
| 
 | |
|                   // We've found a page that matches `dottedName`;
 | |
|                   // construct its URL, using leftover `dottedName`
 | |
|                   // content to form an anchor.
 | |
|                   var pagetype = pages[i].charAt(pages[i].length-1);
 | |
|                   var url = pagename + ((pagetype=="m")?"-module.html":
 | |
|                                                         "-class.html");
 | |
|                   if (dottedName.length > pagename.length)
 | |
|                       url += "#" + dottedName.substring(pagename.length+1,
 | |
|                                                         dottedName.length);
 | |
|                   return url;
 | |
|               }
 | |
|           }
 | |
|       }
 |