Monday, November 08, 2010 at 12:05 AM.
system.verbs.builtins.radio.weblog.publish
on publish (adrblog=radio.weblog.init (), catname=nil, d=nil) { <<Changes: <<9/3/02; 3:42:52 PM by LL <<Added support for weekly weblog archives. <<8/26/02; 10:39:24 PM by LL <<Added support for monthly weblog archives. <<8/14/02; 12:40:43 AM by JES <<Always add the home page to the table at system.temp.radio.pingAfterUpstream. Fixes a bug where if the weblogs.com ping is turned off in the prefs, then the local RCS never gets a ping. Checking the pref here was redundant anyway, since it's checked in radio.thread.agents.pingWeblogsCom. <<6/5/02; 12:42:07 PM by DW <<Every time the user publishes, we track the update in a new table at weblogData.stats.hourlyUpdateCounts. <<2/13/02; 12:19:00 PM by JES <<Don't add the #categoryName directive to the index file for categories. <<2/12/02; 5:13:19 PM by JES <<When checking to see if a value was specified for the optional d parameter, check typeOf (d) == unknownType, instead of checking d == nil. Fixes a bug where archive pages are sometimes not rendered when they should be. <<2/1/02; 3:01:31 PM by JES <<When publishing a weblog page, set adrfile^.upstream.whenLastUploaded to date (0), instead of changing the mod-date of the file itself. <<1/21/02; 8:05:39 AM by DW <<Add a sub-table to system.temp.radio.pingAfterUpstream, indexed on the file, containing name and url of the weblog. Handled by a new agent script that watches for this table being non-empty. <<I made it work for both the home page and category pages. One system for notifying Weblogs.Com, flowing through a single agent script. Easy to get control of. Extra benefit, it makes upstreaming report quicker on the Events page. <<12/20/01; 1:51:08 AM by JES <<Use file.writeTextFile to write the files, instead of file.writeWholeFile. This also eliminates a bunch of calculation of line-endings and Mac type/creator codes. More factoring to be done here still. <<12/19/01; 3:05:38 PM by JES <<Uncomment logging of Weblog Publish events. <<12/19/01; 11:19:39 AM by JES <<Commented out logging of Weblog Publish events. <<12/18/01; 12:48:41 AM by JES <<Revive the Weblog Publish event for the Events log. <<12/13/01; 5:19:50 PM by JES <<On MacOS X, write text files with a type of ' ' and a creator of 'text'. <<12/7/01; 2:46:31 AM by JES <<Fixed macro error: CanŐt find a sub-table named"" <<12/6/01; 11:11:51 PM by JES <<If adrcat^.flRenderHtml is not defined, initialize it to false. If adrcat^.flRenderHtml is false, do nothing. <<11/19/01; 3:08:59 PM by JES <<If this is www/index.txt -- the weblog home page, add an #flSystemPage true directive to suppress the Edit This Page button. <<11/13/01; 5:14:45 PM by JES <<Complete rewrite. This is the bottleneck for creating/updating files in the www folder, which render weblog content, both for the main weblog and archive pages, and for the category index and archive pages. <<Returns the path to the .txt file on disk. <<Parameters <<adrblog -- the address of the weblog table in the odb <<catname -- the name of the category to publish; if nil, we're publishing a weblog page <<d -- the date of the archive page to publish; if nil, we're publishing the index page <<bundle //old code <<local (startticks = clock.ticks ()) <<local (filepath = adrblog^.prefs.homePageFilePath, adrcat) <<local (flArchivePage = (d != nil), archiveFtpPath) <<local (minDate = date.set (1, 1, 1904, 0, 0, 0), maxDate = date.set (1, 1, 2040, 0, 0, 0)) <<bundle //set filepath, adrcat <<if flArchivePage //PBS 02/22/01: set the filepath for an archive day <<local (extension = "") <<bundle //get the extension from the home page filename <<if filepath endsWith "/" //default to .html <<extension = ".html" <<else <<local (homePageFileName = string.nthField (filepath, "/", string.countFields (filepath, "/"))) <<if homePageFileName contains "." <<extension = "." + string.nthField (homePageFileName, ".", string.countFields (homePageFileName, ".")) <<filepath = string.popSuffix (filepath, '/') <<local (day, month, year, hour, minute, second) <<date.get (d, @day, @month, @year, @hour, @minute, @second) <<archiveFtpPath = year + "/" + string.padWithZeros (month, 2) + "/" + string.padWithZeros (day, 2) + extension <<filepath = filepath + "/" + archiveFtpPath <<minDate = date.set (day, month, year, 0, 0, 0) //12 a.m. <<maxDate = date.set (day, month, year, 23, 59, 59) //11:59:59 p.m. <<if catname != nil <<local (folderpath = string.popTrailingFilename (filepath)) <<adrcat = @adrblog^.categories.[catname] <<filepath = folderpath + "categories/" + adrcat^.filename + ".html" <<if catname != nil //set the htmlUrl <<adrcat^.htmlUrl = user.playlist.prefs.wwwUpstreamFolderUrl + filepath <<local (f) //the local file to write to <<bundle //set f <<local (pc = file.getpathchar ()) <<local (partialpath = string.replaceall (filepath, "/", pc)) <<if (partialpath beginswith pc) and (user.radio.prefs.wwwfolder endswith pc) <<partialpath = string.delete (partialpath, 1, 1) <<f = user.radio.prefs.wwwfolder + partialpath <<local (ctdays = 0, maxdays = adrblog^.prefs.ctDaysToDisplay, lastday = -1, itemstext = "", lastitemdate) << <<local (dateList = {}, textList = {}) <<local (bodytext) <<bundle //set bodytext <<on addDay () <<if adrblog^.prefs.manila.enabled //01/25/01 JES: build homepage text for sending to a Manila site <<dateList = dateList + lastitemdate <<if system.environment.isMac //02/22/2001 JES: convert to Latin text <<textList = textList + latinToMac.macToLatin (itemstext) <<else <<textList = textList + itemstext <<local (s = string (adrblog^.prefs.daytemplate)) <<s = string.replaceall (s, "<%longDate%>", date.longstring (lastitemdate), false) <<s = string.replaceall (s, "<%shortDate%>", date.shortstring (lastitemdate), false) <<s = string.replaceall (s, "<%dayOfWeek%>", date.dayOfWeekToString (date.dayOfWeek (lastitemdate)), false) <<s = string.replaceall (s, "<%items%>", itemstext, false); itemstext = "" <<bundle //PBS 02/22/01: archive link <<local (day, month, year, hour, minute, second) <<date.get (lastitemdate, @day, @month, @year, @hour, @minute, @second) <<local (dateString = string.mid (year, 3, 2) + "/" + string.padWithZeros (month, 2) + "/" + string.padWithZeros (day, 2)) <<local (imgTag = "<img src=\"http://scripting.com/images/dailyLinkIcon.gif\" height=\"19\" width=\"13\" alt=\"Permanent link to archive for " + dateString + ".\" border=\"0\">") <<local (archiveUrl = "") <<if not flArchivePage <<archiveUrl = year + "/" + string.padWithZeros (month, 2) + "/" + string.padWithZeros (day, 2) + ".html" <<if catName != nil //PBS 03/18/01: the archive URL for category pages needs to pop up a level <<archiveUrl = "../" + archiveUrl <<local (archiveLink = html.getLink (imgTag, archiveUrl)) <<s = string.replaceAll (s, "<%archiveLink%>", archiveLink, false) <<bodytext = bodytext + s + "\r\n" <<bodytext = "\r\n" <<local (i, adrpost, s, enclosurelink) <<for i = sizeof (adrblog^.posts) downto 1 <<adrpost = @adrblog^.posts [i] <<bundle //PBS 02/22/01: check min and max dates <<if adrpost^.when < minDate <<break <<if adrpost^.when > maxDate <<continue <<bundle //only include if in category, if catname was specified <<if catname != nil <<local (flskip = true) <<if defined (adrpost^.categories) <<local (adrthiscat = @adrpost^.categories.[catname]) <<if defined (adrthiscat^) <<if adrthiscat^ <<flskip = false <<if flskip <<continue <<bundle //check date rollover <<local (when = adrpost^.when, day, month, year, hour, minute, second) <<date.get (when, @day, @month, @year, @hour, @minute, @second) <<if lastday == -1 //first time through loop <<lastday = day <<else <<if day != lastday <<ctdays++ <<if ctdays == maxdays <<break <<lastday = day <<addDay () <<bundle //set enclosurelink <<if defined (adrpost^.enclosure) <<enclosurelink = "<a href=\"" + adrpost^.enclosure.url + "\">" + radio.data.strings.enclosureImg + "</a>" <<else <<enclosurelink = "" <<local (sourcelink = "") <<bundle //set sourcelink <<if defined (adrpost^.sourceUrl) <<local (adrdata = xml.aggregator.init ()) <<local (adrsource = @adrdata^.services.[adrpost^.sourceUrl]) <<if defined (adrsource^) <<sourcelink = "<a href=\"" + adrsource^.compilation.channellink + "\" title=\"Source: " + adrsource^.compilation.channeltitle + ".\">" + adrblog^.prefs.sourceImgTag + "</a>" <<s = string (adrblog^.prefs.itemtemplate) <<s = string.replaceall (s, "<%text%>", string (adrpost^.text), false) <<s = string.replaceall (s, "<%enclosure%>", enclosurelink, false) <<s = string.replaceall (s, "<%source%>", sourcelink, false) <<s = string.replaceall (s, "<%when%>", date.timestring (adrpost^.when), false) <<itemstext = itemstext + s + "\r\n" <<lastitemdate = adrpost^.when <<if itemstext != "" //there was some text left over when loop finished <<addDay () << <<local (s = string (adrblog^.prefs.template), description = string (adrblog^.prefs.description)) <<bundle //set description if it's a category <<if catname != nil <<description = adrcat^.description <<bundle //do macro substitutions <<s = string.replaceall (s, "<%bodytext%>", bodytext, false) <<s = string.replaceall (s, "<%title%>", adrblog^.prefs.title, false) <<s = string.replaceall (s, "<%description%>", description, false) <<s = string.replaceall (s, "<%authorname%>", adrblog^.prefs.authorname, false) <<s = string.replaceall (s, "<%authormailaddress%>", adrblog^.prefs.authormailaddress, false) <<s = string.replaceall (s, "<%year%>", date.year (), false) <<s = string.replaceall (s, "<%now%>", clock.now (), false) <<bundle //PBS 02/21/01: RSS link <<local (imgTag = "<img src=\"http://scripting.com/images/xml.gif\" height=\"14\" width=\"36\" alt=\"Click here to see the XML version of this weblog.\" border=\"0\">") <<local (rssLink = html.getLink (imgTag, radio.weblog.getRssUrl (adrblog))) <<s = string.replaceAll (s, "<%rssLink%>", rssLink, false) <<bundle //PBS 02/23/01: Radio badge <<local (imgTag) <<if defined (user.html.glossary.radioBadge) <<imgTag = user.html.glossary.radioBadge <<else //hard-code, just in case a beta user doesn't have the glossary entry <<imgTag = "<img src=\"http://scripting.com/images/radioUserlandBadge2.gif\" width=\"88\" height=\"31\" border=\"0\" alt=\"This site is edited with Radio UserLand, the first personal Web Application server for Windows and Macintosh.\">" <<local (link = html.getLink (imgTag, "http://radiodiscuss.userland.com/")) <<s = string.replaceAll (s, "<%radioBadge%>", link) << <<if system.environment.isMac //02/22/2001 JES: iso8859 encode the HTML rendering <<s = string.iso8859encode (s, @html.data.iso8859.mac) <<else <<s = string.iso8859encode (s, @html.data.iso8859.win) <<file.surefilepath (f) <<file.writewholefile (f, s, 'TEXT', user.html.prefs.textFileCreator) //02/22/2001 JES: added type/creator << <<if adrblog^.prefs.flPublicBlog <<if not flArchivePage <<thread.callScript (@radio.weblog.notify, {adrblog}) <<bundle //do FTP and Manila mirroring <<if adrblog^.prefs.ftp.enabled <<local (fname = filepath) <<fname = string.nthfield (fname, "/", string.countfields (fname, "/")) <<if flArchivePage <<fname = archiveFtpPath <<if catname != nil <<fname = "categories/" + fname <<adrcat^.htmlUrl = adrblog^.prefs.ftp.url + "categories/" + adrcat^.filename + ".html" <<radio.weblog.uploadFile (adrblog, fname, s, adrconnection) <<if adrblog^.prefs.manila.enabled //01/25/01 JES: send new homepage(s) text to Manila site <<if not flArchivePage <<if sizeOf (dateList) != 0 <<if catname == nil <<radio.weblog.uploadManila (adrblog, dateList, textList) <<if user.radio.prefs.flLogWeblogPublish <<local (url = filepath) <<if not (url beginswith "/") <<url = "/" + url <<local (htmltext = "<a href=\"" + url + "\">" + adrblog^.prefs.title + "</a>.") <<radio.log.add ("Weblog publish", htmltext, startticks) <<Archive <<8/15/01; 6:50:56 PM by JES <<Changed macro delimiters from { and } to <% and %>. <<3/18/01; 4:07:28 PM by PBS <<Fixed the incorrect archive link URL on category pages. <<3/18/01; 2:50:03 PM by PBS <<The default minimum and maximum date strings didn't work on some international systems -- there was an error coercing to date. So use date.set instead. <<3/2/01; 12:35:00 PM by JES <<Use the same file extension for writing archive files as was specified for the home page. <<3/1/01; 11:22:56 PM by JES <<Respect user.html.prefs.textFileCreator when writing out the file. <<2/27/01; 4:44:07 PM by PBS <<Get the Radio badge from the global glossary. <<2/24/01; 1:57:57 AM by JES <<Fixed terminology mismatch; changed Blog Publish to Weblog Publish. <<2/23/01; 6:12:56 PM by PBS <<New macro: {radioBadge} adds a Radio badge. <<2/23/01; 3:27:05 PM by PBS <<Use xml.gif and dailyLinkIcon.gif on UserLand servers -- don't attempt to upload or upstream. <<2/22/01; 9:32:15 PM by JES <<Convert accented characters in the HTML rendering to entities. If this is a Mac, convert text to Latin for Manila mirroring. <<2/22/01; 5:06:08 PM by JES <<adrconnection is a new optional parameter, the connection table for an FTP session already opened. This is passed to radio.weblog.uploadFile. <<2/22/01; 11:49:14 AM by PBS <<d is an optional parameter, a date in an archive day that you want to publish. <<archiveLink macro points to the archive page for a day. <<2/21/01; 4:26:46 PM by PBS <<New macro: rssLink gets you an XML button that links to the RSS version of your weblog. <<1/25/01; 11:46:14 PM by JES <<Implement mirrroring on Manila sites. <<1/25/01; 2:49:06 PM by DW <<Set the htmlUrl for categories. Give precedence to the FTP url over the upstreaming url. <<1/25/01; 10:53:08 AM by DW <<Added alt attributes for images, working towards validation. <<Reorganize code. <<Do notification in a thread. (So it can wait for an ignored response while we're FTPing.) <<Add optional param that allows the rendering to be saved in a different file but in the same folder as the home page. <<1/24/01; 5:54:25 PM by DW <<If an item has a source, link to it through the {enclosure} macro. If it has no source, the icon isn't displayed. <<1/19/01; 3:24:14 PM by DW <<If an item has an enclosure, link to it through the {enclosure} macro. If it has no enclosure, the icon isn't displayed. local (startticks = clock.ticks ()); local (f, adrcat); local (flIndexPage = (typeOf (d) == unknownType) ); if catname != nil { //set adrcat adrcat = @adrblog^.categories.[catname]; if not defined (adrcat^.flRenderHtml) { //initialize to false adrcat^.flRenderHtml = false}; if not adrcat^.flRenderHtml { //do nothing return ("")}}; bundle { //set f on getArchiveFilePath (relfolder, d) { //get the path to an archive file for a given date local (day, month, year, hour, minute, second); date.get (d, @day, @month, @year, @hour, @minute, @second); month = string.padWithZeros (month, 2); day = string.padWithZeros (day, 2); return (relfolder + year + "/" + month + "/" + day + ".txt")}; if flIndexPage { if catname == nil { //weblog home page f = radio.file.getAbsolutePath (adrblog^.prefs.homePageFilePath); bundle { //add it to system.temp.radio.pingAfterUpstream if true { //adrblog^.prefs.flPublicBlog local (adrtable = @system.temp.radio.pingAfterUpstream.[f]); new (tabletype, adrtable); adrtable^.flUpstreamed = false; adrtable^.name = adrblog^.prefs.title; adrtable^.url = radio.weblog.getUrl (adrblog)}}} else { //category home page f = radio.file.getAbsolutePath (adrblog^.prefs.htmlCategoryFolderPath + adrcat^.fileName + "/" + "index.txt"); bundle { //add it to system.temp.radio.pingAfterUpstream if adrcat^.flNotifyWeblogsCom { local (adrtable = @system.temp.radio.pingAfterUpstream.[f]); new (tabletype, adrtable); adrtable^.flUpstreamed = false; adrtable^.name = adrcat^.displayName; adrtable^.url = adrcat^.htmlUrl}}}} else { //archive page if catname == nil { //weblog archive page local (homeRelPath = adrblog^.prefs.homePageFilePath); local (homeFileName = string.nthField (homeRelPath, "/", string.countFields (homeRelPath, "/"))); local (relFolder = string.mid (homeRelPath, 1, sizeOf (homeRelPath) - sizeOf (homeFileName))); f = radio.file.getAbsolutePath (getArchiveFilePath (relFolder, d))} else { //category archive page local (relFolder = adrblog^.prefs.htmlCategoryFolderPath + adrcat^.fileName + "/"); f = radio.file.getAbsolutePath (getArchiveFilePath (relfolder, d))}}}; if file.exists (f) { //touch the file <<file.setModified (f, clock.now ()) local (adrfile); if radio.file.getFileAttributes (f, @adrfile) { adrfile^.upstream.whenLastUploaded = date (0)}} else { //build the text of the file, and write it to disk local (filetext); bundle { //build filetext local (eol); bundle { //set line ending characters: eol if system.environment.isMac { if system.environment.isCarbon { eol = "\n"} else { //classic eol = "\r"}} else { //windows eol = "\r\n"}}; on add (s) { filetext = filetext + s + eol}; local (startMacro, endMacro); bundle { //set startMacro, endMacro -- the macro delimiter strings local (adrsite = @radio.data.website); local (adrsiteprefs = @adrsite^.["#prefs"]); startMacro = adrsiteprefs^.macroStartCharacters; endMacro = adrsiteprefs^.macroEndCharacters}; on addMacro (s) { add (startMacro + s + endMacro)}; add ("#flHomePage true"); //all weblog pages use the #homePageTemplate if flIndexPage { //#flArchivePage is false add ("#flArchivePage false")} else { //#flArchivePage is true add ("#flArchivePage true")}; if flIndexPage and catname == nil { //#flSystemPage is true add ("#flSystemPage true")}; <<if catname != nil //add #categoryName directive <<add ("#categoryName \"" + catname + "\"") if not flIndexPage { //add #archiveDate directive local (day, month, year, hour, minute, second); date.get (d, @day, @month, @year, @hour, @minute, @second); month = string.padWithZeros (month, 2); day = string.padWithZeros (day, 2); local (datestring = year + "/" + month + "/" + day); add ("#archiveDate \"" + datestring + "\"")}; addMacro ("radio.macros.viewWeblog ()")}; file.sureFilePath (f); file.writeTextFile (f, filetext)}; if not flIndexPage { if adrblog^.prefs.flArchiveMonthly { bundle { //set f on getArchiveFilePath (relfolder, d) { //get the path to the monthly archive file for a given date local (day, month, year, hour, minute, second); date.get (d, @day, @month, @year, @hour, @minute, @second); month = string.padWithZeros (month, 2); return (relfolder + year + "/" + month + "/" + "index.txt")}; if catname == nil { //weblog monthly archive page local (homeRelPath = adrblog^.prefs.homePageFilePath); local (homeFileName = string.nthField (homeRelPath, "/", string.countFields (homeRelPath, "/"))); local (relFolder = string.mid (homeRelPath, 1, sizeOf (homeRelPath) - sizeOf (homeFileName))); f = radio.file.getAbsolutePath (getArchiveFilePath (relFolder, d))} else { //category monthly archive page local (relFolder = adrblog^.prefs.htmlCategoryFolderPath + adrcat^.fileName + "/"); f = radio.file.getAbsolutePath (getArchiveFilePath (relfolder, d))}}; if file.exists (f) { //touch the file local (adrfile); if radio.file.getFileAttributes (f, @adrfile) { adrfile^.upstream.whenLastUploaded = date (0)}} else { //build the text of the file, and write it to disk local (filetext); bundle { //build filetext local (eol); bundle { //set line ending characters: eol if system.environment.isMac { if system.environment.isCarbon { eol = "\n"} else { //classic eol = "\r"}} else { //windows eol = "\r\n"}}; on add (s) { filetext = filetext + s + eol}; local (startMacro, endMacro); bundle { //set startMacro, endMacro -- the macro delimiter strings local (adrsite = @radio.data.website); local (adrsiteprefs = @adrsite^.["#prefs"]); startMacro = adrsiteprefs^.macroStartCharacters; endMacro = adrsiteprefs^.macroEndCharacters}; on addMacro (s) { add (startMacro + s + endMacro)}; add ("#flArchivePage false"); add ("#flMonthlyArchive true"); local (day, month, year, hour, minute, second); date.get (d, @day, @month, @year, @hour, @minute, @second); month = string.padWithZeros (month, 2); local (datestring = year + "/" + month + "/01"); add ("#archiveDate \"" + datestring + "\""); addMacro ("radio.macros.viewWeblog ()")}; file.sureFilePath (f); file.writeTextFile (f, filetext)}}; if adrblog^.prefs.flArchiveWeekly { local (startWeekDate); bundle { //set f on getFirstDayOfWeek (archiveDate) { //get the first day of the week (Sunday) local (counter, dayOfWeek); dayOfWeek = date.dayOfWeek (archiveDate); for counter = dayOfWeek downto 2 { archiveDate = date.yesterday (archiveDate)}; return (archiveDate)}; on getArchiveFilePath (relfolder, d) { //get the path to the weekly archive file for a given date startWeekDate = getFirstDayOfWeek (d); local (day, month, year, hour, minute, second, week); date.get (startWeekDate, @day, @month, @year, @hour, @minute, @second); week = date.weekInYear (startWeekDate); week = string.padWithZeros (week, 2); return (relfolder + year + "/week" + week + ".txt")}; if catname == nil { //weblog weekly archive page local (homeRelPath = adrblog^.prefs.homePageFilePath); local (homeFileName = string.nthField (homeRelPath, "/", string.countFields (homeRelPath, "/"))); local (relFolder = string.mid (homeRelPath, 1, sizeOf (homeRelPath) - sizeOf (homeFileName))); f = radio.file.getAbsolutePath (getArchiveFilePath (relFolder, d))} else { //category weekly archive page local (relFolder = adrblog^.prefs.htmlCategoryFolderPath + adrcat^.fileName + "/"); f = radio.file.getAbsolutePath (getArchiveFilePath (relfolder, d))}}; if file.exists (f) { //touch the file local (adrfile); if radio.file.getFileAttributes (f, @adrfile) { adrfile^.upstream.whenLastUploaded = date (0)}} else { //build the text of the file, and write it to disk local (filetext); bundle { //build filetext local (eol); bundle { //set line ending characters: eol if system.environment.isMac { if system.environment.isCarbon { eol = "\n"} else { //classic eol = "\r"}} else { //windows eol = "\r\n"}}; on add (s) { filetext = filetext + s + eol}; local (startMacro, endMacro); bundle { //set startMacro, endMacro -- the macro delimiter strings local (adrsite = @radio.data.website); local (adrsiteprefs = @adrsite^.["#prefs"]); startMacro = adrsiteprefs^.macroStartCharacters; endMacro = adrsiteprefs^.macroEndCharacters}; on addMacro (s) { add (startMacro + s + endMacro)}; add ("#flArchivePage false"); add ("#flWeeklyArchive true"); local (day, month, year, hour, minute, second); date.get (startWeekDate, @day, @month, @year, @hour, @minute, @second); month = string.padWithZeros (month, 2); day = string.padWithZeros (day, 2); local (datestring = year + "/" + month + "/" + day); add ("#archiveDate \"" + datestring + "\""); addMacro ("radio.macros.viewWeblog ()")}; file.sureFilePath (f); file.writeTextFile (f, filetext)}}}; if user.radio.prefs.flLogWeblogPublish { //add to the events log local (url, linktext); if adrcat == nil { url = radio.weblog.getUrl (); linktext = adrblog^.prefs.title} else { if defined (adrcat^.rssUrl) { url = adrcat^.rssUrl} else { url = ""}; linktext = nameOf (adrcat^); if defined (adrcat^.displayName) { linktext = adrcat^.displayName}}; if not flIndexPage { linktext = linktext + "; " + date.shortString (d)}; local (htmltext = "<a href=\"" + url + "\">" + linktext + "</a>."); radio.log.add ("Weblog publish", htmltext, startticks)}; bundle { //bump hourlyUpdate counter -- 6/5/02 by DW local (day, month, year, hour, minute, second); date.get (clock.now (), @day, @month, @year, @hour, @minute, @second); adrblog^.stats.hourlyUpdateCounts.[string.padwithzeros (hour, 2)]++}; return (f)}; <<bundle //test code <<bundle //publish one category <<publish (catname:"michegas") <<bundle //publish home page <<publish () <<bundle //publish today <<publish (d:clock.now ()) <<bundle //publish all categories <<local (adr) <<for adr in @weblogData.categories <<msg (nameof (adr^)) <<publish (catname:nameof (adr^)) <<bundle //publish today for all categories <<local (adr) <<for adr in @weblogData.categories <<msg (nameof (adr^)) <<publish (catname:nameof (adr^), d:clock.now ())
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.