Monday, November 08, 2010 at 12:01 AM.
system.verbs.apps.Manila.windowTypes.types.manilaTemplate.scripts.siteStructure.xmlToOutline
on xmlToOutline (xmltext, adrOutline) {
<<Changes:
<<2/11/04; 1:53:08 AM by JES
<<Added support for redirects from within a Manila site structure.
<<12/28/01; 6:23:53 PM by JES
<<Fixed a bug where site structure outlines would not open on Windows.
<<12/19/01; 2:27:03 PM by JES
<<Added some msg calls, so the user has some indication that the outline is being built. This is important for large site structure outlines, like the DocServer site structure outline.
<<7/22/01; 12:31:40 AM by JES
<<Decode xml entities in name and description attributes.
<<12/31/00; 5:11:47 PM by JES
<<On Macs, convert latin opml text to Mac text.
<<Tuesday, September 19, 2000 at 2:11:18 PM by PBS
<<Get descriptions and add as attributes. If an item has no description, then description attribute is "".
<<Wed, Aug 23, 2000 at 1:45:20 AM by PBS
<<Created. Build a site structure outline. This script over-rides the plain XML that Pike gives us.
<<local (adrOutline = @adrTable^.outline) //the actual window
local (adrinfo);
window.attributes.getOne ("adrSiteInfo", @adrinfo, adrOutline);
local (siteUrl = nameOf (adrinfo^));
bundle { //if port 80, pull the port out of the siteUrl
local (parts = string.urlSplit (siteUrl));
if parts[2] contains ":" {
if string.nthField (parts[2], ':', 2) == "80" {
siteUrl = parts[1] + string.nthField (parts[2], ':', 1) + "/" + parts[3]}}};
local (t);
new (tableType, @t);
if system.environment.isMac { //12/31/00 JES: convert to Mac text
xml.compile (latinToMac.convert (xmltext), @t)}
else {
xml.compile (xmltext, @t)};
new (outlineType, adrOutline);
local (oldTarget = target.set (adrOutline));
on getDescription (adrTable) { //PBS 09/19/00: get an item's description
local (adrItem);
for adrItem in adrTable {
local (itemName = xml.convertToDisplayName (nameOf (adrItem^)));
if string.lower (itemName) == "description" {
return (adrItem^)}};
return ("")};
on doTable (adrTable, flGoneRight, message="Building site structure outline: ") {
local (dir = down);
if not flGoneRight {
dir = right};
local (adrItem);
for adrItem in adrTable {
if typeOf (adrItem^) != tableType {
continue};
local (itemName = xml.convertToDisplayName (nameOf (adrItem^)));
local (lowerName = string.lower (itemName));
case lowerName {
"story" {
local (atts);
new (tableType, @atts);
atts.siteUrl = siteUrl;
atts.type = "manilaSiteStructureMessage";
atts.msgNum = adrItem^.["/atts"].msgNum;
atts.name = adrItem^.["/atts"].name;
atts.description = getDescription (adrItem);
local (linetext = adrItem^.["/atts"].pathName);
msg (message + linetext + "...");
if (sizeOf (adrOutline^) == 1) and (op.getLineText () == "") {
op.setLineText (linetext)}
else {
op.insert (linetext, dir)};
dir = down;
op.attributes.addGroup (@atts)};
"category" {
local (atts);
new (tableType, @atts);
atts.siteUrl = siteUrl;
atts.type = "manilaSiteStructureCategory";
local (linetext = adrItem^.["/atts"].pathName);
if defined (adrItem^.["/atts"].name) {
atts.name = adrItem^.["/atts"].name}
else {
atts.name = adrItem^.["/atts"].pathName};
atts.description = getDescription (adrItem);
if (sizeOf (adrOutline^) == 1) and (op.getLineText () == "") {
op.setLineText (linetext)}
else {
op.insert (linetext, dir)};
op.attributes.addGroup (@atts);
dir = down;
if defined (adrItem^.["/atts"].msgNum) {
local (atts);
new (tableType, @atts);
atts.siteUrl = siteUrl;
atts.type = "manilaSiteStructureMessage";
atts.msgNum = adrItem^.["/atts"].msgNum;
atts.name = adrItem^.["/atts"].name;
linetext = "index";
op.insert (linetext, right);
op.attributes.addGroup (@atts);
doTable (adrItem, true, message + linetext + "/")}
else {
doTable (adrItem, false, message + linetext + "/")}};
"redirect" {
local (atts);
new (tableType, @atts);
atts.siteUrl = siteUrl;
atts.type = "manilaSiteStructureRedirect";
atts.url = adrItem^.["/atts"].url;
local (linetext = adrItem^.["/atts"].pathName);
if (sizeOf (adrOutline^) == 1) and (op.getLineText () == "") {
op.setLineText (linetext)}
else {
op.insert (linetext, dir)};
dir = down;
op.attributes.addGroup (@atts)}}};
op.go (left, 1)};
doTable (@t [1], true);
msg ("");
try {target.set (oldTarget)};
return (true)}
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.