[Seaside] Web Calendar for Seaside

Derek Brans seaside@lists.squeakfoundation.org
Thu, 21 Nov 2002 17:12:30 -0800


--Boundary_(ID_Eiqmi3hP0XgHvr3lmIrshA)
Content-type: text/plain; charset=US-ASCII; format=flowed
Content-transfer-encoding: 7BIT

Hi Seasiders,
As per a suggestion from Avi, I've been plugging away at a Web Calendar 
for Seaside modeled after Kalendus on Source Forge.  It is code-named 
"SandCaster" because sand is related to time and the seaside.  Here's 
what I have so far:
http://24.68.112.62:8000/sandcaster/    (if my laptop is online)

Installation instructions follow at the end of the email.

I am surprised at how easy it is to do many things in Seaside that are 
much harder to do in php.  So job well done to Avi and Julian and others 
who built the Seaside framework.  I hope to produce a tutorial once I 
get some implementation feedback from you guys.

There are some nice widgets that can be harvested from this project:
- TabComponent
- general framework for editing common objects like collections, dates, 
times and anything else you define an editor for.  This has proven 
pretty powerful.

I would like some design feedback.  I don't think I'm making full use of 
the Continuation framework in Seaside.  Maybe this isn't needed in my 
application yet?  I am kind of confused about how to use WAComponents 
and WAViews effectively.

Still to be added: (recurrences, all-day and multi-day events, and nifty 
features).

Installation intstructions (not tested yet):
Install Mark Guzdial's SmartFileDictionary:  
http://guzdial.cc.gatech.edu/st/SmartFileDictionary.st (events are 
written to disk in a file named events.fd.
Install the attached DVS package WebCalendar.st.

The application is registered on your server under the name 'sandcaster'.
Cheers,
Derek

--Boundary_(ID_Eiqmi3hP0XgHvr3lmIrshA)
Content-type: application/text; x-mac-creator=522A6368; x-unix-mode=0644;
 x-mac-type=54455854; name=WebCalendar.st
Content-transfer-encoding: quoted-printable
Content-disposition: attachment; filename=WebCalendar.st

