Monday, November 08, 2010 at 12:04 AM.
system.verbs.builtins.mainResponder.siteTree.dive
on dive (adrtable, path, flCreateSubSites = false) {
<<Changes
<<7/2/02; 4:04:27 AM by JES
<<Created.
local (nomad = adrtable);
on getSiteAddress (adrtable, adradrsite, name) {
local (lowername = string.lower (name));
for adr in adrtable {
if defined (adr^.["/atts"]) {
if defined (adr^.["/atts"].name) {
if string.lower (adr^.["/atts"].name) == lowername {
adradrsite^ = adr;
return (true)}}}};
return (false)};
while path != "" { //dive into the table
local (pathPart = string.nthField (path, "/", 1));
path = string.delete (path, 1, sizeOf (pathPart) + 1);
local (adrsite);
if getSiteAddress (nomad, @adrsite, pathPart) {
nomad = adrsite}
else { //create sub-site on the path to this site
if flCreateSubSites {
nomad = xml.addTable (nomad, "site");
new (tableType, @nomad^.["/atts"]);
nomad^.["/atts"].name = pathPart}
else {
scriptError ("Can't dive into siteTree because there is no (sub-)site named \"" + pathPart + "\".")}}};
return (nomad)}
<<bundle //testing
<<local (xstruct)
<<local (adrdomain = @config.mainResponder.domains.default)
<<local (adroutline = @adrdomain^.siteTree.directory.outline)
<<xml.compile (string (adroutline^), @xstruct)
<<local (adrtree = xml.getAddress (@xstruct, "siteTree"))
<<local (adrtopsite = xml.getAddress (adrtree, "site"))
<<dive (adrtopsite, "foo")
<<dive (adrtopsite, "foo/bar/baz")
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.