Monday, November 08, 2010 at 12:04 AM.
system.verbs.builtins.mainResponder.calendar.draw
on draw (adrcalendar=nil, urlprefix="", colwidth=32, rowheight=22, tableborder=0, bgcolor=nil, monthYearTemplate="<font size=\"+2\" face=\"helvetica,arial\" color=\"black\"><b><center>***</center></b></font>", dayNameTemplate="<font size=\"-1\" color=\"gray\"><center>***</center></font>", dayTemplate="<font size=\"+0\" color=\"black\"><center><b>***</b></center></font>", curdate=clock.now (), urldelimiter="/", firstDayOfWeek=1, adrMonthNamesList=nil, adrAbbrevDayOfWeekNamesList=nil, cssPrefix=nil) { <<Change Notes <<Original script-based code used before Frontier 6.1 <<on draw ( \ <<adrcalendar=nil, \ <<urlprefix="", \ <<colwidth=32, \ <<rowheight=22, \ <<tableborder=0, \ <<bgcolor=nil, \ <<monthYearTemplate="<font size=\"+2\" face=\"helvetica,arial\" color=\"black\"><b><center>***</center></b></font>", \ <<dayNameTemplate="<font size=\"-1\" color=\"gray\"><center>***</center></font>", \ <<dayTemplate="<font size=\"+0\" color=\"black\"><center><b>***</b></center></font>", \ <<curdate=clock.now ()) << <<Changes <<10/10/98; 8:15:56 AM by DW <<Changed the structure of adrcalendar^ <<Made it so that it can directly work with the structure of scriptingNews.root <<No need to have another data structure floating around, to maintain <<This will break the DaveNet-calendar demo... So what? <<The advantage is that we can replicate this structure in other sites. <<12/30/98; 6:55:16 AM by DW <<bgcolor param defaults to nil. if it's not specified, we don't put out a bgcolor attribute for table cells. <<Sun, 28 Feb 1999 00:26:18 GMT by AR <<Changed the addday sub-routine to handle the case correctly when curdate does not have an entry in the calendar <<Mon, 01 Mar 1999 12:29:32 GMT by AR <<The curdate parameter must always be a date type - otherwise we'll throw a scripterror! <<Removed some commented-out old code. << <<local (bgcolorstring = "") <<if bgcolor != nil <<bgcolorstring = "bgcolor=\"" + bgcolor + "\"" << <<local (htmltext = "", indentlevel = 0) <<on add (s) <<htmltext = htmltext + string.filledString ("\t", indentlevel) + s + "\r" <<try <<curdate = date (curdate) <<else <<curdate = clock.now () <<local (day, month, year, hour, minute, second) <<date.get (curdate, @day, @month, @year, @hour, @minute, @second) <<local (monthyear = date.monthToString (month) + " " + year) <<add ("<table cellspacing=\"0\" border=\"" + tableborder + "\">"); indentlevel++ <<add ("<tr>"); indentlevel++ <<add ("<td " + bgcolorstring + " colspan=\"7\">"); indentlevel++ <<add (string.replaceAll (string (monthYearTemplate), "***", monthyear)) <<add ("</td>"); indentlevel-- <<add ("</tr>"); indentlevel-- <<bundle //add days of week <<local (i) <<add ("<tr height=\"" + rowheight + "\">"); indentlevel++ <<for i = 1 to 7 <<local (dayname = string.mid (date.dayOfWeekToString (i), 1, 3)) <<add ("<td " + bgcolorstring + " width=\"" + colwidth + "\">"); indentlevel++ <<add (string.replaceAll (string (dayNameTemplate), "***", dayname)) <<add ("</td>"); indentlevel-- <<add ("</tr>"); indentlevel-- << <<bundle //add the days of the month, 1, 2, 3, etc. <<on addday (daynum) <<local (link = daynum) <<if daynum == day <<link = "<b>" + daynum + "</b>" <<else <<try <<local (yearstring = string (year)) <<local (monthstring = string.padwithzeros (month, 2)) <<local (daystring = string.padwithzeros (daynum, 2)) <<local (adritem = @adrcalendar^.[yearstring].[monthstring].[daystring]) <<if defined (adritem^) <<local (url = yearstring + "/" + monthstring + "/" + daystring) <<link = "<a href=\"" + urlprefix + url + "\">" + daynum + "</a>" <<add ("<td " + bgcolorstring + " height=\"" + rowheight + "\">" + string.replaceAll (string (dayTemplate), "***", link) + "</td>") <<local (startday = date.dayOfWeek (date.set (1, month, year, 0, 0, 0)), i, daynum = 1) <<local (daysinmonth = date.daysInMonth (curdate)) <<add ("<tr>"); indentlevel++ <<if startday > 1 <<add ("<td " + bgcolorstring + " colspan=\"" + (startday - 1) + "\"> </td>") <<for i = startday to 7 <<addday (daynum++) <<add ("</tr>"); indentlevel-- <<while daynum <= daysinmonth <<add ("<tr>"); indentlevel++ <<for i = 1 to 7 <<if daynum > daysinmonth <<add ("<td " + bgcolorstring + " colspan=\"" + (8 - i) + "\"> </td>") <<break <<addday (daynum++) <<add ("</tr>"); indentlevel-- <<add ("</table>"); indentlevel-- <<return (htmltext) <<Monday, April 17, 2000 at 8:20:48 AM by AR <<Added three new parameters to the kernel code in Frontier 6.2b7 <<firstDayOfWeek is an optional number between 1 and 7 (inclusive) that determines which day of week will be displayed in the first column of the calendar. The default is 1, i.e. Sunday. <<adrMonthNamesList is the optional address of a list of month names. The default is nil, meaning we should call date.monthToString instead of trying to access the list. <<adrAbbrevDayOfWeekNamesList is the optional address of a list of abbreviated names of week days. The default is nil, meaning we should call date.dayOfWeekToString instead of trying to access the list. <<Wed, May 24, 2000 at 1:23:22 PM by AR <<Added new cssPrefix to the kernel code in Frontier 6.2b15 on oldKernelCall (adrcalendar, urlprefix, colwidth, rowheight, tableborder, bgcolor, monthYearTemplate, dayNameTemplate, dayTemplate, curdate, urldelimiter) { //for 6.2b6 and below kernel (html.drawcalendar)}; on kernelCall (adrcalendar, urlprefix, colwidth, rowheight, tableborder, bgcolor, monthYearTemplate, dayNameTemplate, dayTemplate, curdate, urldelimiter, firstDayOfWeek, adrMonthNamesList, adrAbbrevDayOfWeekNamesList, cssPrefix) { //for 6.2b15 and above kernel (html.drawcalendar)}; if date.versionLessThan (Frontier.version (), "6.2b15") { return (oldKernelCall (adrcalendar, urlprefix, colwidth, rowheight, tableborder, bgcolor, monthYearTemplate, dayNameTemplate, dayTemplate, curdate, urldelimiter))} else { return (kernelCall (adrcalendar, urlprefix, colwidth, rowheight, tableborder, bgcolor, monthYearTemplate, dayNameTemplate, dayTemplate, curdate, urldelimiter, firstDayOfWeek, adrMonthNamesList, adrAbbrevDayOfWeekNamesList, cssPrefix))}}; <<bundle //test code <<bundle //call once <<local (s, ix, adr = @scratchpad.testtext, ct = clock.ticks ()) <<s = draw (@spicyNoodlesManilaWebsite, bgcolor:"white", tableborder:10, dayTemplate:"<font color=\"black\"><center>***</center></font>", urlprefix:"/") <<s = draw (@spicyNoodlesManilaWebsite, bgcolor:"white", tableborder:10, dayTemplate:"<font color=\"black\"><center>***</center></font>", urlprefix:"/", cssprefix:"spicy") <<msg (clock.ticks () - ct) <<wp.newTextObject (s, adr) <<edit (adr) <<bundle //call once <<local (s, adr = @scratchpad.testtext) <<s = draw ( \ <<@spicyNoodlesManilaWebsite, \ <<"", \ <<32, \ <<22, \ <<0, \ <<nil, \ <<"<font size=\"+2\" face=\"helvetica,arial\" color=\"black\"><b><center>***</center></b></font>", \ <<"<font size=\"-1\" color=\"gray\"><center>***</center></font>", \ <<"<font size=\"+0\" color=\"black\"><center><b>***</b></center></font>", \ <<clock.now (), \ <<"/") <<wp.newTextObject (s, adr) <<edit (adr) <<bundle //loop (memory leaks) <<local (ix, s, adr = @scratchpad.testtext) <<local (startmem = memAvail ()) <<for ix = 1 to 1000 <<s = draw (@spicyNoodlesManilaWebsite, urlprefix:"-") <<msg (ix + " - " + memAvail ()) <<local (memlost = double (startmem - memAvail ()) / 1000.0) <<wp.newTextObject (s, adr) <<edit (adr) <<dialog.notify (memlost + " bytes lost per iteration.") <<bundle //loop (timing) <<local (ix, max=1000, s, adr = @scratchpad.testtext, ct = clock.ticks ()) <<for ix = 1 to max <<s = draw (@spicyNoodlesManilaWebsite, urlprefix:"-") <<msg (double (clock.ticks () - ct) / double (max)+ " ticks") <<wp.newTextObject (s, adr) <<edit (adr) <<webbrowser.displaytext (draw (adrcalendar:@spicyNoodlesManilaWebsite, urlprefix:"http://spicynoodles.com/", curdate: clock.now (), cssprefix:"spicy"))
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.