Monday, November 08, 2010 at 12:04 AM.
system.verbs.builtins.mainResponder.macros.linkPanel
on linkPanel (adroutline, ixLinkSet, flUseCache=true, switchLinkUrl="switchLinks$", flFormulas=false) {
<<Changes:
<<4/14/00; 6:29:29 PM by JES
<<localized
on link (url, linetext, title=nil, color=nil) {
local (startfont = "", endfont = "");
if color != nil {
startfont = "<font color=\"" + color + "\">";
endfont = "</font>"};
if url == "" {
return (startfont + linetext + endfont)}
else {
local (titlepart = "");
if title != nil {
titlepart = "title=\"" + title + "\""};
return ("<a " + titlepart + "href=\"" + url + "\">" + startfont + linetext + endfont + "</a>")}};
if ixlinkset == nil { //get it from the user's member info
ixlinkset = 1;
local (pta = html.getpagetableaddress ());
if defined (pta^.adrmemberinfo) {
local (adrpanels = @pta^.adrmemberinfo^.panels);
if defined (adrpanels^) {
local (adrpanel = @adrpanels^.[pta^.panelname]);
if defined (adrpanel^) {
ixlinkset = adrpanel^.panelnum}}}};
local (adrcache);
bundle { //check cache to see if we don't have to traverse the outline
local (adrsystemcache = @system.temp.mainResponder.linkPanelCache);
if not defined (adrsystemcache^) {
new (tabletype, adrsystemcache)};
local (adrcachetable = @adrsystemcache^.[string (adroutline)]);
if not defined (adrcachetable^) {
new (tabletype, adrcachetable)};
adrcache = @adrcachetable^.[string (ixLinkSet)];
if defined (adrcache^) {
if timeModified (adrcache) >= timeModified (adroutline) { //we can use the cache
if flUseCache {
return (string (adrcache^))}}}};
local (localoutline = adroutline^);
local (oldtarget = target.set (@localoutline), name, url, titleUrl);
local (oldcursor = op.getcursor ());
op.setdisplay (false);
local (htmltext = "", indentlevel = 0);
on add (s) {
htmltext = htmltext + string.filledString ("\t", indentlevel) + s + "\r"};
bundle { //add switch-links
local (s = "<b>" + mainResponder.getString ("macros.linkPanel.links")); // 4/14/00 JES: localized
local (ct = 1);
op.firstsummit ();
loop {
s = s + " ";
if ct == ixLinkSet {
s = s + link ("", op.getlinetext ())}
else {
s = s + link (switchLinkUrl + ct, op.getlinetext ())};
if not op.go (down, 1) {
s = s + "</b><p>";
add (s);
break};
ct++}};
bundle { //add links for this group
op.firstsummit ();
if ixLinkSet > 1 {
if not op.go (down, ixLinkSet - 1) {
scriptError (mainResponder.getString ("macros.linkPanel.notEnoughTopLevelGroupsError"))}}; // 4/14/00 JES: localized
op.expand (1);
if not op.go (right, 1) {
scriptError (mainResponder.getString ("macros.linkPanel.linkGroupHasNoSubheadsError"))}; // 4/14/00 JES: localized
loop {
name = op.getlinetext ();
op.expand (1);
url = ""; titleText = "";
if op.go (right, 1) {
url = op.getlinetext ();
if op.go (down, 1) {
titleText = op.getlinetext ()};
op.go (left, 1)};
if url == "" {
add (name + "<p>")}
else {
if flFormulas and (url beginswith "=") {
local (pta = html.getpagetableaddress ());
try {
url = evaluate (string.delete (url, 1, 1))}};
add (link (url, name, titletext) + "<p>")};
if not op.go (down, 1) {
break}}};
op.setcursor (oldcursor);
op.setdisplay (true);
target.set (oldtarget);
wp.newtextobject (htmltext, adrcache);
return (htmltext)}
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.