Monday, November 08, 2010 at 12:04 AM.
system.verbs.builtins.mainResponder.discuss.listDay
on listDay (d, bgColor="ivory", otherColor="beige", tableWidth=425, pta=nil, headerColor="black", headerTextColor=nil, cssPrefix="") { <<List the discussion group messages for a single day. <<Changes: <<Sat, 27 Feb 1999 23:16:13 GMT by AR <<Modified call to mainresponder.calendar.getdayaddress so it doesn't create the calendar entry <<Tweaked the html code to use valign=middle instead of valign=center <<Mon, 01 Mar 1999 15:01:02 GMT by AR <<The script's parameter must be a date type - otherwise a scripterror will be thrown. <<To convert other date representations to date type, take a look at mainResponder.calendar.getAddressDay and mainResponder.calendar.pathArgsToDate <<Sat, 06 Mar 1999 17:08:06 GMT by AR <<Commented out code for caching table lines. <<Wed, 26 May 1999 01:10:41 GMT by AR <<Added new optional paramaters bgcolor, othercolor, and tablewidth to allow the calling script more influence over the layout of the table. <<Changed value of membershipGroup from config.mainresponder.globals.defaultMembershipGroup to pta^.responderAttributes.defaultMembershipGroup. <<Tue, Aug 3, 1999 at 12:39:52 PM by PBS <<Added optional pta parameter. <<Since member names are often repeated, added a local table to cache the names while building the page, to avoid unnecessary calls out. <<10/30/99; 1:12:22 PM by PBS <<headerColor is a new optional parameter for specifying the color of the header at the top of a discussion group messages list. If not specified, the default is black, which is current behavior. <<headerTextColor is a new optional parameter for specifying the color of the text inside the header. If not specified, the default is the parameter in bgColor. <<In both cases, default behavior applies if you don't specify the parameter. <<04/12/00; 1:01:38 PM by JES <<Localized column headers and table header using mainResponder.getString <<05/30/00; 5:22:03 PM by PBS <<cssPrefix is a new optional parameter. If supplied, then CSS classes are added to the tables, rows, cells, and font tags. <<05/31/00; 3:50:03 PM by PBS <<Typo fix: there was a colspan=6 when there are only 5 columns. <<06/01/00; 9:04:38 PM by JES <<merged CSS code with localization code if pta == nil { pta = html.getPageTableAddress ()}; local (adrData = mainResponder.discuss.openRoot (pta)); local (adrCal = @adrData^.calendar); local (adrMsgs = @adrData^.messages); local (htmlText = "", indentLevel = 0); local (adrDay, i, ct); local (membershipGroup = pta^.responderAttributes.defaultMembershipGroup); local (msgReaderUrl = pta^.responderAttributes.urls^.discussMsgReader); local (flCss = (cssPrefix != "")); //if true, emit CSS classes, otherwise don't local (nameTable); new (tableType, @nameTable); on add (s) { htmlText = htmlText + string.filledString ("\t", indentLevel) + s + "\r"}; <<on td (s, align="") <<add ("<td nowrap " + align + " valign=\"middle\"><font size=\"-1\"> " + s + " </font></td>") on td (s, align="", class="", height="") { local (fontClass = ""); if (flCss) and (class != "") { class = cssPrefix + class; fontClass = " class=\"" + class + "Font\""; class = " class=\"" + class + "\""}; if height != "" { height = " height=\"" + height + "\""}; if align != "" { align = " " + align}; add ("<td nowrap" + align + " valign=\"middle\"" + class + height + "><font size=\"-1\"" + fontClass + "> " + s + " </font></td>")}; on shortenString (s, maxLen=35) { <<if sizeOf (s) <= maxLen <<return (s) return (string.mid (s, 1, maxLen - 3) + "...")}; try { //get the address of this day in the calendar structure for this discussion group. adrDay = mainResponder.calendar.getDayAddress (adrCal, d, flCreate:false); ct = sizeOf (adrDay^)} else { ct = 0}; //no messages yet, shortcut building of message listing <<add ("<table cellpadding=\"0\" cellspacing=\"1\">"); indentLevel++ bundle { //start the table if flCss { add ("<table cellpadding=\"0\" cellspacing=\"1\" class=\"" + cssPrefix + "Table\">"); indentLevel++} else { add ("<table cellpadding=\"0\" cellspacing=\"1\">"); indentLevel++}}; <<bundle //add the date on a black background <<add ("<tr><td height=\"10\"><td> </td></tr>") //blank spacer row <<add ("<tr bgcolor=\"" + headerColor + "\">"); indentLevel++ //PBS 10/30/99: variable header color, black by default <<if headerTextColor == nil //PBS 10/30/99: the header text color may also be specified <<headerTextColor = bgColor <<add ("<td height=\"24\" width=\"" + tableWidth + "\" colspan=\"6\"><font color=\"" + headerTextColor + "\" size=\"-0\"> <b> " + mainResponder.localization.longDateString (d, pta) + " </b></font></td>") // 4/13/00 JES: localized the date <<add ("</tr>"); indentLevel-- bundle { //add the date on a black background if flCss { //header row add ("<tr bgcolor=\"" + headerColor + "\" class=\"" + cssPrefix + "SeparatorRow\">"); indentLevel++} //PBS 10/30/99: variable header color, black by default else { add ("<tr bgcolor=\"" + headerColor + "\">"); indentLevel++}; //PBS 10/30/99: variable header color, black by default if headerTextColor == nil { //PBS 10/30/99: the header text color may also be specified headerTextColor = bgColor}; if flCss { //header cell -- 06/01/00 JES: localized date string in new code add ("<td height=\"24\" width=\"" + tableWidth + "\" colspan=\"5\" class=\"" + cssPrefix + "SeparatorCell\"><font color=\"" + headerTextColor + "\" size=\"-0\" class=\"" + cssPrefix + "SeparatorFont\"> <b> " + mainResponder.localization.longDateString (d, pta) + " </b></font></td>")} //PBS 05/31/00: 5 columns, not 6 else { add ("<td height=\"24\" width=\"" + tableWidth + "\" colspan=\"5\"><font color=\"" + headerTextColor + "\" size=\"-0\"> <b> " + mainResponder.localization.longDateString (d, pta) + " </b></font></td>")}; //PBS 05/31/00: 5 columns, not 6 add ("</tr>"); indentLevel--}; bundle { //add column titles <<bundle // 06/01/00 JES: old code <<add ("<tr bgcolor=\"" + otherColor + "\">"); indentLevel++ <<add ("<td height=\"28\"></td>") //a dummy table cell to establish row height if flCss { //titles row add ("<tr bgcolor=\"" + otherColor + "\" class=\"" + cssPrefix + "TitleRow\">"); indentLevel++} else { add ("<tr bgcolor=\"" + otherColor + "\">"); indentLevel++}; <<4/13/00; 3:53:31 PM by JES -- localized column headers td ("<b>" + mainResponder.getString ("listHeaders.shortNum") + "</b>", align:"align=\"center\"", class:"MessageLinkTitle", height:28); td ("<b>" + mainResponder.getString ("listHeaders.posted") + "</b>", align:"align=\"center\"", class:"PostedTitle"); td ("<b>" + mainResponder.getString ("listHeaders.ct") + "</b>", align:"align=\"center\"", class:"ReadsTitle"); td ("<b>" + mainResponder.getString ("listHeaders.author") + "</b>", class:"AuthorTitle"); td ("<b>" + mainResponder.getString ("listHeaders.subject") + "</b>", class:"SubjectTitle"); add ("</tr>"); indentLevel--}; for i = ct downTo 1 { //loop through messages in reverse-chronological order local (adrItem, memberName); adrItem = @adrMsgs^.[nameOf (adrDay^ [i])]; bundle { //was this message deleted? If so, skip it. if defined (adrItem^.flDeleted) { <<The flDeleted flag may not exist: it's necessary to test for existence before testing whether it's true or false. if adrItem^.flDeleted { continue}}}; bundle { //message row if flCss { add ("<tr bgcolor=\"" + otherColor + "\" class=\"" + cssPrefix + "MessageRow\">"); indentLevel++} else { add ("<tr bgcolor=\"" + otherColor + "\">"); indentLevel++}}; bundle { //add the message number, it's the link local (url = msgReaderUrl + adrItem^.msgNum); td ("<a href=\"" + url + "\">" + adrItem^.msgNum + "</a>", align:"align=\"center\"", class:"MessageLink", height:28)}; bundle { //add post time and read count. td (mainResponder.localization.shortTimeString (adrItem^.postTime), align:"align=\"center\"", class:"Posted"); // 4/13/00 by JES: localized postTime td (adrItem^.ctReads, align:"align=\"right\"", class:"CountReads")}; bundle { //get the name of the member who posted this message. if defined (nameTable.[adrItem^.member]) { //cache member names in a local table, since repetitions are likely memberName = nameTable.[adrItem^.member]} else { memberName = mainResponder.members.getMemberName (membershipGroup, adrItem^.member); nameTable.[adrItem^.member] = memberName}}; bundle { //add the name of the member who posted this message. if sizeOf (memberName) > 20 { td (shortenString (memberName, 20), class:"Author")} else { td (memberName, class:"Author")}}; bundle { //add the subject of the message. if sizeOf (adrItem^.subject) > 40 { td (shortenString (adrItem^.subject, 40), class:"Subject")} else { td (adrItem^.subject, class:"Subject")}}; add ("</tr>"); indentLevel--; }; <<bundle //code to implement caching (deactivated) <<if false //defined (adritem^.htmlcache) <<local (oldindentlevel = indentlevel) <<indentlevel = 0 <<add (adritem^.htmlcache) <<indentlevel = oldindentlevel <<else <<on shortenstring (s, maxlen=35) <<if sizeof (s) <= maxlen <<return (s) <<return (string.mid (s, 1, maxlen - 3) + "...") <<local (ixhtmltext = sizeof (htmltext)) <<add ("<tr bgcolor=\"" + othercolor + "\">"); indentlevel++ <<add ("<td height=\"28\"></td>") //a dummy table cell to establish row height <<bundle //add the message number, it's the link <<local (url = pta^.responderAttributes.urls^.discussMsgReader + adritem^.msgnum) <<td ("<a href=\"" + url + "\">" + adritem^.msgnum + "</a>", align:"align=\"center\"") <<td (date.timeString (adritem^.posttime, includeSeconds:false), align:"align=\"center\"") <<td (adritem^.ctreads, align:"align=\"right\"") <<local (membername = mainResponder.members.getMemberName (membershipGroup, adritem^.member)) <<td (shortenstring (membername, 20)) <<td (shortenstring (adritem^.subject, 40)) <<add ("</tr>"); indentlevel-- << <<adritem^.htmlcache = string.delete (htmltext, 1, ixhtmltext) <<adritem^.htmlcache = string.delete (adritem^.htmlcache, sizeof (adritem^.htmlcache), 1) add ("</table>"); indentLevel--; 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.