"WebCalendar"!=0D=0A!WATableRow=20methodsFor:=20'*WebCalendar'=20stamp:=20=
'djb=2011/17/2002=2020:00'!=0D=0AaddHeader:=20anObject=0D=0A=09^=20self=20=
add:=20((WATagView=20tag:=20#tableHeading)=20add:=20anObject;=20=
yourself)!=20!=0D=0A=0D=0A!WATableRow=20methodsFor:=20'*WebCalendar'=20=
stamp:=20'djb=2011/17/2002=2020:00'!=0D=0AaddHeader:=20anObject=20span:=20=
anInteger=0D=0A=09^=20self=20add:=20((WATagView=20tag:=20#tableHeading)=20=
add:=20anObject;=20=0D=0A=09=09attributeAt:=20'colspan'=20put:=20=
anInteger;=20yourself)!=20!=0D=0A=0D=0A!WATable=20methodsFor:=20=
'*WebCalendar'=20stamp:=20'djb=2011/17/2002=2019:48'!=0D=0A=
addRowWithHeadings:=20anArray=20cssClass:=20aString=0D=0A=09self=20add:=20=
=0D=0A=09=09(WATableRow=20new=20addAll:=0D=0A=09=09=09(anArray=20=
collect:=0D=0A=09=09=09=09[:ea=20|=0D=0A=09=09=09=09(WATagView=20tag:=20=
#tableHeading)=20add:=20ea;=20cssClass:=20aString;=20yourself]))!=20!=0D=0A=
=0D=0A!WATable=20methodsFor:=20'*WebCalendar'=20stamp:=20'djb=20=
11/8/2002=2015:44'!=0D=0AaddRows:=20rows=0D=0A=09rows=20do:=20[:ea=20|=20=
self=20addRow:=20ea]!=20!=0D=0A=0D=0A!WAView=20methodsFor:=20=
'*WebCalendar'=20stamp:=20'djb=2011/17/2002=2018:48'!=0D=0AcssClass:=20=
aString=0D=0A=09self=20attributeAt:=20'class'=20put:=20aString.!=20!=0D=0A=
=0D=0A!Date=20methodsFor:=20'*WebCalendar'=20stamp:=20'djb=2011/13/2002=20=
15:39'!=0D=0AdayOfMonth:=20anInteger=20=0D=0A=09self=20julianDayNumber:=20=
(Date=0D=0A=09=09=09newDay:=20anInteger=0D=0A=09=09=09month:=20self=20=
monthIndex=0D=0A=09=09=09year:=20self=20year)=20julianDayNumber!=20!=0D=0A=
=0D=0A!Date=20class=20methodsFor:=20'*WebCalendar'=20stamp:=20'djb=20=
10/14/2002=2017:02'!=0D=0AdaysOfWeek=0D=0A=09^WeekDayNames!=20!=0D=0A=0D=0A=
!Collection=20methodsFor:=20'*WebCalendar'=20stamp:=20'djb=2011/13/2002=20=
18:31'!=0D=0Aeditor=0D=0A^=20WCCollectionEditor=20forModel:=20self!=20!=0D=
=0A=0D=0A!Date=20methodsFor:=20'*WebCalendar'=20stamp:=20'djb=20=
11/16/2002=2015:10'!=0D=0Aeditor=0D=0A=09^WCDateEditor=20forModel:=20=
self!=20!=0D=0A=0D=0A!String=20methodsFor:=20'*WebCalendar'=20stamp:=20=
'djb=2011/16/2002=2015:07'!=0D=0Aeditor=0D=0A^nil!=20!=0D=0A=0D=0A!Time=20=
methodsFor:=20'*WebCalendar'=20stamp:=20'djb=2011/16/2002=2015:11'!=0D=0A=
editor=0D=0A=09^WCTimeEditor=20forModel:=20self!=20!=0D=0A=0D=0A!WAView=20=
methodsFor:=20'*WebCalendar'=20stamp:=20'djb=2011/17/2002=2017:47'!=0D=0A=
expandToFillWidth=0D=0A=09self=20attributeAt:=20'width'=20put:=20=
'100%'.!=20!=0D=0A=0D=0A!Collection=20methodsFor:=20'*WebCalendar'=20=
stamp:=20'djb=2011/6/2002=2017:04'!=0D=0Aflatten=0D=0A=09|col|=0D=0A=09=
col_=20self=20species=20new.=0D=0A=09self=20do:=20[=20:ea=20|=20(ea=20=
isKindOf:=20Collection)=20ifFalse:=20[col=20add:=20ea]=20ifTrue:=20[col=20=
addAll:=20ea=20flatten]].=0D=0A=09^col!=20!=0D=0A=0D=0A!Time=20=
methodsFor:=20'*WebCalendar'=20stamp:=20'djb=2011/13/2002=2016:10'!=0D=0A=
hour=0D=0A=09^=20self=20hours!=20!=0D=0A=0D=0A!Time=20methodsFor:=20=
'*WebCalendar'=20stamp:=20'djb=2011/13/2002=2016:12'!=0D=0Ahour:=20=
anInteger=20=0D=0A=09self=0D=0A=09=09hours:=20anInteger=0D=0A=09=09=
minutes:=20self=20minutes=0D=0A=09=09seconds:=20self=20seconds!=20!=0D=0A=
=0D=0A!Time=20methodsFor:=20'*WebCalendar'=20stamp:=20'djb=2011/13/2002=20=
16:11'!=0D=0Aminute=0D=0A=09^=20self=20minutes!=20!=0D=0A=0D=0A!Time=20=
methodsFor:=20'*WebCalendar'=20stamp:=20'djb=2011/13/2002=2016:12'!=0D=0A=
minute:=20anInteger=20=0D=0Aself=0D=0A=09=09hours:=20self=20hours=0D=0A=09=
=09minutes:=20anInteger=0D=0A=09=09seconds:=20self=20seconds!=20!=0D=0A=0D=
=0A!Date=20methodsFor:=20'*WebCalendar'=20stamp:=20'djb=2011/13/2002=20=
15:34'!=0D=0AmonthName:=20aString=20=0D=0A=09self=20julianDayNumber:=20=
(Date=0D=0A=09=09=09newDay:=20self=20dayOfMonth=0D=0A=09=09=09month:=20=
aString=0D=0A=09=09=09year:=20self=20year)=20julianDayNumber!=20!=0D=0A=0D=
=0A!Date=20methodsFor:=20'*WebCalendar'=20stamp:=20'djb=2011/13/2002=20=
17:01'!=0D=0AmonthNames=0D=0A=09^=20self=20class=20monthNames!=20!=0D=0A=0D=
=0A!Date=20class=20methodsFor:=20'*WebCalendar'=20stamp:=20'djb=20=
11/13/2002=2014:42'!=0D=0AmonthNames=0D=0A=09^=20MonthNames!=20!=0D=0A=0D=
=0A!Time=20methodsFor:=20'*WebCalendar'=20stamp:=20'djb=2011/13/2002=20=
16:11'!=0D=0Asecond=0D=0A=09^=20self=20seconds!=20!=0D=0A=0D=0A!Time=20=
methodsFor:=20'*WebCalendar'=20stamp:=20'djb=2011/13/2002=2016:13'!=0D=0A=
second:=20anInteger=20=0D=0A=09self=0D=0A=09=09hours:=20self=20hours=0D=0A=
=09=09minutes:=20self=20minutes=0D=0A=09=09seconds:=20anInteger!=20!=0D=0A=
=0D=0A!WAPluggableSelectBox=20methodsFor:=20'*WebCalendar'=20stamp:=20=
'djb=2011/13/2002=2016:53'!=0D=0Asize:=20anInteger=0D=0A=09self=20=
attributeAt:=20'size'=20put:=20anInteger.=0D=0A!=20!=0D=0A=0D=0A!Date=20=
methodsFor:=20'*WebCalendar'=20stamp:=20'djb=2011/13/2002=2015:50'!=0D=0A=
year:=20anInteger=20=0D=0A=09self=20julianDayNumber:=20(Date=0D=0A=09=09=09=
newDay:=20self=20dayOfMonth=0D=0A=09=09=09month:=20self=20monthIndex=0D=0A=
=09=09=09year:=20anInteger)=20julianDayNumber!=20!=0D=0ASmalltalk=20=
organization=0D=0AaddCategory:=20'WebCalendar-Kernel';=0D=0AaddCategory:=20=
'WebCalendar-View';=0D=0Ayourself!=0D=0A=0D=0AWAValueView=20subclass:=20=
#WADropList=0D=0A=09instanceVariableNames:=20'choices=20labels=20'=0D=0A=09=
classVariableNames:=20''=0D=0A=09poolDictionaries:=20''=0D=0A=09=
category:=20'WebCalendar-View'!=0D=0AWADropList=20class=0D=0A=09=
instanceVariableNames:=20''!=0D=0A=0D=0A=0D=0AWATagView=20subclass:=20=
#WATableData=0D=0A=09instanceVariableNames:=20''=0D=0A=09=
classVariableNames:=20''=0D=0A=09poolDictionaries:=20''=0D=0A=09=
category:=20'WebCalendar-View'!=0D=0AWATableData=20class=0D=0A=09=
instanceVariableNames:=20''!=0D=0A=0D=0A=0D=0AWAComponent=20subclass:=20=
#WCCalendar=0D=0A=09instanceVariableNames:=20'tabcomp=20eventEditor=20=
monthView=20speaker=20'=0D=0A=09classVariableNames:=20''=0D=0A=09=
poolDictionaries:=20''=0D=0A=09category:=20'WebCalendar-View'!=0D=0A=
WCCalendar=20class=0D=0A=09instanceVariableNames:=20''!=0D=0A=0D=0A=0D=0A=
Magnitude=20subclass:=20#WCDateTime=0D=0A=09instanceVariableNames:=20=
'date=20time=20'=0D=0A=09classVariableNames:=20''=0D=0A=09=
poolDictionaries:=20''=0D=0A=09category:=20'WebCalendar-Kernel'!=0D=0A=
WCDateTime=20class=0D=0A=09instanceVariableNames:=20''!=0D=0A=0D=0A=0D=0A=
Object=20subclass:=20#WCEvent=0D=0A=09instanceVariableNames:=20'title=20=
description=20category=20postedBy=20duration=20occurences=20location=20'=0D=
=0A=09classVariableNames:=20''=0D=0A=09poolDictionaries:=20''=0D=0A=09=
category:=20'WebCalendar-Kernel'!=0D=0AWCEvent=20class=0D=0A=09=
instanceVariableNames:=20''!=0D=0A=0D=0A=0D=0AObject=20subclass:=20=
#WCEventDB=0D=0A=09instanceVariableNames:=20'events=20'=0D=0A=09=
classVariableNames:=20'Events=20'=0D=0A=09poolDictionaries:=20''=0D=0A=09=
category:=20'WebCalendar-Kernel'!=0D=0AWCEventDB=20class=0D=0A=09=
instanceVariableNames:=20''!=0D=0A=0D=0A=0D=0AWAForm=20subclass:=20=
#WCFormWithSubmit=0D=0A=09instanceVariableNames:=20''=0D=0A=09=
classVariableNames:=20''=0D=0A=09poolDictionaries:=20''=0D=0A=09=
category:=20'WebCalendar-View'!=0D=0AWCFormWithSubmit=20class=0D=0A=09=
instanceVariableNames:=20''!=0D=0A=0D=0A=0D=0AWAModelView=20subclass:=20=
#WCObjectEditor=0D=0A=09instanceVariableNames:=20'isHorizontal=20=
showLabels=20asTableRow=20'=0D=0A=09classVariableNames:=20''=0D=0A=09=
poolDictionaries:=20''=0D=0A=09category:=20'WebCalendar-View'!=0D=0A=
WCObjectEditor=20class=0D=0A=09instanceVariableNames:=20''!=0D=0A=0D=0A=0D=
=0AWCObjectEditor=20subclass:=20#WCCollectionEditor=0D=0A=09=
instanceVariableNames:=20'prototypes=20selectedPrototype=20'=0D=0A=09=
classVariableNames:=20''=0D=0A=09poolDictionaries:=20''=0D=0A=09=
category:=20'WebCalendar-View'!=0D=0AWCCollectionEditor=20class=0D=0A=09=
instanceVariableNames:=20''!=0D=0A=0D=0A=0D=0AWCCollectionEditor=20=
subclass:=20#WCCollectionEditor2=0D=0A=09instanceVariableNames:=20=
'objectToEdit=20'=0D=0A=09classVariableNames:=20''=0D=0A=09=
poolDictionaries:=20''=0D=0A=09category:=20'WebCalendar-View'!=0D=0A=
WCCollectionEditor2=20class=0D=0A=09instanceVariableNames:=20''!=0D=0A=0D=
=0A=0D=0AWCObjectEditor=20subclass:=20#WCDateEditor=0D=0A=09=
instanceVariableNames:=20''=0D=0A=09classVariableNames:=20''=0D=0A=09=
poolDictionaries:=20''=0D=0A=09category:=20'WebCalendar-View'!=0D=0A=
WCDateEditor=20class=0D=0A=09instanceVariableNames:=20''!=0D=0A=0D=0A=0D=0A=
WCObjectEditor=20subclass:=20#WCDateTimeEditor=0D=0A=09=
instanceVariableNames:=20''=0D=0A=09classVariableNames:=20''=0D=0A=09=
poolDictionaries:=20''=0D=0A=09category:=20'WebCalendar-View'!=0D=0A=
WCDateTimeEditor=20class=0D=0A=09instanceVariableNames:=20''!=0D=0A=0D=0A=
=0D=0AWCObjectEditor=20subclass:=20#WCEventEditor=0D=0A=09=
instanceVariableNames:=20''=0D=0A=09classVariableNames:=20''=0D=0A=09=
poolDictionaries:=20''=0D=0A=09category:=20'WebCalendar-View'!=0D=0A=
WCEventEditor=20class=0D=0A=09instanceVariableNames:=20''!=0D=0A=0D=0A=0D=
=0AWCDateTime=20subclass:=20#WCOccurence=0D=0A=09instanceVariableNames:=20=
'event=20'=0D=0A=09classVariableNames:=20''=0D=0A=09poolDictionaries:=20=
''=0D=0A=09category:=20'WebCalendar-Kernel'!=0D=0AWCOccurence=20class=0D=0A=
=09instanceVariableNames:=20''!=0D=0A=0D=0A=0D=0ASortedCollection=20=
subclass:=20#WCOccurenceCollector=0D=0A=09instanceVariableNames:=20''=0D=0A=
=09classVariableNames:=20''=0D=0A=09poolDictionaries:=20''=0D=0A=09=
category:=20'WebCalendar-Kernel'!=0D=0AWCOccurenceCollector=20class=0D=0A=
=09instanceVariableNames:=20''!=0D=0A=0D=0A=0D=0AObject=20subclass:=20=
#WCRegularRecurrence=0D=0A=09instanceVariableNames:=20'interval=20'=0D=0A=
=09classVariableNames:=20''=0D=0A=09poolDictionaries:=20''=0D=0A=09=
category:=20'WebCalendar-Kernel'!=0D=0AWCRegularRecurrence=20class=0D=0A=09=
instanceVariableNames:=20''!=0D=0A=0D=0A=0D=0AWAView=20subclass:=20=
#WCTabbedComponent=0D=0A=09instanceVariableNames:=20'tabs=20currentTab=20=
'=0D=0A=09classVariableNames:=20''=0D=0A=09poolDictionaries:=20''=0D=0A=09=
category:=20'WebCalendar-View'!=0D=0AWCTabbedComponent=20class=0D=0A=09=
instanceVariableNames:=20''!=0D=0A=0D=0A=0D=0AWCObjectEditor=20subclass:=20=
#WCTimeEditor=0D=0A=09instanceVariableNames:=20''=0D=0A=09=
classVariableNames:=20''=0D=0A=09poolDictionaries:=20''=0D=0A=09=
category:=20'WebCalendar-View'!=0D=0AWCTimeEditor=20class=0D=0A=09=
instanceVariableNames:=20''!=0D=0A=0D=0A=0D=0AWAComponent=20subclass:=20=
#WCTreeComponent=0D=0A=09instanceVariableNames:=20'summarizer=20model=20=
'=0D=0A=09classVariableNames:=20''=0D=0A=09poolDictionaries:=20''=0D=0A=09=
category:=20'WebCalendar-View'!=0D=0AWCTreeComponent=20class=0D=0A=09=
instanceVariableNames:=20''!=0D=0A=0D=0A=0D=0AWAView=20subclass:=20=
#WCView=0D=0A=09instanceVariableNames:=20'startDate=20occurences=20=
calendar=20'=0D=0A=09classVariableNames:=20''=0D=0A=09poolDictionaries:=20=
''=0D=0A=09category:=20'WebCalendar-View'!=0D=0AWCView=20class=0D=0A=09=
instanceVariableNames:=20''!=0D=0A=0D=0A=0D=0AWCView=20subclass:=20=
#WCDayView=0D=0A=09instanceVariableNames:=20''=0D=0A=09=
classVariableNames:=20''=0D=0A=09poolDictionaries:=20''=0D=0A=09=
category:=20'WebCalendar-View'!=0D=0AWCDayView=20class=0D=0A=09=
instanceVariableNames:=20''!=0D=0A=0D=0A=0D=0AWCView=20subclass:=20=
#WCMonthView=0D=0A=09instanceVariableNames:=20'month=20'=0D=0A=09=
classVariableNames:=20''=0D=0A=09poolDictionaries:=20''=0D=0A=09=
category:=20'WebCalendar-View'!=0D=0AWCMonthView=20class=0D=0A=09=
instanceVariableNames:=20''!=0D=0A=0D=0A=0D=0AWCView=20subclass:=20=
#WCWeekView=0D=0A=09instanceVariableNames:=20'myMonth=20'=0D=0A=09=
classVariableNames:=20''=0D=0A=09poolDictionaries:=20''=0D=0A=09=
category:=20'WebCalendar-View'!=0D=0AWCWeekView=20class=0D=0A=09=
instanceVariableNames:=20''!=0D=0A=0D=0A=0D=0A=0D=0A!WCDateTime=20=
methodsFor:=20'comparing'=20stamp:=20'djb=2011/13/2002=2010:59'!=0D=0A<=20=
aDateTime=0D=0A=09^self=20asSeconds=20<=20(aDateTime=20asSeconds)!=20!=0D=
=0A=0D=0A!WCEvent=20methodsFor:=20'as=20yet=20unclassified'=20stamp:=20=
'djb=2011/16/2002=2023:07'!=0D=0A<=3D=20anObject=0D=0A=09^true=09!=20!=0D=
=0A=0D=0A!WCDateTime=20methodsFor:=20'comparing'=20stamp:=20'djb=20=
11/16/2002=2016:17'!=0D=0A=3D=20aDateTime=20=0D=0A=09(aDateTime=20=
isKindOf:=20self=20class)=0D=0A=09ifTrue:[^=20self=20asSeconds=20=3D=20=
aDateTime=20asSeconds]=0D=0A=09ifFalse:[^false]!=20!=0D=0A=0D=0A=
!WCCollectionEditor=20methodsFor:=20'as=20yet=20unclassified'=20stamp:=20=
'djb=2011/16/2002=2022:17'!=0D=0AanchorsForNewItemCreation=0D=0A=09^self=20=
prototypes=20collect:=20[=20:ea=20|=0D=0A=09=09=09=09WAAnchor=20new=20=0D=
=0A=09=09=09=09=09=09action:=20[self=20model=20add:=20ea=20deepCopy.];=20=
=0D=0A=09=09=09=09=09=09text:=20'Add=20',=20(ea=20asString)]=0D=0A=09=09=09=
=09=09!=20!=0D=0A=0D=0A!WCDateTime=20methodsFor:=20'converting'=20stamp:=20=
'djb=2011/13/2002=2011:03'!=0D=0AasSeconds=0D=0A=09^=20self=20date=20=
asSeconds=20+=20(self=20time=20asSeconds)!=20!=0D=0A=0D=0A!WCEvent=20=
methodsFor:=20'as=20yet=20unclassified'=20stamp:=20'djb=2011/16/2002=20=
22:18'!=0D=0AasString=0D=0A=09^'Event:=20',=20self=20title=20!=20!=0D=0A=0D=
=0A!WCEventEditor=20methodsFor:=20'as=20yet=20unclassified'=20stamp:=20=
'djb=2011/16/2002=2018:08'!=0D=0AasTableRow=0D=0A=09^(WATableRow=20new)=20=
addColumn:=20self=20view;yourself!=20!=0D=0A=0D=0A!WCObjectEditor=20=
methodsFor:=20'rendering'=20stamp:=20'djb=2011/16/2002=2015:59'!=0D=0A=
asTableRow=0D=0A=09=20^(WATableRow=20new)=20addColumns:=20(self=20=
membersToRender=0D=0A=09=09=09=09=09=09collect:=20[:ea=20|=20self=20=
viewForMember:=20ea]);=20=0D=0A=09=09=09=09=09=09attributeAt:=20=
'comment'=20put:=20'Object=20Editor=20as=20TableRow';yourself=0D=0A=09=0D=
=0A=09!=20!=0D=0A=0D=0A!WCDateTime=20methodsFor:=20'comparing'=20stamp:=20=
'djb=2011/17/2002=2017:08'!=0D=0Abetween:=20startDateTime=20and:=20=
endDateTime=0D=0A=09^self=20>=3D=20startDateTime=20and:=20[self=20<=20=
endDateTime].!=20!=0D=0A=0D=0A!WCView=20methodsFor:=20'accessing'=20=
stamp:=20'djb=2011/17/2002=2009:48'!=0D=0Acalendar=0D=0A=09^calendar!=20=
!=0D=0A=0D=0A!WCView=20methodsFor:=20'accessing'=20stamp:=20'djb=20=
11/17/2002=2009:48'!=0D=0Acalendar:=20anObject=0D=0A=09calendar=20:=3D=20=
anObject!=20!=0D=0A=0D=0A!WCEvent=20methodsFor:=20'accessing'=20stamp:=20=
'djb=2011/17/2002=2019:30'!=0D=0Acategory=0D=0A=09^category=20=
ifNil:[category_'unclassified']!=20!=0D=0A=0D=0A!WCEvent=20methodsFor:=20=
'accessing'=20stamp:=20'djb=2011/7/2002=2007:40'!=0D=0Acategory:=20=
anObject=0D=0A=09category=20:=3D=20anObject!=20!=0D=0A=0D=0A!WADropList=20=
methodsFor:=20'accessing'=20stamp:=20'djb=2011/13/2002=2014:35'!=0D=0A=
choices=0D=0A=09^choices!=20!=0D=0A=0D=0A!WADropList=20methodsFor:=20=
'accessing'=20stamp:=20'djb=2011/13/2002=2014:36'!=0D=0Achoices:=20=
aCollection=0D=0A=09choices=20_=20aCollection!=20!=0D=0A=0D=0A!WCEventDB=20=
class=20methodsFor:=20'accessing'=20stamp:=20'djb=2011/16/2002=2022:01'!=0D=
=0Aclear=0D=0A=09=20Events_nil.=0D=0A=09self=20events.=20"lazy=20=
initialize=20to=20empty"=0D=0A=09self=20save.=20"save=20the=20empty=20=
collection"!=20!=0D=0A=0D=0A!WCTabbedComponent=20methodsFor:=20=
'accessing'=20stamp:=20'djb=2011/17/2002=2020:31'!=0D=0AcontentBox=0D=0A=09=
^tabs=20at:=20self=20currentTab=0D=0A=09=0D=0A=09!=20!=0D=0A=0D=0A=
!WCTabbedComponent=20methodsFor:=20'accessing'=20stamp:=20'djb=20=
11/18/2002=2000:57'!=0D=0AcurrentTab=0D=0A=09^currentTab=20=
ifNil:[currentTab_(self=20tabs=20keys=20anyOne)]!=20!=0D=0A=0D=0A=
!WCTabbedComponent=20methodsFor:=20'accessing'=20stamp:=20'djb=20=
11/17/2002=2008:39'!=0D=0AcurrentTab:=20anObject=0D=0A=09currentTab=20:=3D=
=20anObject!=20!=0D=0A=0D=0A!WCRegularRecurrence=20class=20methodsFor:=20=
'as=20yet=20unclassified'=20stamp:=20'djb=2011/13/2002=2011:22'!=0D=0A=
dailyFrom:=20startOccurence=20to:=20endOccurence=20=0D=0A=09^=20self=0D=0A=
=09=09fromInterval:=20(Interval=0D=0A=09=09=09=09from:=20startOccurence=20=
asSeconds=0D=0A=09=09=09=09to:=20endOccurence=20asSeconds=0D=0A=09=09=09=09=
by:=2024=20*=2060=20*=2060)!=20!=0D=0A=0D=0A!WCDateTime=20methodsFor:=20=
'accessing'=20stamp:=20'djb=2011/16/2002=2017:09'!=0D=0Adate=0D=0A=09^=20=
date=20ifNil:=20[date_Date=20today]!=20!=0D=0A=0D=0A!WCDateTime=20=
methodsFor:=20'accessing'=20stamp:=20'djb=2011/13/2002=2011:00'!=0D=0A=
date:=20anObject=0D=0A=09date=20:=3D=20anObject!=20!=0D=0A=0D=0A!WCEvent=20=
methodsFor:=20'accessing'=20stamp:=20'djb=2011/7/2002=2007:39'!=0D=0A=
description=0D=0A=09^description!=20!=0D=0A=0D=0A!WCEvent=20methodsFor:=20=
'accessing'=20stamp:=20'djb=2011/7/2002=2007:39'!=0D=0Adescription:=20=
anObject=0D=0A=09description=20:=3D=20anObject!=20!=0D=0A=0D=0A!WCEvent=20=
methodsFor:=20'accessing'=20stamp:=20'djb=2011/16/2002=2018:28'!=0D=0A=
duration=0D=0A=09^duration=20ifNil:=20[duration_0]!=20!=0D=0A=0D=0A=
!WCEvent=20methodsFor:=20'accessing'=20stamp:=20'djb=2011/7/2002=20=
07:40'!=0D=0Aduration:=20anObject=0D=0A=09duration=20:=3D=20anObject!=20=
!=0D=0A=0D=0A!WCCalendar=20methodsFor:=20'as=20yet=20unclassified'=20=
stamp:=20'djb=2011/17/2002=2023:11'!=0D=0AeditEvent:=20aWCEvent=0D=0A=09=
tabcomp=20currentTab:=20'Edit=20Event'.=0D=0A=09eventEditor=20=
objectToEdit:=20aWCEvent.!=20!=0D=0A=0D=0A!WCDateTime=20methodsFor:=20=
'accessing'=20stamp:=20'djb=2011/16/2002=2015:12'!=0D=0Aeditor=0D=0A=09=
^WCDateTimeEditor=20forModel:=20self=0D=0A!=20!=0D=0A=0D=0A!WCEvent=20=
methodsFor:=20'as=20yet=20unclassified'=20stamp:=20'djb=2011/16/2002=20=
18:06'!=0D=0Aeditor=0D=0A=09^=20WCEventEditor=20forModel:=20self!=20!=0D=0A=
=0D=0A!WCOccurenceCollector=20methodsFor:=20'as=20yet=20unclassified'=20=
stamp:=20'djb=2011/16/2002=2019:34'!=0D=0Aeditor=0D=0A=09^super=20editor=20=
prototypes:=20(Array=20with:WCOccurence=20new);=20model:(=20self=20=
reSort;=20yourself)!=20!=0D=0A=0D=0A!WCCollectionEditor2=20methodsFor:=20=
'as=20yet=20unclassified'=20stamp:=20'djb=2011/17/2002=2023:05'!=0D=0A=
editorView=0D=0A=09|form|=0D=0A=09form_WAForm=20new.=0D=0A=09form=20add:=20=
self=20objectToEdit=20editor.=0D=0A=09form=20add:=20(WASubmitButton=20=
new=20text:=20'submit';=20action:=20[self=20objectToEdit:=20nil]).=0D=0A=09=
^form!=20!=0D=0A=0D=0A!WCOccurence=20methodsFor:=20'accessing'=20stamp:=20=
'djb=2011/16/2002=2022:44'!=0D=0Aevent=0D=0A=09^event!=20!=0D=0A=0D=0A=
!WCOccurence=20methodsFor:=20'accessing'=20stamp:=20'djb=2011/13/2002=20=
13:13'!=0D=0Aevent:=20anObject=0D=0A=09event=20:=3D=20anObject!=20!=0D=0A=
=0D=0A!WCEventEditor=20methodsFor:=20'as=20yet=20unclassified'=20stamp:=20=
'djb=2011/17/2002=2023:49'!=0D=0AeventCategories=0D=0A=09=
^#('unclassified'=20'important'=20'fun'=20'business')!=20!=0D=0A=0D=0A=
!WCCalendar=20methodsFor:=20'as=20yet=20unclassified'=20stamp:=20'djb=20=
11/17/2002=2023:21'!=0D=0AeventEditor=0D=0A=09^eventEditor=20ifNil:=20[=0D=
=0A=09=09eventEditor_=20(WCCollectionEditor2=20forModel:=20WCEventDB=20=
events)=20=0D=0A=09=09=09prototypes:=20(Array=20with:=20WCEvent=20new)=09=
=0D=0A=09=09].=0D=0A!=20!=0D=0A=0D=0A!WCEventDB=20class=20methodsFor:=20=
'accessing'=20stamp:=20'djb=2011/16/2002=2021:50'!=0D=0Aevents=0D=0A=09=
^Events=20ifNil:[=20Events_(SmartFileDictionary=20fileNamed:=20=
'events.fd')=20open;=0D=0A=09=09at:=20'events'=20=
ifAbsent:[WCOccurenceCollector=20=20new]]=0D=0A!=20!=0D=0A=0D=0A=
!WCDateTime=20class=20methodsFor:=20'as=20yet=20unclassified'=20stamp:=20=
'djb=2011/16/2002=2020:33'!=0D=0AforDate:=20aDate=0D=0A=09^self=20new=20=
date:aDate!=20!=0D=0A=0D=0A!WCEvent=20class=20methodsFor:=20'accessing'=20=
stamp:=20'djb=2011/17/2002=2016:52'!=0D=0AforDate:=20aDate=0D=0A=09=
|event|=0D=0A=09event_self=20new.=0D=0A=09event=20occurences=20add:=20=
(WCOccurence=20forDate:=20aDate).=20=0D=0A=09^=20event!=20!=0D=0A=0D=0A=
!WCOccurenceCollector=20methodsFor:=20'as=20yet=20unclassified'=20stamp:=20=
'djb=2011/17/2002=2017:06'!=0D=0AforDate:=20aDate=0D=0A=09^=20self=20=
occurencesBetween:=20(WCDateTime=20forDate:=20aDate)=20=0D=0A=09=09and:=20=
(WCDateTime=20forDate:=20(=20aDate=20addDays:1))=09!=20!=0D=0A=0D=0A=
!WCObjectEditor=20class=20methodsFor:=20'as=20yet=20unclassified'=20=
stamp:=20'djb=2011/13/2002=2014:20'!=0D=0AforModel:=20anObject=0D=0A=09=
^self=20new=20model:=20anObject!=20!=0D=0A=0D=0A!WCFormWithSubmit=20=
class=20methodsFor:=20'as=20yet=20unclassified'=20stamp:=20'djb=20=
11/17/2002=2022:49'!=0D=0AforView:=20aWAView=0D=0A=09^self=20new=20add:=20=
aWAView;=20add:=20(WASubmitButton=20new=20text:=20'submit');=20yourself!=20=
!=0D=0A=0D=0A!WCView=20class=20methodsFor:=20'as=20yet=20unclassified'=20=
stamp:=20'djb=2011/16/2002=2023:49'!=0D=0AfromDate:=20aDate=0D=0A=09=
^self=20new=20startDate:=20aDate!=20!=0D=0A=0D=0A!WCRegularRecurrence=20=
class=20methodsFor:=20'as=20yet=20unclassified'=20stamp:=20'djb=20=
11/13/2002=2011:23'!=0D=0AfromInterval:=20anInterval=0D=0A=09^self=20new=20=
interval:=20anInterval!=20!=0D=0A=0D=0A!WCDateTime=20class=20methodsFor:=20=
'as=20yet=20unclassified'=20stamp:=20'djb=2011/13/2002=2011:08'!=0D=0A=
fromSeconds:=20anInteger=0D=0A=09^=20self=20new=20seconds:=20anInteger!=20=
!=0D=0A=0D=0A!WCDateTime=20methodsFor:=20'comparing'=20stamp:=20'djb=20=
11/13/2002=2011:02'!=0D=0Ahash=0D=0A=09^=20self=20asSeconds=20hash!=20!=0D=
=0A=0D=0A!WCDayView=20methodsFor:=20'as=20yet=20unclassified'=20stamp:=20=
'djb=2011/17/2002=2021:59'!=0D=0Aheader=0D=0A=09|table=20row|=0D=0A=09=
table_WATable=20new.=0D=0A=09table=20attributeAt:'cellpadding'=20put:=20=
2.=0D=0A=09table=20attributeAt:'cellspacing'=20put:=200.=0D=0A=09=
row_WATableRow=20new.=0D=0A=09(row=20addHeader:=20self=20startDate=20=
dayOfMonth=20asString)=20=0D=0A=09=09attributeAt:=20'align'=20put:=20=
'left';=0D=0A=09=09cssClass:'mday'.=0D=0A=09(row=20addHeader:=20=
(WAAnchor=20new=20text:'=20+';=20=0D=0A=09=09action:[self=20calendar=20=
newEventForDate:=20self=20startDate]))=20=0D=0A=09=09attributeAt:=20=
'align'=20put:=20'right';=0D=0A=09=09cssClass:'newEventLink'.=0D=0A=0D=0A=
=09table=20addRow:=20row.=0D=0A=09table=20expandToFillWidth.=0D=0A=09=
^table.=0D=0A!=20!=0D=0A=0D=0A!WCEventEditor=20methodsFor:=20'as=20yet=20=
unclassified'=20stamp:=20'djb=2011/10/2002=2023:22'!=0D=0Aheading=0D=0A=09=
^=20[:html=20|=20html=20heading:=20'Event:=20',=20self=20model=20title]!=20=
!=0D=0A=0D=0A!WCObjectEditor=20methodsFor:=20'rendering'=20stamp:=20'djb=20=
11/13/2002=2016:31'!=0D=0Aheading=0D=0A=09^=20[:html=20|=20html=0D=0A=09=09=
]!=20!=0D=0A=0D=0A!WCCalendar=20class=20methodsFor:=20'as=20yet=20=
unclassified'=20stamp:=20'djb=2010/9/2002=2019:53'!=0D=0Ainitialize=0D=0A=
=09self=20registerAsApplication:=20'calendar'!=20!=0D=0A=0D=0A!WCEvent=20=
methodsFor:=20'as=20yet=20unclassified'=20stamp:=20'djb=2011/10/2002=20=
23:25'!=0D=0Ainitialize=0D=0A=09title_'New=20Event'=0D=0A!=20!=0D=0A=0D=0A=
!WCEventEditor=20class=20methodsFor:=20'as=20yet=20unclassified'=20=
stamp:=20'djb=2011/9/2002=2001:38'!=0D=0Ainitialize=0D=0A=09self=20=
registerAsApplication:=20'EventEditor'!=20!=0D=0A=0D=0A!WCObjectEditor=20=
class=20methodsFor:=20'as=20yet=20unclassified'=20stamp:=20'djb=20=
11/8/2002=2015:12'!=0D=0Ainitialize=0D=0A=09self=20=
registerAsApplication:=20'objectEditor'!=20!=0D=0A=0D=0A=
!WCRegularRecurrence=20methodsFor:=20'accessing'=20stamp:=20'djb=20=
11/13/2002=2011:23'!=0D=0Ainterval=0D=0A=09^interval!=20!=0D=0A=0D=0A=
!WCRegularRecurrence=20methodsFor:=20'accessing'=20stamp:=20'djb=20=
11/13/2002=2011:23'!=0D=0Ainterval:=20anObject=0D=0A=09interval=20:=3D=20=
anObject!=20!=0D=0A=0D=0A!WCObjectEditor=20methodsFor:=20'accessing'=20=
stamp:=20'djb=2011/13/2002=2018:02'!=0D=0AisHorizontal=0D=0A=0D=0A=09^=20=
isHorizontal=0D=0A=09=09ifNil:=20[isHorizontal_=20false]!=20!=0D=0A=0D=0A=
!WCObjectEditor=20methodsFor:=20'accessing'=20stamp:=20'djb=2011/13/2002=20=
17:25'!=0D=0AisHorizontal:=20anObject=0D=0A=09isHorizontal=20:=3D=20=
anObject!=20!=0D=0A=0D=0A!WADropList=20methodsFor:=20'accessing'=20=
stamp:=20'djb=2011/13/2002=2018:16'!=0D=0Alabels=0D=0A=09^labels=20=
ifNil:=20[[:ea=20|=20ea=20asString]]!=20!=0D=0A=0D=0A!WADropList=20=
methodsFor:=20'accessing'=20stamp:=20'djb=2011/13/2002=2018:16'!=0D=0A=
labels:=20aBlock=0D=0A=09labels=20:=3D=20aBlock!=20!=0D=0A=0D=0A!WCEvent=20=
methodsFor:=20'accessing'=20stamp:=20'djb=2011/7/2002=2008:03'!=0D=0A=
location=0D=0A=09^location!=20!=0D=0A=0D=0A!WCEvent=20methodsFor:=20=
'accessing'=20stamp:=20'djb=2011/7/2002=2008:03'!=0D=0Alocation:=20=
anObject=0D=0A=09location=20:=3D=20anObject!=20!=0D=0A=0D=0A=
!WCDateEditor=20methodsFor:=20'as=20yet=20unclassified'=20stamp:=20'djb=20=
11/13/2002=2015:44'!=0D=0AmembersToRender=0D=0A=09^=20#(#year=20=
#monthName=20#dayOfMonth=20)!=20!=0D=0A=0D=0A!WCDateTimeEditor=20=
methodsFor:=20'as=20yet=20unclassified'=20stamp:=20'djb=2011/13/2002=20=
17:22'!=0D=0AmembersToRender=0D=0A=09^#(#date=20#time)!=20!=0D=0A=0D=0A=
!WCEventEditor=20methodsFor:=20'as=20yet=20unclassified'=20stamp:=20'djb=20=
11/9/2002=2010:31'!=0D=0AmembersToRender=0D=0A=09^=20#(#title=20=
#postedBy=20#category=20#duration=20#location=20#description=20=
#occurences=20)!=20!=0D=0A=0D=0A!WCObjectEditor=20methodsFor:=20=
'rendering'=20stamp:=20'djb=2011/9/2002=2001:12'!=0D=0AmembersToRender=0D=
=0A=09"does=20not=20list=20members=20in=20the=20superclass"=0D=0A^(self=20=
model=20class=20organization=20listAtCategoryNamed:=20'accessing')=0D=0A=09=
=09=09=09select:=20[:sel=20|=20(sel=20endsWith:=20':')=20not].=0D=0A!=20=
!=0D=0A=0D=0A!WCTimeEditor=20methodsFor:=20'as=20yet=20unclassified'=20=
stamp:=20'djb=2011/13/2002=2016:18'!=0D=0AmembersToRender=0D=0A=09^=20=
#(#hour=20#minute)!=20!=0D=0A=0D=0A!WCTreeComponent=20methodsFor:=20=
'accessing'=20stamp:=20'djb=2011/16/2002=2019:57'!=0D=0Amodel=0D=0A=09=
^model!=20!=0D=0A=0D=0A!WCTreeComponent=20methodsFor:=20'accessing'=20=
stamp:=20'djb=2011/16/2002=2019:57'!=0D=0Amodel:=20anObject=0D=0A=09=
model=20:=3D=20anObject!=20!=0D=0A=0D=0A!WCCalendar=20methodsFor:=20=
'accessing'=20stamp:=20'djb=2011/18/2002=2001:15'!=0D=0AmonthView=0D=0A=09=
^monthView=20ifNil:[=0D=0A=09|date|=0D=0A=09date_(Month=20fromDate:=20=
Date=20today).=0D=0A=09monthView_=20WCMonthView=20fromDate:=20date.=0D=0A=
=09monthView=20calendar:=20self.=0D=0A=09"monthView=20occurences:=20=
(WCEventDB=20events=20occurencesBetween:=20=0D=0A=09=09=09=09=09=09=09=
(WCDateTime=20forDate:=20(date=20addDays:=20-1000))=0D=0A=09=09=09=09=09=09=
=09=09and:=20(WCDateTime=20forDate:=20(date=20addDays:=204000)))."=0D=0A=09=
monthView=20occurences:=20WCEventDB=20events.=0D=0A=09^monthView]=0D=0A=0D=
=0A=09!=20!=0D=0A=0D=0A!WCWeekView=20methodsFor:=20'accessing'=20stamp:=20=
'djb=2011/17/2002=2021:34'!=0D=0AmyMonth=0D=0A=09^myMonth!=20!=0D=0A=0D=0A=
!WCWeekView=20methodsFor:=20'accessing'=20stamp:=20'djb=2011/17/2002=20=
21:34'!=0D=0AmyMonth:=20anObject=0D=0A=09myMonth=20:=3D=20anObject!=20!=0D=
=0A=0D=0A!WCEventDB=20class=20methodsFor:=20'accessing'=20stamp:=20'djb=20=
11/16/2002=2019:25'!=0D=0Anew=0D=0A=09self=20error:=20'Class=20cannot=20=
be=20instantiated.'!=20!=0D=0A=0D=0A!WCEventDB=20class=20methodsFor:=20=
'accessing'=20stamp:=20'djb=2011/17/2002=2016:42'!=0D=0AnewEvent=0D=0A=09=
|event|=0D=0A=09event_WCEvent=20new.=0D=0A=09self=20events=20add:=20=
event.=0D=0A=09^event!=20!=0D=0A=0D=0A!WCCalendar=20methodsFor:=20=
'accessing'=20stamp:=20'djb=2011/17/2002=2023:10'!=0D=0AnewEventForDate:=20=
aDate=0D=0A=09tabcomp=20currentTab:=20'Edit=20Event'.=0D=0A=09=
eventEditor=20objectToEdit:=20(WCEventDB=20newEventForDate:=20aDate).=0D=0A=
!=20!=0D=0A=0D=0A!WCEventDB=20class=20methodsFor:=20'accessing'=20stamp:=20=
'djb=2011/17/2002=2016:52'!=0D=0AnewEventForDate:=20aDate=0D=0A=09=
|event|=0D=0A=09event_WCEvent=20forDate:=20aDate.=0D=0A=09self=20events=20=
add:=20event.=0D=0A=09^event!=20!=0D=0A=0D=0A!WCCollectionEditor=20=
methodsFor:=20'as=20yet=20unclassified'=20stamp:=20'djb=2011/16/2002=20=
17:52'!=0D=0AnewItemRow=0D=0A=09^(WATableRow=20new)=20addColumn:=20=
((WACompoundView=20new=20)=0D=0A=09=09=09=09=09addAll:=20self=20=
anchorsForNewItemCreation;=0D=0A=09=09=09=09=09yourself)=0D=0A=09=09=09=09=
=09=0D=0A=09=09=09=09=09!=20!=0D=0A=0D=0A!WCCollectionEditor2=20=
methodsFor:=20'accessing'=20stamp:=20'djb=2011/17/2002=2022:59'!=0D=0A=
objectToEdit=0D=0A=09^objectToEdit!=20!=0D=0A=0D=0A!WCCollectionEditor2=20=
methodsFor:=20'accessing'=20stamp:=20'djb=2011/17/2002=2022:59'!=0D=0A=
objectToEdit:=20anObject=0D=0A=09objectToEdit=20:=3D=20anObject!=20!=0D=0A=
=0D=0A!WCEvent=20methodsFor:=20'accessing'=20stamp:=20'djb=2011/16/2002=20=
18:13'!=0D=0Aoccurences=0D=0A=09^=20occurences=0D=0A=09=09ifNil:=20=
[occurences=20_=20WCOccurenceCollector=20new]=20=0D=0A=09=09!=20!=0D=0A=0D=
=0A!WCView=20methodsFor:=20'accessing'=20stamp:=20'djb=2011/16/2002=20=
23:49'!=0D=0Aoccurences=0D=0A=09^occurences!=20!=0D=0A=0D=0A!WCView=20=
methodsFor:=20'accessing'=20stamp:=20'djb=2011/16/2002=2023:49'!=0D=0A=
occurences:=20aWCOccurencesCollector=0D=0A=09occurences=20:=3D=20=
aWCOccurencesCollector!=20!=0D=0A=0D=0A!WCEvent=20methodsFor:=20=
'accessing'=20stamp:=20'djb=2011/16/2002=2022:47'!=0D=0A=
occurencesBetween:=20startDateTime=20and:=20endDateTime=0D=0A=09^=20=
(self=20occurences=20occurencesBetween:=20startDateTime=20and:=20=
endDateTime)=20=0D=0A=09=09collect:=20[:ea=20|=20ea=20event:=20self]!=20=
!=0D=0A=0D=0A!WCOccurenceCollector=20methodsFor:=20'as=20yet=20=
unclassified'=20stamp:=20'djb=2011/16/2002=2022:37'!=0D=0A=
occurencesBetween:=20startDateTime=20and:=20endDateTime=20=0D=0A=09|=20=
occurences=20|=0D=0A=09occurences=20:=3D=20self=20species=20new.=0D=0A=09=
self=20do:=20=0D=0A=09=09=09[:oc=20|=20=0D=0A=09=09=09(oc=20isKindOf:=20=
WCOccurence)=20=0D=0A=09=09=09=09ifTrue:=20=0D=0A=09=09=09=09=09[(oc=20=
between:=20startDateTime=20and:=20endDateTime)=20ifTrue:=20[occurences=20=
add:=20oc]]=0D=0A=09=09=09=09ifFalse:=20=0D=0A=09=09=09=09=09[occurences=20=
addAll:=20(oc=20occurencesBetween:=20startDateTime=20and:=20=
endDateTime)]].=0D=0A=09^occurences!=20!=0D=0A=0D=0A!WCRegularRecurrence=20=
methodsFor:=20'as=20yet=20unclassified'=20stamp:=20'djb=2011/13/2002=20=
13:31'!=0D=0AoccurencesBetween:=20startDateTime=20and:=20endDateTime=20=0D=
=0A=09^(self=20interval=20=0D=0A=09=09select:=20[:sec=20|=20sec=20=
between:=20startDateTime=20asSeconds=20and:=20endDateTime=20asSeconds])=20=
=0D=0A=09=09=09collect:=20[:sec=20|=20WCOccurence=20fromSeconds:=20sec]!=20=
!=0D=0A=0D=0A!WCEvent=20methodsFor:=20'accessing'=20stamp:=20'djb=20=
11/13/2002=2013:23'!=0D=0AoccurencesCoincidingWith:=20startDateTime=20=
to:=20endDateTime=20=0D=0A=09^=20(self=20occurences=20occurencesBetween:=20=
(startDateTime=20-=20(self=20duration))=20and:=20endDateTime)=0D=0A=09=09=
collect:=20[:ea=20|=20ea=20event:=20self]!=20!=0D=0A=0D=0A!WCEvent=20=
methodsFor:=20'accessing'=20stamp:=20'djb=2011/7/2002=2007:40'!=0D=0A=
postedBy=0D=0A=09^postedBy!=20!=0D=0A=0D=0A!WCEvent=20methodsFor:=20=
'accessing'=20stamp:=20'djb=2011/7/2002=2007:40'!=0D=0ApostedBy:=20=
anObject=0D=0A=09postedBy=20:=3D=20anObject!=20!=0D=0A=0D=0A=
!WCCollectionEditor=20methodsFor:=20'accessing'=20stamp:=20'djb=20=
11/16/2002=2015:18'!=0D=0Aprototypes=0D=0A=09^prototypes=20ifNil:=20=
[prototypes_=20Array=20with:=20Object=20new]!=20!=0D=0A=0D=0A=
!WCCollectionEditor=20methodsFor:=20'accessing'=20stamp:=20'djb=20=
11/16/2002=2014:47'!=0D=0Aprototypes:=20aCollection=0D=0A=09prototypes=20=
:=3D=20aCollection!=20!=0D=0A=0D=0A!WCObjectEditor=20methodsFor:=20=
'rendering'=20stamp:=20'djb=2011/13/2002=2017:11'!=0D=0ArenderHorizontal=0D=
=0A^False!=20!=0D=0A=0D=0A!WADropList=20methodsFor:=20'as=20yet=20=
unclassified'=20stamp:=20'djb=2011/13/2002=2018:13'!=0D=0ArenderOn:=20=
html=20=0D=0A=09^=20html=0D=0A=09=09selectFromList:=20self=20choices=0D=0A=
=09=09selected:=20self=20value=0D=0A=09=09callback:=20self=20=
valueCallback=0D=0A=09=09labels:=20self=20labels=0D=0A!=20!=0D=0A=0D=0A=
!WCDayView=20methodsFor:=20'accessing'=20stamp:=20'djb=2011/17/2002=20=
23:07'!=0D=0ArenderOn:=20html=0D=0A=0D=0A=09html=20render:=20self=20=
header.=0D=0A=09occurences=20do:=20[=0D=0A=09=09:ea=20|=20html=20div:=20=
[html=20cssClass:=20('event-',(ea=20event=20category)).=20html=20render:=0D=
=0A=09=09=09(WAAnchor=20new=20text:(=0D=0A=09=09=09=09ea=20time=20=
asString,=20':=20',(ea=20event=20title)=0D=0A=09=09=09);=0D=0A=09=09=09=
action:=20[self=20calendar=20editEvent:=20ea=20event]=20fixTemps).=0D=0A=09=
=09=09=0D=0A=09=09]=0D=0A=09].=0D=0A=09!=20!=0D=0A=0D=0A=
!WCFormWithSubmit=20methodsFor:=20'as=20yet=20unclassified'=20stamp:=20=
'djb=2011/17/2002=2022:45'!=0D=0ArenderOn:=20html!=20!=0D=0A=0D=0A=
!WCMonthView=20methodsFor:=20'as=20yet=20unclassified'=20stamp:=20'djb=20=
11/17/2002=2021:56'!=0D=0ArenderOn:=20html=0D=0A=09|table=20|=0D=0A=09=
table_WATable=20new.=0D=0A=09table=20attributeAt:=20'cellpadding'=20put:=20=
3.=09=0D=0A=09table=20attributeAt:=20'cellspacing'=20put:=201.=0D=0A=09=
table=20cssClass:=20'monthView'.=0D=0A=09table=20expandToFillWidth.=0D=0A=
=09table=20addRow:=20self=20topRow.=0D=0A=09(table=20addRowWithHeadings:=20=
Date=20daysOfWeek=20cssClass:'weekday').=0D=0A=09(Month=20fromDate:=20=
self=20startDate)=20eachWeekDo:=20=0D=0A=09=09[:ea=20|=20table=20addRow:=20=
((WCWeekView=20fromDate:=20ea)=20=0D=0A=09=09=09=09=09=09=09=09=09=
occurences:=20self=20occurences;=0D=0A=09=09=09=09=09=09=09=09=09=
myMonth:=20self=20startDate;=0D=0A=09=09=09=09=09=09=09=09=09calendar:=20=
self=20calendar)].=0D=0A=09html=20render:=20table.!=20!=0D=0A=0D=0A=
!WCObjectEditor=20methodsFor:=20'rendering'=20stamp:=20'djb=2011/16/2002=20=
19:13'!=0D=0ArenderOn:=20aRenderer=0D=0A=09aRenderer=20render:=20self=20=
view!=20!=0D=0A=0D=0A!WCTabbedComponent=20methodsFor:=20'accessing'=20=
stamp:=20'djb=2011/17/2002=2020:29'!=0D=0ArenderOn:=20html=0D=0A=09|=20=
view=20|=0D=0A=09view=20_=20WACompoundView=20new.=0D=0A=09view=20add:=20=
self=20tabRow.=0D=0A=09view=20add:=20self=20contentBox.=0D=0A=09html=20=
render:=20view.!=20!=0D=0A=0D=0A!WCWeekView=20methodsFor:=20'accessing'=20=
stamp:=20'djb=2011/21/2002=2010:55'!=0D=0ArenderOn:=20html=0D=0A=09|=20=
row=20|=0D=0A=09row_WATableRow=20new.=0D=0A=09(0=20to:=206)=20do:=20[:ea=20=
|=20|date|=20date_(self=20startDate=20asDate=20addDays:=20ea).=0D=0A=09=09=
(row=20addColumn:=20((WCDayView=20fromDate:=20date)=0D=0A=09=09=09=09=
occurences:=20(self=20occurences=20forDate:date);=0D=0A=09=09=09=09=
calendar:=20self=20calendar))=20=0D=0A=09=09=09=09attributeAt:=20=
'valign'=20put:=20'top';=0D=0A=09=09=09=09attributeAt:=20'width'=20put:=20=
'14%';=0D=0A=09=09=09=09attributeAt:=20'height'=20put:=20'60';=0D=0A=09=09=
=09=09cssClass:=20(date=20=3D=20Date=20today=20ifTrue:['today']=20=0D=0A=09=
=09=09=09=09=09ifFalse:[date=20month=20=3D=20self=20myMonth=20=0D=0A=09=09=
=09=09=09=09=09ifTrue:['inside']=20ifFalse:['outside']])=09=09=09=0D=0A=09=
=09=09=09].=0D=0A=09html=20render:=20row!=20!=0D=0A=0D=0A=
!WCCollectionEditor=20methodsFor:=20'accessing'=20stamp:=20'djb=20=
11/17/2002=2022:15'!=0D=0ArowFor:=20anObject=0D=0A=09|row|=0D=0A=09=
row_anObject=20editor=20asTableRow=20.=0D=0A=09(row=20addColumn:=20=20=0D=
=0A=09=09(WAAnchor=20new=20text:'delete'=20;action:=20[self=20model=20=
remove:=20anObject]))=0D=0A=09=09=09attributeAt:=20'valign'=20put:=20=
'top'.=0D=0A=09^row.!=20!=0D=0A=0D=0A!WCCollectionEditor2=20methodsFor:=20=
'as=20yet=20unclassified'=20stamp:=20'djb=2011/17/2002=2023:34'!=0D=0A=
rowFor:=20anObject=0D=0A=0D=0A=09|row|=0D=0A=09row_(WATableRow=20new)=20=
.=0D=0A=09row=20addColumn:=20=0D=0A=09=09(WAAnchor=20new=20=0D=0A=09=09=09=
text:=20anObject=20asString;=20action:=20[self=20objectToEdit:=20=
anObject]).=0D=0A=09row=20addColumn:=20=20=0D=0A=09=09(WAAnchor=20new=20=
text:'delete'=20;action:=20[self=20model=20remove:=20anObject]).=0D=0A=09=
^row.=0D=0A=0D=0A!=20!=0D=0A=0D=0A!WCTreeComponent=20methodsFor:=20'as=20=
yet=20unclassified'=20stamp:=20'djb=2011/16/2002=2019:58'!=0D=0ArowFor:=20=
anObject=0D=0A=09^WATableRow=20addColumns:=20(Array=20with:=0D=0A=09=09=
(WAAnchor=20new=20text:=20(self=20summarizer=20value:=20anObject)=20)=20=
with:=0D=0A=09=09(WAAnchor=20new=20text:'delete'=20;action:=20[self=20=
model=20remove:=20anObject]));yourself!=20!=0D=0A=0D=0A!WCObjectEditor=20=
methodsFor:=20'rendering'=20stamp:=20'djb=2011/17/2002=2022:33'!=0D=0A=
rowForMember:=20selector=20=0D=0A=09|row|=0D=0A=09row_WATableRow=20new.=0D=
=0A=09(row=20addColumn:=20[:html=20|=20html=20text:=20selector=20=
capitalized])=20.=0D=0A=09(row=20addColumn:=20(self=20viewForMember:=20=
selector))=20.=0D=0A=09^row.!=20!=0D=0A=0D=0A!WCEventDB=20class=20=
methodsFor:=20'accessing'=20stamp:=20'djb=2011/16/2002=2019:24'!=0D=0A=
save=0D=0A=09Events=20ifNotNil:=20[=0D=0A=09(SmartFileDictionary=20=
fileNamed:=20'events.fd')open;at:=20'events'=20put:self=20events]!=20!=0D=
=0A=0D=0A!WCDateTime=20methodsFor:=20'accessing'=20stamp:=20'djb=20=
11/13/2002=2011:10'!=0D=0Aseconds=0D=0A=09^=20self=20asSeconds!=20!=0D=0A=
=0D=0A!WCDateTime=20methodsFor:=20'accessing'=20stamp:=20'djb=20=
11/13/2002=2011:09'!=0D=0Aseconds:=20anInteger=20=0D=0A=09self=0D=0A=09=09=
date:=20(Date=20fromSeconds:=20anInteger).=20self=0D=0A=09=09time:=20=
(Time=20fromSeconds:=20anInteger)!=20!=0D=0A=0D=0A!WCCollectionEditor=20=
methodsFor:=20'accessing'=20stamp:=20'djb=2011/16/2002=2014:54'!=0D=0A=
selectedPrototype=0D=0A=09^selectedPrototype!=20!=0D=0A=0D=0A=
!WCCollectionEditor=20methodsFor:=20'accessing'=20stamp:=20'djb=20=
11/16/2002=2014:54'!=0D=0AselectedPrototype:=20anObject=0D=0A=09=
selectedPrototype=20:=3D=20anObject!=20!=0D=0A=0D=0A!WCObjectEditor=20=
methodsFor:=20'accessing'=20stamp:=20'djb=2011/8/2002=2009:12'!=0D=0A=
setterFor:=20selector=0D=0A=09^selector,=20':'!=20!=0D=0A=0D=0A=
!WCObjectEditor=20methodsFor:=20'accessing'=20stamp:=20'djb=2011/13/2002=20=
17:54'!=0D=0AshowLabels=0D=0A=09^showLabels=20ifNil:[showLabels_true]!=20=
!=0D=0A=0D=0A!WCObjectEditor=20methodsFor:=20'accessing'=20stamp:=20'djb=20=
11/13/2002=2017:26'!=0D=0AshowLabels:=20aBoolean=0D=0A=09showLabels=20:=3D=
=20aBoolean!=20!=0D=0A=0D=0A!WCCalendar=20methodsFor:=20'accessing'=20=
stamp:=20'djb=2011/18/2002=2015:04'!=0D=0Aspeaker=0D=0A=09^speaker=20=
ifNil:=20[speaker_Speaker=20child]!=20!=0D=0A=0D=0A!WCView=20methodsFor:=20=
'accessing'=20stamp:=20'djb=2011/16/2002=2023:49'!=0D=0AstartDate=0D=0A=09=
^startDate!=20!=0D=0A=0D=0A!WCView=20methodsFor:=20'accessing'=20stamp:=20=
'djb=2011/16/2002=2023:49'!=0D=0AstartDate:=20aDate=0D=0A=09startDate=20=
:=3D=20aDate!=20!=0D=0A=0D=0A!WCCalendar=20methodsFor:=20'accessing'=20=
stamp:=20'djb=2011/20/2002=2010:53'!=0D=0Astyle=0D=0A=20^'=0D=0A/*=20=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=0D=0A=20*=20style.css=0D=0A=
=20*=0D=0A=20*=20Copyright=20(C)=202002=20by=20Mark=20Gates=0D=0A=20*=20=
$Id:=20style.css,v=201.3=202002/08/17=2016:39:47=20mgates17=20Exp=20$=0D=0A=
=20*=20=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=20*/=0D=0A=0D=0Abody=20=
{=0D=0A=09background:=20=20white;=0D=0A=09color:=20=20=20=20=20=20=20=
black;=0D=0A}=0D=0A=0D=0Abody,=20p,=20th,=20td,=20input,=20textarea=20{=0D=
=0A=09font-family:=20Helvetica,=20sans-serif;=0D=0A}=0D=0A=0D=0Ap,=20th,=20=
td,=20input,=20textarea=20{=0D=0A=09font-size:=20=20=2010pt;=0D=0A}=0D=0A=
=0D=0Ah1=20{=0D=0A=09text-align:=20=20center;=0D=0A}=0D=0A=0D=0A/*=20=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=20*/=0D=0A=
table=20{=0D=0A=09border:=20=20=20=20=20=200;=0D=0A=09background:=20=20=
#888888;=0D=0A}=0D=0A=0D=0Atd=20{=0D=0A=09//background:=20=20#dddddd;=0D=0A=
}=0D=0A=0D=0A/*=20=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=20*/=0D=0Ath.tab=20{=0D=0A=09font-weight:=20normal;=0D=0A=09=
background:=20=20#dddddd;=0D=0A}=0D=0A=0D=0Ath.tab-current=20{=0D=0A=09=
font-weight:=20bold;=0D=0A=09background:=20=20#bbbbbb;=0D=0A}=0D=0A=0D=0A=
th.tab-space=20{=0D=0A=09background:=20=20white;=0D=0A}=0D=0A=0D=0A/*=20=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=20*/=0D=0A=
th.prevnext=20{=0D=0A=09background:=20=20white;=0D=0A=09color:=20=20=20=20=
=20=20=20black;=0D=0A}=0D=0A=0D=0Ath.title=20{=0D=0A=09background:=20=20=
white;=0D=0A=09color:=20=20=20=20=20=20=20black;=0D=0A=09font-size:=20=20=
=2018pt;=0D=0A}=0D=0A=0D=0A/*=20=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=20*/=0D=0A=20th.weekday,=20th.weekday=20a=20{=0D=0A=09=
background:=20=20#485068;=0D=0A=09color:=20=20=20=20=20=20=20white;=0D=0A=
}=0D=0A=0D=0A/*=20=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=20*/=0D=0Ath.head,=20th.head=20a=20{=0D=0A=09background:=20=20=
#485068;=0D=0A=09color:=20=20=20=20=20=20=20white;=0D=0A=09text-align:=20=
=20left;=0D=0A}=0D=0A=0D=0A/*=20=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=20*/=0D=0Ath.hour,=20th.hour=20a=20{=0D=0A=09=
background:=20=20#485068;=0D=0A=09color:=20=20=20=20=20=20=20white;=0D=0A=
=09text-align:=20=20right;=0D=0A}=0D=0A=0D=0A/*=20=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=20*/=0D=0Atd.outside,=20.outside=20=
table=20{=0D=0A=09background:=20=20white;=0D=0A}=0D=0A=0D=0Atd.inside,=20=
.inside=20table=20{=0D=0A=09background:=20=20#dddddd;=0D=0A}=0D=0A=0D=0A=
td.today=20.today=20table{=0D=0A=09background:=20=20#bbbbbb;=0D=0A}=0D=0A=
=0D=0Atd.event=20{=0D=0A=09background:=20=20#bbbbbb;=0D=0A}=0D=0A=0D=0A=
/*=20=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=20*/=0D=
=0A.span-outside=20{=0D=0A=09background:=20=20white;=0D=0A}=0D=0A=0D=0A=
.span-today=20{=0D=0A=09background:=20=20#bbbbbb;=0D=0A}=0D=0A=0D=0A/*=20=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=20*/=0D=0A=
.mday=20{=0D=0A=09font-size:=20=20=208pt;=0D=0A=09font-weight:=20bold;=0D=
=0A}=0D=0A=0D=0A.mday=20a=20{=0D=0A=09color:=20=20=20=20=20=20=20black;=0D=
=0A}=0D=0A=0D=0A/*=20=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=20*/=0D=0A.disabled=20{=0D=0A=09color:=20=20=20=20=20=20=20=
#666666;=0D=0A}=0D=0A=0D=0A/*=20=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=20*/=0D=0A.event-unclassified,=20=20=
.event-unclassified=20a=20{=0D=0A=09color:=20=20=20=20=20=20=20black;=0D=0A=
}=0D=0A.newEventLink=20a=20=20{=0D=0A=09color:=20=20=20=20=20=20=20=
green;=0D=0A=09text-decoration:=20none;=0D=0A}=0D=0A=0D=0A.event-blue,=20=
=20=20=20.event-blue=20=20=20=20a=20{=0D=0A=09color:=20=20=20=20=20=20=20=
#184a84;=0D=0A}=0D=0A=0D=0A.event-business,=20=20.event-business=20=20a=20=
{=0D=0A=09color:=20=20=20=20=20=20=20#8452d6;=20//purple=0D=0A}=0D=0A=0D=0A=
.event-important,=20=20=20=20=20.event-important=20=20=20=20=20a=20{=0D=0A=
=09color:=20=20=20=20=20=20=20#ef1818;=20//red=0D=0A}=0D=0A=0D=0A=
.event-fun,=20=20=20.event-fun=20=20=20a=20{=0D=0A=09color:=20=20=20=20=20=
=20=20#187331;=20//green=0D=0A}=0D=0A=0D=0A.event-gray,=20=20=20=20=
.event-gray=20=20=20=20a=20{=0D=0A=09color:=20=20=20=20=20=20=20#555559;=0D=
=0A}=0D=0A=0D=0A/*=20=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=20*/=0D=0A.span-green,=20=20.span-green=20=20a=20{=0D=0A=09=
background:=20=20#2F5F4B;=0D=0A=09color:=20=20=20=20=20=20=20white;=0D=0A=
}=0D=0A=0D=0A.span-maroon,=20.span-maroon=20a=20{=0D=0A=09background:=20=20=
#5F3B5C;=0D=0A=09color:=20=20=20=20=20=20=20white;=0D=0A}=0D=0A=0D=0A=
.span-blue,=20=20=20.span-blue=20=20=20a=20{=0D=0A=09background:=20=20=
#40475F;=0D=0A=09color:=20=20=20=20=20=20=20white;=0D=0A}=0D=0A=0D=0A=
.span-brown,=20=20.span-brown=20=20a=20{=0D=0A=09background:=20=20=
#986E50;=0D=0A=09color:=20=20=20=20=20=20=20white;=0D=0A}=0D=0A'!=20!=0D=0A=
=0D=0A!WCTreeComponent=20methodsFor:=20'accessing'=20stamp:=20'djb=20=
11/16/2002=2019:45'!=0D=0Asummarizer=0D=0A=09^summarizer=20ifNil:=20=
[[:ea=20|=20ea=20asString]]!=20!=0D=0A=0D=0A!WCTreeComponent=20=
methodsFor:=20'accessing'=20stamp:=20'djb=2011/16/2002=2019:44'!=0D=0A=
summarizer:=20aBlock=0D=0A=09summarizer=20:=3D=20aBlock!=20!=0D=0A=0D=0A=
!WCTabbedComponent=20methodsFor:=20'accessing'=20stamp:=20'djb=20=
11/17/2002=2020:48'!=0D=0AtabRow=0D=0A=09|=20row=20|=0D=0A=09row_=20=
WATableRow=20new.=0D=0A=09tabs=20keys=20do:=20[:ea=20|=20=0D=0A=09=09=09=09=
ea=20=3D=20self=20currentTab=0D=0A=09=09=09=09ifTrue:[(row=20=
addHeader:ea)=20=0D=0A=09=09=09=09=09=09attributeAt:=20'align'=20put:=20=
'center';=20cssClass:=20'tab-current'.]=0D=0A=09=09=09=09ifFalse:[(row=20=
addHeader:=20=0D=0A=09=09=09=09=09(WAAnchor=20new=20text:=20ea;=20=
action:=20[self=20currentTab:=20ea]=20fixTemps))=20=0D=0A=09=09=09=09=09=09=
attributeAt:=20'align'=20put:=20'center';=20cssClass:=20'tab'.].=0D=0A=09=
=09=09=09(row=20addHeader:=20'=20')cssClass:=20'tab-space'.=0D=0A=09=09=09=
=09].=0D=0A=09=09^=20(WATable=20new)=20addRow:=20row;=20=20=0D=0A=09=09=09=
attributeAt:=20'cellpadding'=20put:=203;=0D=0A=09=09=09attributeAt:=20=
'cellspacing'=20put:=200;=0D=0A=09=09=20=09yourself!=20!=0D=0A=0D=0A=
!WCCalendar=20methodsFor:=20'accessing'=20stamp:=20'djb=2011/18/2002=20=
00:58'!=0D=0Atabcomp=0D=0A=09^tabcomp=20ifNil:=20[tabcomp_=20=
WCTabbedComponent=20new.=0D=0A=09=09=09=09=09tabcomp=20tabs=20at:=20=
'Month=20View'=20put:=20self=20monthView.=0D=0A=09=09=09=09=09tabcomp=20=
tabs=20at:=09=20'Edit=20Event'=20put:=20self=20eventEditor.=0D=0A=09=09=09=
=09=09tabcomp=20currentTab:=20'Month=20View'.=0D=0A=09=09=09=09=09=
^tabcomp]=0D=0A!=20!=0D=0A=0D=0A!WCTabbedComponent=20methodsFor:=20=
'accessing'=20stamp:=20'djb=2011/17/2002=2008:21'!=0D=0Atabs=0D=0A=09=
^tabs=20ifNil:=20[tabs_Dictionary=20new]!=20!=0D=0A=0D=0A=
!WCTabbedComponent=20methodsFor:=20'accessing'=20stamp:=20'djb=20=
11/17/2002=2008:21'!=0D=0Atabs:=20anObject=0D=0A=09tabs=20:=3D=20=
anObject!=20!=0D=0A=0D=0A!WCDateTime=20methodsFor:=20'accessing'=20=
stamp:=20'djb=2011/16/2002=2023:15'!=0D=0Atime=0D=0A=09^time=20ifNil:=20=
[time_Time=20midnight]!=20!=0D=0A=0D=0A!WCDateTime=20methodsFor:=20=
'accessing'=20stamp:=20'djb=2011/13/2002=2011:00'!=0D=0Atime:=20anObject=0D=
=0A=09time=20:=3D=20anObject!=20!=0D=0A=0D=0A!WCEvent=20methodsFor:=20=
'accessing'=20stamp:=20'djb=2011/10/2002=2023:28'!=0D=0Atitle=0D=0A=09^=20=
title=20ifNil:=20[title_'New=20Event']!=20!=0D=0A=0D=0A!WCEvent=20=
methodsFor:=20'accessing'=20stamp:=20'djb=2011/7/2002=2007:39'!=0D=0A=
title:=20anObject=0D=0A=09title=20:=3D=20anObject!=20!=0D=0A=0D=0A=
!WCMonthView=20methodsFor:=20'as=20yet=20unclassified'=20stamp:=20'djb=20=
11/17/2002=2020:42'!=0D=0AtopRow=0D=0A=09|=20row=20|=0D=0A=09=
row_WATableRow=20new.=0D=0A=09row=20attributeAt:=20'align'=20put:=20=
'center'.=0D=0A=09(row=20addHeader:=20=0D=0A=09=09(WAAnchor=20new=20=
text:=20(self=20startDate=20previous=20asString=20);=20=0D=0A=09=09=09=09=
action:=20[self=20startDate:=20self=20startDate=20previous]))=20=
cssClass:=20'prevnext'.=0D=0A=09(row=20addHeader:=20self=20startDate=20=
asString=20span:=205)=0D=0A=09=09attributeAt:=20'align'=20put:=20=
'center';=0D=0A=09=09cssClass:=20'title'.=0D=0A=09(row=20addHeader:=0D=0A=
=09=09=09(WAAnchor=20new=20text:=20(self=20startDate=20next=20asString=20=
);=20=0D=0A=09=09=09=09action:=20[self=20startDate:=20self=20startDate=20=
next]))=20cssClass:=20'prevnext'.=0D=0A=09^row.=0D=0A!=20!=0D=0A=0D=0A=
!WCCalendar=20methodsFor:=20'accessing'=20stamp:=20'djb=2011/18/2002=20=
14:59'!=0D=0Aview=0D=0A=09self=20speaker=20say:=20'sandcaster=20loaded.=20=
=20Number=20of=20events=20is=20'=20,=20WCEventDB=20events=20size=20=
asWords.=0D=0A=09^=20[:html=20|=20=0D=0A=09html=20linkWithStyle:=20self=20=
style.=0D=0A=09html=20render:=20self=20tabcomp]!=20!=0D=0A=0D=0A=
!WCCollectionEditor=20methodsFor:=20'as=20yet=20unclassified'=20stamp:=20=
'djb=2011/16/2002=2018:09'!=0D=0Aview=0D=0A=09|table|=0D=0A=09=
table_WATable=20new.=0D=0A=09table=20addRows:=20(self=20model=20collect:=20=
[:ea=20|=20self=20rowFor:=20ea])=20.=20=0D=0A=09table=20addRow:=20self=20=
newItemRow.=0D=0A=09^table!=20!=0D=0A=0D=0A!WCCollectionEditor2=20=
methodsFor:=20'as=20yet=20unclassified'=20stamp:=20'djb=2011/17/2002=20=
23:02'!=0D=0Aview=0D=0A=09self=20objectToEdit=20ifNil:=20[^super=20view]=20=
ifNotNil:=20[^self=20editorView]!=20!=0D=0A=0D=0A!WCObjectEditor=20=
methodsFor:=20'rendering'=20stamp:=20'djb=2011/17/2002=2022:30'!=0D=0A=
view=0D=0A=09|table|=0D=0A=09table=20_=20WATable=20new.=0D=0A=09table=20=
attributeAt:=20'cellpadding'=20put:=203.=0D=0A=09table=20attributeAt:=20=
'cellspacing'=20put:=200.=0D=0A=09table=20attributeAt:=20'comment'=20=
put:=20'Object=20Editor:=20',=20self=20class=20asString.=0D=0A=09(self=20=
isHorizontal)=20ifFalse:[table=20=0D=0A=09=09=09=09=09=20addRows:=20=
(self=20membersToRender=0D=0A=09=09=09=09=09=09collect:=20[:ea=20|=20=
self=20rowForMember:=20ea])]=0D=0A=09=09=09=09=09ifTrue:[table=0D=0A=09=09=
=09=09=09addRowWithColumns:=20(self=20membersToRender=0D=0A=09=09=09=09=09=
=09collect:=20[:ea=20|=20self=20viewForMember:=20ea])].=0D=0A=09^=20=
table=0D=0A=0D=0A=09=09!=20!=0D=0A=0D=0A!WCTreeComponent=20methodsFor:=20=
'as=20yet=20unclassified'=20stamp:=20'djb=2011/16/2002=2019:59'!=0D=0A=
view=0D=0A=09|table|=0D=0A=09table_WATable=20new.=0D=0A=09table=20=
addRows:=20(self=20model=20collect:=20[:ea=20|=20self=20rowFor:=20ea])=20=
.=20=0D=0A=09table=20addRow:=20self=20newItemRow.=0D=0A=09^table!=20!=0D=0A=
=0D=0A!WCDateEditor=20methodsFor:=20'as=20yet=20unclassified'=20stamp:=20=
'djb=2011/13/2002=2017:09'!=0D=0AviewForMember:=20selector=20=0D=0A=09=
selector=20=3D=20#monthName=0D=0A=09=09ifTrue:=20[^=20WADropList=20new=0D=
=0A=09=09=09=09choices:=20Date=20monthNames;=0D=0A=09=09=09=09=20model:=20=
self=20model;=0D=0A=09=09=09=09=20selector:=20#monthName].=0D=0A=09=
selector=20=3D=20#year=0D=0A=09=09ifTrue:=20[^=20WADropList=20new=0D=0A=09=
=09=09=09choices:=20(2000=20to:=202010);=0D=0A=09=09=09=09=20model:=20=
self=20model;=0D=0A=09=09=09=09=20selector:=20#year].=0D=0A=09selector=20=
=3D=20#dayOfMonth=0D=0A=09=09ifTrue:=20[^=20WADropList=20new=0D=0A=09=09=09=
=09choices:=20(1=20to:=20self=20model=20daysInMonth);=0D=0A=09=09=09=09=20=
model:=20self=20model;=0D=0A=09=09=09=09=20selector:=20#dayOfMonth]!=20!=0D=
=0A=0D=0A!WCDateTimeEditor=20methodsFor:=20'as=20yet=20unclassified'=20=
stamp:=20'djb=2011/13/2002=2017:56'!=0D=0AviewForMember:=20selector=20=0D=
=0A=09selector=20=3D=20#date=0D=0A=09=09ifTrue:=20[^=20(WCDateEditor=20=
forModel:=20self=20model=20date)=20isHorizontal:true].=0D=0A=09selector=20=
=3D=20#time=0D=0A=09=09ifTrue:=20[^=20(WCTimeEditor=20forModel:=20self=20=
model=20time)=20isHorizontal:true]!=20!=0D=0A=0D=0A!WCEventEditor=20=
methodsFor:=20'as=20yet=20unclassified'=20stamp:=20'djb=2011/17/2002=20=
23:50'!=0D=0AviewForMember:=20selector=20=0D=0A=09selector=20=3D=20=
#description=0D=0A=09=09ifTrue:=20[^WATextArea=20new=20model:=20self=20=
model;=0D=0A=09=09=09=09=20selector:=20selector;=20rows:3;=20columns:=20=
80;=0D=0A=09=09=09=09=20yourself].=0D=0A=09selector=20=3D=20#category=0D=0A=
=09=09ifTrue:=20[^WADropList=20new=20model:=20self=20model;=0D=0A=09=09=09=
=09selector:=20selector;=0D=0A=09=09=09=09choices:=20self=20=
eventCategories].=0D=0A=09=09=09=09=0D=0A=09selector=20=3D=20#duration=0D=
=0A=09=09ifTrue:=20[^WADropList=20new=20model:=20self=20model;=0D=0A=09=09=
=09=09selector:=20selector;=0D=0A=09=09=09=09choices:=20((60=20*=2030)=20=
to:=20(60*60*8)=20by:=20(60*30));=20=0D=0A=09=09=09=09labels:=20[:ea=20|=20=
(ea=20/=20(60*60))=20asFloat=20asString,=20'=20hours']=0D=0A=09=09=09=09=
].=0D=0A=09=09=0D=0A=09^super=20viewForMember:=20selector.=0D=0A=09!=20!=0D=
=0A=0D=0A!WCObjectEditor=20methodsFor:=20'accessing'=20stamp:=20'djb=20=
11/16/2002=2015:06'!=0D=0AviewForMember:=20selector=20=0D=0A=09|=20value=20=
editor=20|=0D=0A=09value=20:=3D=20self=20model=20perform:=20selector.=0D=0A=
=09((value=20respondsTo:=20#editor)=20and:=20[value=20editor=20notNil])=0D=
=0A=09=09ifTrue:=20[editor=20:=3D=20value=20editor]=0D=0A=09=09ifFalse:=20=
=0D=0A=09=09=09[(self=20model=20respondsTo:=20(self=20setterFor:=20=
selector)=20asSymbol)=20=0D=0A=09=09=09=09ifTrue:=20=0D=0A=09=09=09=09=09=
[editor=20:=3D=20(WATextInput=20new)=0D=0A=09=09=09=09=09=09=09=09model:=20=
self=20model;=0D=0A=09=09=09=09=09=09=09=09selector:=20selector;=0D=0A=09=
=09=09=09=09=09=09=09yourself]=0D=0A=09=09=09=09ifFalse:=20[editor=20:=3D=20=
value=20printString]].=0D=0A=09^editor!=20!=0D=0A=0D=0A!WCTimeEditor=20=
methodsFor:=20'as=20yet=20unclassified'=20stamp:=20'djb=2011/16/2002=20=
23:36'!=0D=0AviewForMember:=20selector=20=0D=0A=09selector=20=3D=20#hour=0D=
=0A=09=09ifTrue:=20[^=20WADropList=20new=20choices:=20((0=20to:=2023));=0D=
=0A=09=09=09=09=20model:=20self=20model;=0D=0A=09=09=09=09=20selector:=20=
#hour;=0D=0A=09=09=09=09labels:=20[:ea|=20ea=20ifNil:['hour']=20=
ifNotNil:[ea=20asTwoCharacterString]]].=0D=0A=09selector=20=3D=20#minute=0D=
=0A=09=09ifTrue:=20[^=20WADropList=20new=0D=0A=09=09=09=09choices:=20((0=20=
to:=2045=20by:=2015));=0D=0A=09=09=09=09=20model:=20self=20model;=0D=0A=09=
=09=09=09=20selector:=20#minute;=0D=0A=09=09=09=09labels:=20[:ea|=20ea=20=
ifNil:['min']=20ifNotNil:[ea=20asTwoCharacterString]]].=0D=0A=09!=20!=0D=0A=
=0D=0A!WCRegularRecurrence=20class=20methodsFor:=20'as=20yet=20=
unclassified'=20stamp:=20'djb=2011/7/2002=2011:02'!=0D=0AweeklyFrom:=20=
startInteger=20to:=20endInteger=20=0D=0A=09^=20self=0D=0A=09=09from:=20=
startInteger=0D=0A=09=09to:=20endInteger=0D=0A=09=09by:=207=20*=2024=20*=20=
60=20*=2060!=20!=0D=0AWCCalendar=20initialize!=0D=0AWCEventEditor=20=
initialize!=0D=0AWCObjectEditor=20initialize!=0D=0A"End=20WebCalendar".=0D=
=0A=09=20=20Smalltalk=20at:=20#PackageInfo=20ifPresent:=20[:p=20|=20=
PackageInfo=20registerPackage:=20'WebCalendar'].=20!=

--Boundary_(ID_Eiqmi3hP0XgHvr3lmIrshA)
Content-type: text/plain; charset=US-ASCII; format=flowed
Content-transfer-encoding: 7BIT



Nerd on a Wire: Web and Information Solutions
Website Design - Database Systems - Site Hosting
604.874.6463
mailto:info@nerdonawire.com
For more information, visit http://nerdonawire.com

--Boundary_(ID_Eiqmi3hP0XgHvr3lmIrshA)--