Monday, November 08, 2010 at 12:04 AM.
system.verbs.builtins.mainResponder.adminSite.prefs.renderDomainTree
on renderDomainTree (domain, maxsites=50) { <<Changes <<9/7/02; 1:29:32 PM by JES <<Handle non-site tree address-type domains. <<8/5/02; 9:16:19 PM by JES <<Created. local (htmltext); on add (s) { htmltext = htmltext + (s + "\r");}; local (pta = html.getPageTableAddress ()); local (bg1 = pta^.trbg1, bg2 = pta^.trbg2); local (bgcolor = bg2); local (basedomain = domain); if string.lower (basedomain) == "default" { basedomain = string.nthField (pta^.host, ":", 1)}; //always pop off the port local (baselink = "http://" + basedomain); local (port = user.inetd.config.http.port); bundle { //possibly append the port to the baselink if defined (user.inetd.config.http.apparentPort) { port = user.inetd.config.http.apparentPort}; if port != 80 { baselink = baselink + ":" + user.inetd.config.http.port}}; local (adrdom = @config.mainResponder.domains.[domain]); if mainResponder.siteTree.domainIsSiteTree (adrdom) { mainResponder.siteTree.compileIfDirty (adrdom)}; local (pc = file.getPathChar ()); on addRow (url, label, type, objectspec=nil) { if bgcolor == bg1 { bgcolor = bg2} else { bgcolor = bg1}; if objectspec == nil { add ("<tr bgcolor=\"" + bgcolor + "\">")} else { //make the bgcolor reflect whether or not the resource is available case type { "address" { if defined (objectspec^) { add ("<tr bgcolor=\"" + bgcolor + "\">")} else { add ("<tr bgcolor=\"#FFD0D0\">")}}; "folder" { if file.exists (objectspec) { add ("<tr bgcolor=\"" + bgcolor + "\">")} else { add ("<tr bgcolor=\"#FFD0D0\">")}}}}; add ("<td valign=\"top\" class=\"small\"><input type=\"checkbox\" name=\"" + domain + ":" + label + "\" /></td>"); add ("<td valign=\"top\" class=\"small\"><nobr><a href=\"" + url + "\">" + label + "</nobr></td>"); add ("<td valign=\"top\" class=\"small\">" + objectspec + "</td>"); add ("<td valign=\"top\" class=\"small\">" + type + "</td>"); add ("</tr>")}; local (ctsites = 0); on getLeafPath (adrleaf) { local (path = "/"); local (nomad = adrleaf); while string.lower (xml.convertToDisplayName (nameOf (nomad^))) == "site" { if defined (nomad^.["/atts"].name) { if sizeOf (nomad^.["/atts"].name) > 0 { path = "/" + nomad^.["/atts"].name + path}}; nomad = parentOf (nomad^)}; return (path)}; on doSiteTreeLeaf (adrleaf) { local (path = getLeafPath (adrleaf)); local (type, objectspec); bundle { //set type and objectspec if defined (adrleaf^.["/atts"].address) { type = "address"; objectspec = adrleaf^.["/atts"].address} else { if defined (adrleaf^.["/atts"].folderpath) { type = "folder"; objectspec = adrleaf^.["/atts"].folderpath} else { if defined (adrleaf^.["/atts"].redirect) { type = "redirect"; objectspec = adrleaf^.["/atts"].redirect + "/"}}}}; addRow (baselink + path, path, type, objectspec); ctsites++; if ctsites >= maxsites { if bgcolor == bg1 { bgcolor = bg2} else { bgcolor = bg1}; add ("<tr bgcolor=\"" + bgcolor + "\"><td></td><td colspan=\"3\" class=\"small\">(There are more sites in this domain, but only the first " + maxsites + " are listed. To administer these sites, edit " + string.popFileFromAddress (adrdom) + " using the Frontier application. You can still add new sites using the form above.)</td></tr>"); return (false)}; return (true)}; on doDomain (adrdom) { case typeOf (adrdom^) { filespecType; stringType { if string.lower (adrdom^) beginsWith "http://" { //redirect addRow (baselink + "/", "/", "redirect", adrdom^ + "/")} else { // serving from filesystem local (t); if adrdom^ endsWith pc { //folder t = "folder"} else { //database t = "database"}; addRow (baselink + "/", "/", t, adrdom^)}}; addressType { local (url = "http://" + nameOf (adrdom^) + "/"); addRow (url, url, "address", string.popFileFromAddress (adrdom^))}; tableType { if mainResponder.siteTree.domainIsSiteTree (adrdom) { mainResponder.siteTree.visit (adrdom, @doSiteTreeLeaf)} else { local (adrdoc = @adrdom^.doctree); doDomain (adrdoc)}}}}; doDomain (adrdom); return (htmltext)}; <<bundle //test code <<html.setPageTableAddress (@workspace.pt) <<renderDomainTree ("127.0.0.1")
This listing is for code that runs in the OPML Editor environment. I created these listings because I wanted the search engines to index it, so that when I want to look up something in my codebase I don't have to use the much slower search functionality in my object database. Dave Winer.