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.