Wednesday, December 01, 2010 at 4:42 AM.
scripting2Suite.server.buildMonthPage
on buildMonthPage (username, themonth) { <<Changes <<12/1/10; 4:03:56 AM by DW <<Fix first year rollover bug. Make sure the next year exists in the calendar structure. <<6/7/10; 8:41:07 PM by DW <<Created. local (adrdata = scripting2suite.inituser (username), adrcal = @adrdata^.calendar); local (whenLastSave = date (0), htmltext, adrmonth, monthstring, path); bundle { //set adrmonth, monthstring, path local (day, month, year, hour, minute, second); date.get (themonth, @day, @month, @year, @hour, @minute, @second); local (padmonth = string.padwithzeros (month, 2)); adrmonth = @adrcal^.[year].[padmonth]; monthstring = date.monthtostring (month) + " " + year; path = year + "/" + padmonth + ".html"}; bundle { //get htmltext local (indentlevel = 0, i); htmltext = "\r\r"; on add (s) { htmltext = htmltext + string.filledstring ("\t", indentlevel) + s + "\r\n"}; on decode (s) { return (xml.entitydecode (s, true))}; for i = sizeof (adrmonth^) downto 1 { local (adrday = @adrmonth^ [i], j); for j = sizeof (adrday^) downto 1 { local (adrstory = @adrday^ [j]); if scripting2Suite.server.isStoryVisible (adrstory) { add (scripting2Suite.server.getStoryText (adrstory, flComments:adrdata^.prefs.flDisqusComments)); if adrstory^.whenLastSave > whenLastSave { whenLastSave = adrstory^.whenLastSave}}}}; htmltext = scripting2Suite.server.glossarySubstitution (@adrdata^.prefs.glossary, htmltext); htmltext = scripting2Suite.server.glossarySubstitution (@scripting2Suite.data.systemGlossary, htmltext)}; bundle { //run it through the template local (t); new (tabletype, @t); t.whenLastUpdate = whenLastSave; t.title = monthstring; scripting2Suite.server.setupMacrosTable (username, @t); //add common elements scripting2Suite.server.getCalendarText (username, themonth, t.baseurl, @t.calendar, @t.nextPrevMonths); t.crumbTrail = scripting2Suite.server.getCrumbTrail (t.baseurl, themonth, flmonthbold:true); //6/8/10 by DW bundle { //set nextPrev local (nextlink = "Next", prevlink = "Previous", nexturl = "", prevurl = ""); on getmonthaddress (d) { local (day, month, year, hour, minute, second); date.get (d, @day, @month, @year, @hour, @minute, @second); local (padmonth = string.padwithzeros (month, 2)); adrmonth = @adrcal^.[year].[padmonth]; return (adrmonth)}; on monthtourl (d) { local (day, month, year, hour, minute, second); date.get (d, @day, @month, @year, @hour, @minute, @second); url = t.baseurl + year + "/" + string.padwithzeros (month, 2) + ".html"; return (url)}; bundle { //set nexturl local (d = date.nextmonth (themonth)); try { //it will fail if you're getting January's address in December, 12/1/10 by DW local (adrnextmonth = getmonthaddress (d)); if defined (adrnextmonth^) { nexturl = monthtourl (d)}}}; bundle { //set prevurl local (d = date.prevmonth (themonth)); local (adrprevmonth = getmonthaddress (d)); if defined (adrprevmonth^) { prevurl = monthtourl (d)}}; if prevurl != "" { prevlink = "<a href=\"" + prevurl + "\">" + prevlink + "</a>"}; if nexturl != "" { nextlink = "<a href=\"" + nexturl + "\">" + nextlink + "</a>"}; t.nextPrev = prevlink + " / " + nextlink}; 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 (scripting2Suite.writeStaticFile (username, path, htmltext))}}; bundle { //test code for month = 2 to 6 { webbrowser.openurl (buildMonthPage ("davewiner", date.set (1, month, 2010, 0, 0, 0)))}}
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.