Monday, November 08, 2010 at 12:00 AM.
scripting2Suite.server.buildTableOfContents
on buildTableOfContents (username) { <<Changes <<6/9/10; 5:40:24 AM by DW <<Make it reverse-chronologic for years, but chronologic within each year. Before it was strictly chronologic. <<6/3/10; 2:51:41 PM by DW <<Created. local (adrdata = scripting2suite.inituser (username), htmltext = "\r\r", now = clock.now (), path = "toc.html"); bundle { //update stats, 6/27/10 by DW adrdata^.stats.ctTocBuilds++; adrdata^.stats.whenLastTocBuild = now}; bundle { //get htmltext local (startdate = adrdata^.prefs.archiveStartDate, startyear = date.year (startdate), floneyear = false); local (enddate = mainresponder.calendar.getLastDay (@adrdata^.calendar), endyear = date.year (enddate)); local (indentlevel = 0, adryear, adrmonth, adrday, adrstory); on add (s) { htmltext = htmltext + string.filledstring ("\t", indentlevel) + s + "\r\n"}; on addyear (year, startmonth, endmonth) { local (m, url); add ("<li class=\"tocYear\"><a name=\"y" + year + "\"></a>" + year + "</li><ul>"); indentlevel++; for m = startmonth to endmonth { url = year + "/" + string.padwithzeros (m, 2) + ".html"; add ("<li class=\"tocMonth\"><a href=\"" + url + "\">" + date.monthtostring (m) + "</a></li>"); indentlevel++}; add ("</ul>"); indentlevel--}; on getmonth (d) { local (day, month, year, hour, minute, second); date.get (d, @day, @month, @year, @hour, @minute, @second); return (month)}; add ("<ul>"); indentlevel++; bundle { //do the last year if startyear != endyear { //more than one year addyear (endyear, 1, getmonth (enddate))}}; bundle { //do the middle years local (year); for year = endyear-1 downto startyear+1 { addyear (year, 1, 12)}}; bundle { //do the first year if startyear == endyear { //special case addyear (startyear, getmonth (startdate), getmonth (enddate)); floneyear = true} else { addyear (startyear, getmonth (startdate), 12)}}; add ("</ul>"); indentlevel--}; <<bundle //old code <<for adryear in @adrdata^.calendar <<add ("<li>" + nameof (adryear^) + "</li><ul>"); indentlevel++ <<for adrmonth in adryear <<add ("<li>" + date.monthtostring (number (nameof (adrmonth^))) + "</li><ol>"); indentlevel++ <<for adrday in adrmonth <<for adrstory in adrday <<add ("<li><a href=\"" + adrstory^.url + "\">" + adrstory^.title + "</a></li>") <<add ("</ol>"); indentlevel-- <<add ("</ul>"); indentlevel-- <<add ("</ul>"); indentlevel-- <<webbrowser.displaytext (htmltext) bundle { //run it through the template local (t); new (tabletype, @t); t.whenLastUpdate = now; t.title = "Table of Contents"; scripting2Suite.server.setupMacrosTable (username, @t); //add common elements scripting2Suite.server.getCalendarText (username, now, t.baseurl, @t.calendar, @t.nextPrevMonths); bundle { //set nextPrev t.nextPrev = ""}; //this is the toc betsy, it has no peer bundle { //do simple replacements on the blogroll, 6/7/10 by DW local (tsmall); new (tabletype, @tsmall); tsmall.calendar = t.calendar; tsmall.nextPrevMonths = t.nextPrevMonths; t.blogroll = string.multiplereplaceall (t.blogroll, @tsmall, false, "<%", "%>")}; t.bodytext = htmltext; htmltext = string.multiplereplaceall (string (adrdata^.prefs.hometemplate), @t, false, "<%", "%>")}; bundle { //upload it, return url return (scripting2Suite.writeStaticFile (username, path, htmltext))}}; bundle { //test code webbrowser.openurl (buildTableOfContents ("arikia"))}
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.