<?xml version="1.0"?>

<st-source>
<!-- 
Name: ShoreComponents
Notice: All rights reserved
BundleName: ShoreComponents
Comment: ShoreComponents for Seaside in VisualWorks

ShoreComponents

Various reusable components based on Scriptaculous

Keywords: Web, Continuations,  HTML, XML, CSS, AJAX, Javascript, Internet, Squeak

Port from ShoreComponents-3-mb.34.mcz      8 October 2007 2:21:25 pm

DevelopmentPrerequisites: #(#(#any 'SeasideScriptaculous' ''))
Parcel: #('ShoreComponents')
ParcelName: ShoreComponents
PrerequisiteParcels: #(#('SeasideScriptaculous' ''))
Version: 1.34
Date: 7:36:03 am October 17, 2007
 -->
<time-stamp>From VisualWorks®, 7.5 of April 16, 2007 on October 17, 2007 at 7:36:03 am</time-stamp>


<do-it>(Dialog confirm: 'You are filing-in a Parcel source file!\\While this is possible it will not have\the same effect as loading the parcel.\None of the Parcel''s prerequisites will\be loaded and none of its load actions\will be performed.\\Are you sure you want to file-in?' withCRs) ifFalse: [self error: 'Parcel file-in abandoned.  Choose terminate or close.']</do-it>

<class>
<name>ShoreDemo1Page</name>
<environment>Seaside</environment>
<super>Seaside.WAComponent</super>
<private>false</private>
<indexed-type>none</indexed-type>
<inst-vars></inst-vars>
<class-inst-vars></class-inst-vars>
<imports></imports>
<category>ShoreComponents-Demo1</category>
<attributes>
<package>ShoreComponents-Demo1</package>
</attributes>
</class>

<class>
<name>ShoreStandardFiles</name>
<environment>Seaside</environment>
<super>Seaside.WAFileLibrary</super>
<private>false</private>
<indexed-type>none</indexed-type>
<inst-vars></inst-vars>
<class-inst-vars></class-inst-vars>
<imports></imports>
<category>ShoreComponents-Libraries</category>
<attributes>
<package>ShoreComponents-Libraries</package>
</attributes>
</class>

<class>
<name>ShoreDemo1ComponentWithForm2</name>
<environment>Seaside</environment>
<super>Seaside.WAComponent</super>
<private>false</private>
<indexed-type>none</indexed-type>
<inst-vars>person description </inst-vars>
<class-inst-vars></class-inst-vars>
<imports></imports>
<category>ShoreComponents-Demo1</category>
<attributes>
<package>ShoreComponents-Demo1</package>
</attributes>
</class>

<class>
<name>ShoreDemo1NestedFormsDemo</name>
<environment>Seaside</environment>
<super>Seaside.ShoreDemo1Page</super>
<private>false</private>
<indexed-type>none</indexed-type>
<inst-vars>component1 component2 </inst-vars>
<class-inst-vars></class-inst-vars>
<imports></imports>
<category>ShoreComponents-Demo1</category>
<attributes>
<package>ShoreComponents-Demo1</package>
</attributes>
</class>

<class>
<name>ShoreStandardScheme</name>
<environment>Seaside</environment>
<super>Seaside.ShoreStandardFiles</super>
<private>false</private>
<indexed-type>none</indexed-type>
<inst-vars></inst-vars>
<class-inst-vars></class-inst-vars>
<imports></imports>
<category>ShoreComponents-Libraries</category>
<attributes>
<package>ShoreComponents-Libraries</package>
</attributes>
</class>

<class>
<name>ShoreTabControl</name>
<environment>Seaside</environment>
<super>Seaside.WAComponent</super>
<private>false</private>
<indexed-type>none</indexed-type>
<inst-vars>components selection </inst-vars>
<class-inst-vars></class-inst-vars>
<imports></imports>
<category>ShoreComponents-Hierarchy</category>
<attributes>
<package>ShoreComponents-Hierarchy</package>
</attributes>
</class>

<class>
<name>ShoreId</name>
<environment>Seaside</environment>
<super>Core.Object</super>
<private>false</private>
<indexed-type>none</indexed-type>
<inst-vars></inst-vars>
<class-inst-vars>id </class-inst-vars>
<imports></imports>
<category>ShoreComponents-Kernel</category>
<attributes>
<package>ShoreComponents-Kernel</package>
</attributes>
</class>

<class>
<name>ShoreCurrentForm</name>
<environment>Seaside</environment>
<super>Seaside.WADynamicVariable</super>
<private>false</private>
<indexed-type>none</indexed-type>
<inst-vars></inst-vars>
<class-inst-vars></class-inst-vars>
<imports></imports>
<category>ShoreComponents-DynamicVariables</category>
<attributes>
<package>ShoreComponents-DynamicVariables</package>
</attributes>
</class>

<class>
<name>ShoreBatchedList</name>
<environment>Seaside</environment>
<super>Seaside.WAComponent</super>
<private>false</private>
<indexed-type>none</indexed-type>
<inst-vars>title page pageSize data itemBlock noteBlock sorters activeSorter filterText showItemBlock id idLeft1 idLeft2 idRight1 idRight2 </inst-vars>
<class-inst-vars></class-inst-vars>
<imports></imports>
<category>ShoreComponents-Lists</category>
<attributes>
<package>ShoreComponents-Lists</package>
</attributes>
</class>

<class>
<name>ShoreLiveBatchedList</name>
<environment>Seaside</environment>
<super>Seaside.ShoreBatchedList</super>
<private>false</private>
<indexed-type>none</indexed-type>
<inst-vars></inst-vars>
<class-inst-vars></class-inst-vars>
<imports></imports>
<category>ShoreComponents-Lists</category>
<attributes>
<package>ShoreComponents-Lists</package>
</attributes>
</class>

<class>
<name>ShoreEncoder</name>
<environment>Seaside</environment>
<super>Seaside.WARenderCanvas</super>
<private>false</private>
<indexed-type>none</indexed-type>
<inst-vars></inst-vars>
<class-inst-vars></class-inst-vars>
<imports></imports>
<category>ShoreComponents-Kernel</category>
<attributes>
<package>ShoreComponents-Kernel</package>
</attributes>
</class>

<class>
<name>ShoreDemo1ListsDemo</name>
<environment>Seaside</environment>
<super>Seaside.ShoreDemo1Page</super>
<private>false</private>
<indexed-type>none</indexed-type>
<inst-vars>list list1 list2 list3 list4 </inst-vars>
<class-inst-vars></class-inst-vars>
<imports></imports>
<category>ShoreComponents-Demo1</category>
<attributes>
<package>ShoreComponents-Demo1</package>
</attributes>
</class>

<class>
<name>ShoreFormTag</name>
<environment>Seaside</environment>
<super>Seaside.WAFormTag</super>
<private>false</private>
<indexed-type>none</indexed-type>
<inst-vars></inst-vars>
<class-inst-vars></class-inst-vars>
<imports></imports>
<category>ShoreComponents-Kernel</category>
<attributes>
<package>ShoreComponents-Kernel</package>
</attributes>
</class>

<class>
<name>ShoreHelper</name>
<environment>Seaside</environment>
<super>Seaside.WAComponent</super>
<private>false</private>
<indexed-type>none</indexed-type>
<inst-vars></inst-vars>
<class-inst-vars></class-inst-vars>
<imports></imports>
<category>ShoreComponents-Kernel</category>
<attributes>
<package>ShoreComponents-Kernel</package>
</attributes>
</class>

<class>
<name>ShorePageHeader</name>
<environment>Seaside</environment>
<super>Seaside.WAComponent</super>
<private>false</private>
<indexed-type>none</indexed-type>
<inst-vars>title subtitle image </inst-vars>
<class-inst-vars></class-inst-vars>
<imports></imports>
<category>ShoreComponents-Hierarchy</category>
<attributes>
<package>ShoreComponents-Hierarchy</package>
</attributes>
</class>

<class>
<name>ShoreDemo1ContextMenu</name>
<environment>Seaside</environment>
<super>Seaside.ShoreDemo1Page</super>
<private>false</private>
<indexed-type>none</indexed-type>
<inst-vars></inst-vars>
<class-inst-vars></class-inst-vars>
<imports></imports>
<category>ShoreComponents-Demo1</category>
<attributes>
<package>ShoreComponents-Demo1</package>
</attributes>
</class>

<class>
<name>ShoreDemo1DynamicFileDownload</name>
<environment>Seaside</environment>
<super>Seaside.ShoreDemo1Page</super>
<private>false</private>
<indexed-type>none</indexed-type>
<inst-vars></inst-vars>
<class-inst-vars></class-inst-vars>
<imports></imports>
<category>ShoreComponents-Demo1</category>
<attributes>
<package>ShoreComponents-Demo1</package>
</attributes>
</class>

<class>
<name>ShoreDemo1DemosMenu</name>
<environment>Seaside</environment>
<super>Seaside.WAComponent</super>
<private>false</private>
<indexed-type>none</indexed-type>
<inst-vars></inst-vars>
<class-inst-vars></class-inst-vars>
<imports></imports>
<category>ShoreComponents-Demo1</category>
<attributes>
<package>ShoreComponents-Demo1</package>
</attributes>
</class>

<class>
<name>ShoreDynamicPanelDecoration</name>
<environment>Seaside</environment>
<super>Seaside.WADecoration</super>
<private>false</private>
<indexed-type>none</indexed-type>
<inst-vars>id </inst-vars>
<class-inst-vars></class-inst-vars>
<imports></imports>
<category>ShoreComponents-Panels</category>
<attributes>
<package>ShoreComponents-Panels</package>
</attributes>
</class>

<class>
<name>ShoreDemo1TableDemo5</name>
<environment>Seaside</environment>
<super>Seaside.ShoreDemo1Page</super>
<private>false</private>
<indexed-type>none</indexed-type>
<inst-vars>table </inst-vars>
<class-inst-vars></class-inst-vars>
<imports></imports>
<category>ShoreComponents-Demo1</category>
<attributes>
<package>ShoreComponents-Demo1</package>
</attributes>
</class>

<class>
<name>ShoreCurrentTarget</name>
<environment>Seaside</environment>
<super>Seaside.WADynamicVariable</super>
<private>false</private>
<indexed-type>none</indexed-type>
<inst-vars></inst-vars>
<class-inst-vars></class-inst-vars>
<imports></imports>
<category>ShoreComponents-DynamicVariables</category>
<attributes>
<package>ShoreComponents-DynamicVariables</package>
</attributes>
</class>

<class>
<name>ShoreSlidingDoors</name>
<environment>Seaside</environment>
<super>Seaside.WAFileLibrary</super>
<private>false</private>
<indexed-type>none</indexed-type>
<inst-vars></inst-vars>
<class-inst-vars></class-inst-vars>
<imports></imports>
<category>ShoreComponents-Libraries</category>
<attributes>
<package>ShoreComponents-Libraries</package>
</attributes>
</class>

<class>
<name>ShoreWidget</name>
<environment>Seaside</environment>
<super>Core.Object</super>
<private>false</private>
<indexed-type>none</indexed-type>
<inst-vars>renderer </inst-vars>
<class-inst-vars></class-inst-vars>
<imports></imports>
<category>ShoreComponents-Widgets</category>
<attributes>
<package>ShoreComponents-Widgets</package>
</attributes>
</class>

<class>
<name>ShoreDatePicker</name>
<environment>Seaside</environment>
<super>Seaside.ShoreWidget</super>
<private>false</private>
<indexed-type>none</indexed-type>
<inst-vars>id divId calendarId printFormat currentDate </inst-vars>
<class-inst-vars></class-inst-vars>
<imports></imports>
<category>ShoreComponents-Widgets</category>
<attributes>
<package>ShoreComponents-Widgets</package>
</attributes>
</class>

<class>
<name>ShoreDatePickerSubmitting</name>
<environment>Seaside</environment>
<super>Seaside.ShoreDatePicker</super>
<private>false</private>
<indexed-type>none</indexed-type>
<inst-vars>formId </inst-vars>
<class-inst-vars></class-inst-vars>
<imports></imports>
<category>ShoreComponents-Widgets</category>
<attributes>
<package>ShoreComponents-Widgets</package>
</attributes>
</class>

<class>
<name>ShoreTable</name>
<environment>Seaside</environment>
<super>Seaside.WAComponent</super>
<private>false</private>
<indexed-type>none</indexed-type>
<inst-vars>rows sortColumn isReversed columns rowPeriod rowColors renderFooter </inst-vars>
<class-inst-vars></class-inst-vars>
<imports></imports>
<category>ShoreComponents-Tables</category>
<attributes>
<package>ShoreComponents-Tables</package>
</attributes>
</class>

<class>
<name>ShoreLiveTable</name>
<environment>Seaside</environment>
<super>Seaside.ShoreTable</super>
<private>false</private>
<indexed-type>none</indexed-type>
<inst-vars>id previewBlock sortCallbacks previewUpdateScripts sorters selection selectable actionsBlock checkBoxRequest previewRequest </inst-vars>
<class-inst-vars></class-inst-vars>
<imports></imports>
<category>ShoreComponents-Tables</category>
<attributes>
<package>ShoreComponents-Tables</package>
</attributes>
</class>

<class>
<name>ShoreRootComponent</name>
<environment>Seaside</environment>
<super>Seaside.WAComponent</super>
<private>false</private>
<indexed-type>none</indexed-type>
<inst-vars>id helper </inst-vars>
<class-inst-vars></class-inst-vars>
<imports></imports>
<category>ShoreComponents-Kernel</category>
<attributes>
<package>ShoreComponents-Kernel</package>
</attributes>
</class>

<class>
<name>ShoreDemo1</name>
<environment>Seaside</environment>
<super>Seaside.ShoreRootComponent</super>
<private>false</private>
<indexed-type>none</indexed-type>
<inst-vars>header root </inst-vars>
<class-inst-vars></class-inst-vars>
<imports></imports>
<category>ShoreComponents-Demo1</category>
<attributes>
<package>ShoreComponents-Demo1</package>
</attributes>
</class>

<class>
<name>ShoreDemo2</name>
<environment>Seaside</environment>
<super>Seaside.ShoreRootComponent</super>
<private>false</private>
<indexed-type>none</indexed-type>
<inst-vars>header leftPanel rightPanel target </inst-vars>
<class-inst-vars></class-inst-vars>
<imports></imports>
<category>ShoreComponents-Demo2</category>
<attributes>
<package>ShoreComponents-Demo2</package>
</attributes>
</class>

<class>
<name>ShoreCurrentHeader</name>
<environment>Seaside</environment>
<super>Seaside.WADynamicVariable</super>
<private>false</private>
<indexed-type>none</indexed-type>
<inst-vars></inst-vars>
<class-inst-vars></class-inst-vars>
<imports></imports>
<category>ShoreComponents-DynamicVariables</category>
<attributes>
<package>ShoreComponents-DynamicVariables</package>
</attributes>
</class>

<class>
<name>ShoreDemo1TableDemo</name>
<environment>Seaside</environment>
<super>Seaside.ShoreDemo1Page</super>
<private>false</private>
<indexed-type>none</indexed-type>
<inst-vars>table </inst-vars>
<class-inst-vars></class-inst-vars>
<imports></imports>
<category>ShoreComponents-Demo1</category>
<attributes>
<package>ShoreComponents-Demo1</package>
</attributes>
</class>

<class>
<name>ShoreDemo1TableDemo2</name>
<environment>Seaside</environment>
<super>Seaside.ShoreDemo1Page</super>
<private>false</private>
<indexed-type>none</indexed-type>
<inst-vars>table </inst-vars>
<class-inst-vars></class-inst-vars>
<imports></imports>
<category>ShoreComponents-Demo1</category>
<attributes>
<package>ShoreComponents-Demo1</package>
</attributes>
</class>

<class>
<name>ShoreDemo1RichEditDemo</name>
<environment>Seaside</environment>
<super>Seaside.ShoreDemo1Page</super>
<private>false</private>
<indexed-type>none</indexed-type>
<inst-vars>editor value </inst-vars>
<class-inst-vars></class-inst-vars>
<imports></imports>
<category>ShoreComponents-Demo1</category>
<attributes>
<package>ShoreComponents-Demo1</package>
</attributes>
</class>

<class>
<name>ShoreNestedFormTag</name>
<environment>Seaside</environment>
<super>Seaside.WADivTag</super>
<private>false</private>
<indexed-type>none</indexed-type>
<inst-vars>parentForm </inst-vars>
<class-inst-vars></class-inst-vars>
<imports></imports>
<category>ShoreComponents-Kernel</category>
<attributes>
<package>ShoreComponents-Kernel</package>
</attributes>
</class>

<class>
<name>ShoreDemo1Root</name>
<environment>Seaside</environment>
<super>Seaside.WAComponent</super>
<private>false</private>
<indexed-type>none</indexed-type>
<inst-vars>panel target </inst-vars>
<class-inst-vars></class-inst-vars>
<imports></imports>
<category>ShoreComponents-Demo1</category>
<attributes>
<package>ShoreComponents-Demo1</package>
</attributes>
</class>

<class>
<name>ShoreDemo1SimpleComponent</name>
<environment>Seaside</environment>
<super>Seaside.WAComponent</super>
<private>false</private>
<indexed-type>none</indexed-type>
<inst-vars></inst-vars>
<class-inst-vars></class-inst-vars>
<imports></imports>
<category>ShoreComponents-Demo1</category>
<attributes>
<package>ShoreComponents-Demo1</package>
</attributes>
</class>

<class>
<name>ShoreDemo1WebTree</name>
<environment>Seaside</environment>
<super>Seaside.ShoreDemo1Page</super>
<private>false</private>
<indexed-type>none</indexed-type>
<inst-vars>tree browser </inst-vars>
<class-inst-vars></class-inst-vars>
<imports></imports>
<category>ShoreComponents-Demo1</category>
<attributes>
<package>ShoreComponents-Demo1</package>
</attributes>
</class>

<comment>
<class-id>Seaside.ShoreDemo1WebTree</class-id>
<body>This class represents an example for html based tree views.</body>
</comment>

<class>
<name>ShoreXPPanelDecoration</name>
<environment>Seaside</environment>
<super>Seaside.WADecoration</super>
<private>false</private>
<indexed-type>none</indexed-type>
<inst-vars>sections width open </inst-vars>
<class-inst-vars></class-inst-vars>
<imports></imports>
<category>ShoreComponents-Panels</category>
<attributes>
<package>ShoreComponents-Panels</package>
</attributes>
</class>

<class>
<name>ShoreBrowserDecoration</name>
<environment>Seaside</environment>
<super>Seaside.WADecoration</super>
<private>false</private>
<indexed-type>none</indexed-type>
<inst-vars></inst-vars>
<class-inst-vars></class-inst-vars>
<imports></imports>
<category>ShoreComponents-Demo1</category>
<attributes>
<package>ShoreComponents-Demo1</package>
</attributes>
</class>

<class>
<name>ShoreDemo1DatePicker</name>
<environment>Seaside</environment>
<super>Seaside.ShoreDemo1Page</super>
<private>false</private>
<indexed-type>none</indexed-type>
<inst-vars>date date2 </inst-vars>
<class-inst-vars></class-inst-vars>
<imports></imports>
<category>ShoreComponents-Demo1</category>
<attributes>
<package>ShoreComponents-Demo1</package>
</attributes>
</class>

<class>
<name>ShoreFormDialog</name>
<environment>Seaside</environment>
<super>Seaside.WAComponent</super>
<private>false</private>
<indexed-type>none</indexed-type>
<inst-vars></inst-vars>
<class-inst-vars></class-inst-vars>
<imports></imports>
<category>ShoreComponents-Dialogs</category>
<attributes>
<package>ShoreComponents-Dialogs</package>
</attributes>
</class>

<class>
<name>ShoreFormDialogWithResult</name>
<environment>Seaside</environment>
<super>Seaside.ShoreFormDialog</super>
<private>false</private>
<indexed-type>none</indexed-type>
<inst-vars></inst-vars>
<class-inst-vars></class-inst-vars>
<imports></imports>
<category>ShoreComponents-Dialogs</category>
<attributes>
<package>ShoreComponents-Dialogs</package>
</attributes>
</class>

<class>
<name>ShoreInformDialog</name>
<environment>Seaside</environment>
<super>Seaside.ShoreFormDialogWithResult</super>
<private>false</private>
<indexed-type>none</indexed-type>
<inst-vars>message </inst-vars>
<class-inst-vars></class-inst-vars>
<imports></imports>
<category>ShoreComponents-Dialogs</category>
<attributes>
<package>ShoreComponents-Dialogs</package>
</attributes>
</class>

<class>
<name>ShoreErrorDialog</name>
<environment>Seaside</environment>
<super>Seaside.ShoreInformDialog</super>
<private>false</private>
<indexed-type>none</indexed-type>
<inst-vars></inst-vars>
<class-inst-vars></class-inst-vars>
<imports></imports>
<category>ShoreComponents-Dialogs</category>
<attributes>
<package>ShoreComponents-Dialogs</package>
</attributes>
</class>

<class>
<name>ShoreGetStringDialog</name>
<environment>Seaside</environment>
<super>Seaside.ShoreFormDialogWithResult</super>
<private>false</private>
<indexed-type>none</indexed-type>
<inst-vars>message string </inst-vars>
<class-inst-vars></class-inst-vars>
<imports></imports>
<category>ShoreComponents-Dialogs</category>
<attributes>
<package>ShoreComponents-Dialogs</package>
</attributes>
</class>

<class>
<name>ShoreDemo1TableDemo3</name>
<environment>Seaside</environment>
<super>Seaside.ShoreDemo1Page</super>
<private>false</private>
<indexed-type>none</indexed-type>
<inst-vars>table </inst-vars>
<class-inst-vars></class-inst-vars>
<imports></imports>
<category>ShoreComponents-Demo1</category>
<attributes>
<package>ShoreComponents-Demo1</package>
</attributes>
</class>

<class>
<name>ShoreDemo4</name>
<environment>Seaside</environment>
<super>Seaside.ShoreDemo2</super>
<private>false</private>
<indexed-type>none</indexed-type>
<inst-vars></inst-vars>
<class-inst-vars></class-inst-vars>
<imports></imports>
<category>ShoreComponents-Demo4</category>
<attributes>
<package>ShoreComponents-Demo4</package>
</attributes>
</class>

<class>
<name>ShoreDynamicPanel</name>
<environment>Seaside</environment>
<super>Seaside.WAComponent</super>
<private>false</private>
<indexed-type>none</indexed-type>
<inst-vars>sections id providers </inst-vars>
<class-inst-vars></class-inst-vars>
<imports></imports>
<category>ShoreComponents-Panels</category>
<attributes>
<package>ShoreComponents-Panels</package>
</attributes>
</class>

<class>
<name>ShoreWebTreeLibrary</name>
<environment>Seaside</environment>
<super>Seaside.WAFileLibrary</super>
<private>false</private>
<indexed-type>none</indexed-type>
<inst-vars></inst-vars>
<class-inst-vars></class-inst-vars>
<imports></imports>
<category>ShoreComponents-Libraries</category>
<attributes>
<package>ShoreComponents-Libraries</package>
</attributes>
</class>

<class>
<name>ShoreStandardStyles</name>
<environment>Seaside</environment>
<super>Seaside.ShoreStandardFiles</super>
<private>false</private>
<indexed-type>none</indexed-type>
<inst-vars></inst-vars>
<class-inst-vars></class-inst-vars>
<imports></imports>
<category>ShoreComponents-Libraries</category>
<attributes>
<package>ShoreComponents-Libraries</package>
</attributes>
</class>

<class>
<name>ShoreDemo1Spinner</name>
<environment>Seaside</environment>
<super>Seaside.ShoreDemo1Page</super>
<private>false</private>
<indexed-type>none</indexed-type>
<inst-vars></inst-vars>
<class-inst-vars></class-inst-vars>
<imports></imports>
<category>ShoreComponents-Demo1</category>
<attributes>
<package>ShoreComponents-Demo1</package>
</attributes>
</class>

<class>
<name>ShorePanel</name>
<environment>Seaside</environment>
<super>Seaside.WAComponent</super>
<private>false</private>
<indexed-type>none</indexed-type>
<inst-vars>sections id </inst-vars>
<class-inst-vars></class-inst-vars>
<imports></imports>
<category>ShoreComponents-Panels</category>
<attributes>
<package>ShoreComponents-Panels</package>
</attributes>
</class>

<class>
<name>ShoreWebTreeNode</name>
<environment>Seaside</environment>
<super>Core.Object</super>
<private>false</private>
<indexed-type>none</indexed-type>
<inst-vars>wrappedObject subnodes isExpanded </inst-vars>
<class-inst-vars></class-inst-vars>
<imports></imports>
<category>ShoreComponents-Webtree</category>
<attributes>
<package>ShoreComponents-Webtree</package>
</attributes>
</class>

<comment>
<class-id>Seaside.ShoreWebTreeNode</class-id>
<body>This class represents a tree item for a web tree. It's a simple
wrapper for your objects.

</body>
</comment>

<class>
<name>ShoreConfirmDialog</name>
<environment>Seaside</environment>
<super>Seaside.ShoreInformDialog</super>
<private>false</private>
<indexed-type>none</indexed-type>
<inst-vars></inst-vars>
<class-inst-vars></class-inst-vars>
<imports></imports>
<category>ShoreComponents-Dialogs</category>
<attributes>
<package>ShoreComponents-Dialogs</package>
</attributes>
</class>

<class>
<name>ShoreCanvas</name>
<environment>Seaside</environment>
<super>Seaside.WARenderCanvas</super>
<private>false</private>
<indexed-type>none</indexed-type>
<inst-vars>ids </inst-vars>
<class-inst-vars></class-inst-vars>
<imports></imports>
<category>ShoreComponents-Kernel</category>
<attributes>
<package>ShoreComponents-Kernel</package>
</attributes>
</class>

<class>
<name>ShoreBrowser</name>
<environment>Seaside</environment>
<super>Seaside.WABrowser</super>
<private>false</private>
<indexed-type>none</indexed-type>
<inst-vars></inst-vars>
<class-inst-vars></class-inst-vars>
<imports></imports>
<category>ShoreComponents-Demo1</category>
<attributes>
<package>ShoreComponents-Demo1</package>
</attributes>
</class>

<class>
<name>ShoreStandardScripts</name>
<environment>Seaside</environment>
<super>Seaside.ShoreStandardFiles</super>
<private>false</private>
<indexed-type>none</indexed-type>
<inst-vars></inst-vars>
<class-inst-vars></class-inst-vars>
<imports></imports>
<category>ShoreComponents-Libraries</category>
<attributes>
<package>ShoreComponents-Libraries</package>
</attributes>
</class>

<class>
<name>ShoreCurrentRoot</name>
<environment>Seaside</environment>
<super>Seaside.WADynamicVariable</super>
<private>false</private>
<indexed-type>none</indexed-type>
<inst-vars></inst-vars>
<class-inst-vars></class-inst-vars>
<imports></imports>
<category>ShoreComponents-DynamicVariables</category>
<attributes>
<package>ShoreComponents-DynamicVariables</package>
</attributes>
</class>

<class>
<name>ShoreWebTree</name>
<environment>Seaside</environment>
<super>Seaside.WAComponent</super>
<private>false</private>
<indexed-type>none</indexed-type>
<inst-vars>rootNodes eventHandler </inst-vars>
<class-inst-vars></class-inst-vars>
<imports></imports>
<category>ShoreComponents-Webtree</category>
<attributes>
<package>ShoreComponents-Webtree</package>
</attributes>
</class>

<comment>
<class-id>Seaside.ShoreWebTree</class-id>
<body>This class represents a component for providing html table based
web tree views. You can set the background color and add root
nodes (typically instances of WAWebTreeNode) using #addRootNode:
to it.

It is also possible to set an event handler to receive #onCollapseNode: 
and #onExpandNode: messages when the user clicks in the tree.

</body>
</comment>

<class>
<name>ShoreSelectWebTree</name>
<environment>Seaside</environment>
<super>Seaside.ShoreWebTree</super>
<private>false</private>
<indexed-type>none</indexed-type>
<inst-vars></inst-vars>
<class-inst-vars></class-inst-vars>
<imports></imports>
<category>ShoreComponents-Webtree</category>
<attributes>
<package>ShoreComponents-Webtree</package>
</attributes>
</class>

<class>
<name>ShoreTabControl2</name>
<environment>Seaside</environment>
<super>Seaside.ShoreTabControl</super>
<private>false</private>
<indexed-type>none</indexed-type>
<inst-vars></inst-vars>
<class-inst-vars></class-inst-vars>
<imports></imports>
<category>ShoreComponents-Hierarchy</category>
<attributes>
<package>ShoreComponents-Hierarchy</package>
</attributes>
</class>

<class>
<name>ShoreDemo1ComponentWithForm</name>
<environment>Seaside</environment>
<super>Seaside.WAComponent</super>
<private>false</private>
<indexed-type>none</indexed-type>
<inst-vars>name surname </inst-vars>
<class-inst-vars></class-inst-vars>
<imports></imports>
<category>ShoreComponents-Demo1</category>
<attributes>
<package>ShoreComponents-Demo1</package>
</attributes>
</class>

<class>
<name>ShoreProgressUpdater</name>
<environment>Seaside</environment>
<super>Seaside.SUUpdater</super>
<private>false</private>
<indexed-type>none</indexed-type>
<inst-vars></inst-vars>
<class-inst-vars></class-inst-vars>
<imports></imports>
<category>ShoreComponents-Support</category>
<attributes>
<package>ShoreComponents-Support</package>
</attributes>
</class>

<class>
<name>ShoreDemo3</name>
<environment>Seaside</environment>
<super>Seaside.ShoreRootComponent</super>
<private>false</private>
<indexed-type>none</indexed-type>
<inst-vars>systemCategories contents model message </inst-vars>
<class-inst-vars></class-inst-vars>
<imports></imports>
<category>ShoreComponents-Demo3</category>
<attributes>
<package>ShoreComponents-Demo3</package>
</attributes>
</class>

<class>
<name>ShoreDemo1Introduction</name>
<environment>Seaside</environment>
<super>Seaside.ShoreDemo1Page</super>
<private>false</private>
<indexed-type>none</indexed-type>
<inst-vars></inst-vars>
<class-inst-vars></class-inst-vars>
<imports></imports>
<category>ShoreComponents-Demo1</category>
<attributes>
<package>ShoreComponents-Demo1</package>
</attributes>
</class>

<class>
<name>ShoreDatePickerLibrary</name>
<environment>Seaside</environment>
<super>Seaside.WAFileLibrary</super>
<private>false</private>
<indexed-type>none</indexed-type>
<inst-vars></inst-vars>
<class-inst-vars></class-inst-vars>
<imports></imports>
<category>ShoreComponents-Libraries</category>
<attributes>
<package>ShoreComponents-Libraries</package>
</attributes>
</class>

<class>
<name>ShoreRichEdit</name>
<environment>Seaside</environment>
<super>Seaside.WAComponent</super>
<private>false</private>
<indexed-type>none</indexed-type>
<inst-vars>content rtid valueHolder </inst-vars>
<class-inst-vars></class-inst-vars>
<imports></imports>
<category>ShoreComponents-Editors</category>
<attributes>
<package>ShoreComponents-Editors</package>
</attributes>
</class>

<class>
<name>ShoreDemo1TableDemo4</name>
<environment>Seaside</environment>
<super>Seaside.ShoreDemo1Page</super>
<private>false</private>
<indexed-type>none</indexed-type>
<inst-vars>table </inst-vars>
<class-inst-vars></class-inst-vars>
<imports></imports>
<category>ShoreComponents-Demo1</category>
<attributes>
<package>ShoreComponents-Demo1</package>
</attributes>
</class>

<class>
<name>ShoreList</name>
<environment>Seaside</environment>
<super>Seaside.WAComponent</super>
<private>false</private>
<indexed-type>none</indexed-type>
<inst-vars>data itemBlock filterText showItemBlock id onClickBlock </inst-vars>
<class-inst-vars></class-inst-vars>
<imports></imports>
<category>ShoreComponents-Lists</category>
<attributes>
<package>ShoreComponents-Lists</package>
</attributes>
</class>

<class>
<name>ShoreDemo3FullHeightList</name>
<environment>Seaside</environment>
<super>Seaside.ShoreList</super>
<private>false</private>
<indexed-type>none</indexed-type>
<inst-vars></inst-vars>
<class-inst-vars></class-inst-vars>
<imports></imports>
<category>ShoreComponents-Demo3</category>
<attributes>
<package>ShoreComponents-Demo3</package>
</attributes>
</class>

<class>
<name>ShoreDemo1TabControlDemo</name>
<environment>Seaside</environment>
<super>Seaside.ShoreDemo1Page</super>
<private>false</private>
<indexed-type>none</indexed-type>
<inst-vars>tab tab2 </inst-vars>
<class-inst-vars></class-inst-vars>
<imports></imports>
<category>ShoreComponents-Demo1</category>
<attributes>
<package>ShoreComponents-Demo1</package>
</attributes>
</class>

<class>
<name>ShorePanelDecoration</name>
<environment>Seaside</environment>
<super>Seaside.WADecoration</super>
<private>false</private>
<indexed-type>none</indexed-type>
<inst-vars>id open enabled </inst-vars>
<class-inst-vars></class-inst-vars>
<imports></imports>
<category>ShoreComponents-Panels</category>
<attributes>
<package>ShoreComponents-Panels</package>
</attributes>
</class>

<class>
<name>ShoreFileLibrary</name>
<environment>Seaside</environment>
<super>Seaside.WAFileLibrary</super>
<private>false</private>
<indexed-type>none</indexed-type>
<inst-vars></inst-vars>
<class-inst-vars>cache </class-inst-vars>
<imports></imports>
<category>ShoreComponents-Libraries</category>
<attributes>
<package>ShoreComponents-Libraries</package>
</attributes>
</class>

<class>
<name>ShoreDemo1StandardDialogsDemo</name>
<environment>Seaside</environment>
<super>Seaside.ShoreDemo1Page</super>
<private>false</private>
<indexed-type>none</indexed-type>
<inst-vars>sampleInput </inst-vars>
<class-inst-vars></class-inst-vars>
<imports></imports>
<category>ShoreComponents-Demo1</category>
<attributes>
<package>ShoreComponents-Demo1</package>
</attributes>
</class>

<class>
<name>ShoreXPPanel</name>
<environment>Seaside</environment>
<super>Seaside.WAComponent</super>
<private>false</private>
<indexed-type>none</indexed-type>
<inst-vars>sections </inst-vars>
<class-inst-vars></class-inst-vars>
<imports></imports>
<category>ShoreComponents-Panels</category>
<attributes>
<package>ShoreComponents-Panels</package>
</attributes>
</class>

<class>
<name>ShoreTableColumn</name>
<environment>Seaside</environment>
<super>Core.Object</super>
<private>false</private>
<indexed-type>none</indexed-type>
<inst-vars>clickBlock formatBlock hasTotal title sortBlock valueBlock styleBlock renderBlock isReversed groupBy visible </inst-vars>
<class-inst-vars></class-inst-vars>
<imports></imports>
<category>ShoreComponents-Tables</category>
<attributes>
<package>ShoreComponents-Tables</package>
</attributes>
</class>

<shared-variable>
<name>DemoMapping</name>
<environment>Seaside.ShoreDemo1DemosMenu</environment>
<private>false</private>
<constant>false</constant>
<category>class variables</category>
<initializer>nil</initializer>
<attributes>
<package>ShoreComponents-Demo1</package>
</attributes>
</shared-variable>

<shared-variable>
<name>XHtmlCharacters</name>
<environment>Seaside.ShoreEncoder</environment>
<private>false</private>
<constant>false</constant>
<category>class variables</category>
<initializer>nil</initializer>
<attributes>
<package>ShoreComponents-Kernel</package>
</attributes>
</shared-variable>

<shared-variable>
<name>XHtmlCharacters</name>
<environment>Seaside.ShoreCanvas</environment>
<private>false</private>
<constant>false</constant>
<category>class variables</category>
<initializer>nil</initializer>
<attributes>
<package>ShoreComponents-Kernel</package>
</attributes>
</shared-variable>

<methods>
<class-id>Seaside.ShoreDemo1Page</class-id> <category>rendering</category>

<body package="ShoreComponents-Demo1" selector="rendererClass">rendererClass 
	"Returns the receivers default renderer class"

	^ ShoreCanvas</body>
</methods>

<methods>
<class-id>Seaside.ShoreDemo1Page</class-id> <category>accessing</category>

<body package="ShoreComponents-Demo1" selector="pageTitle">pageTitle

	^ 'Demo'</body>
</methods>

<methods>
<class-id>Seaside.ShoreDemo1Page</class-id> <category>path</category>

<body package="ShoreComponents-Demo1" selector="updateUrl:">updateUrl: aUrl

	aUrl path add: self class name</body>
</methods>

<methods>
<class-id>Seaside.ShoreDemo1Page class</class-id> <category>as yet unclassified</category>

<body package="ShoreComponents-Demo1" selector="menuName">menuName

	^ 'Demo' translated</body>

<body package="ShoreComponents-Demo1" selector="menuPriority">menuPriority

	^ 100

	</body>

<body package="ShoreComponents-Demo1" selector="registerToMenu">registerToMenu

	ShoreDemo1DemosMenu register: self.</body>
</methods>

<methods>
<class-id>Seaside.ShoreStandardFiles</class-id> <category>private</category>

<body package="ShoreComponents-Libraries" selector="globalFileFor:">globalFileFor: aCollection
	^String streamContents:
		[ :aStream |
		aCollection do:
			[ :each |
			aStream nextPutAll: (self perform: each) ]]
</body>
</methods>

<methods>
<class-id>Seaside.ShoreStandardFiles</class-id> <category>accessing</category>

<body package="ShoreComponents-Libraries" selector="globalFileSelectors">globalFileSelectors
	^self subclassResponsibility</body>

<body package="ShoreComponents-Libraries" selector="individualFileSelectors">individualFileSelectors
	^self subclassResponsibility</body>

<body package="ShoreComponents-Libraries" selector="selectorsToInclude">selectorsToInclude
	^ self isOptimized ifTrue:
		[self globalFileSelectors]
	ifFalse:
		[self individualFileSelectors]</body>
</methods>

<methods>
<class-id>Seaside.ShoreStandardFiles</class-id> <category>testing</category>

<body package="ShoreComponents-Libraries" selector="isOptimized">isOptimized
	^true</body>
</methods>

<methods>
<class-id>Seaside.ShoreDemo1ComponentWithForm2</class-id> <category>initialization</category>

<body package="ShoreComponents-Demo1" selector="initialize">initialize

	super initialize.

	person := ShoreDemo1ComponentWithForm  new.
	description := 'description' translated.</body>
</methods>

<methods>
<class-id>Seaside.ShoreDemo1ComponentWithForm2</class-id> <category>style informations</category>

<body package="ShoreComponents-Demo1" selector="style">style

	^ '
.shoreDemo1ComponentWithForm2 { background: #ecf1fd }
'</body>
</methods>

<methods>
<class-id>Seaside.ShoreDemo1ComponentWithForm2</class-id> <category>accessing</category>

<body package="ShoreComponents-Demo1" selector="children">children

	^ Array with: person </body>

<body package="ShoreComponents-Demo1" selector="description">description
	^description</body>

<body package="ShoreComponents-Demo1" selector="description:">description: anObject
	description := anObject</body>
</methods>

<methods>
<class-id>Seaside.ShoreDemo1ComponentWithForm2</class-id> <category>rendering</category>

<body package="ShoreComponents-Demo1" selector="renderContentOn:">renderContentOn: html

	html div class: #shoreDemo1ComponentWithForm2; with: [
		html form with: [
			html table: [
				html tableRowWithLabel: 'Person:' translated 
					column:  [html render: person.].
				html tableRowWithLabel: 'Description:' translated 
					column:  [html textInput on: #description of: self] ].
			html buttons: [ html submitButton callback: [ self shoreInform: 'Submit button callback two' translated ] ] ].
	].</body>

<body package="ShoreComponents-Demo1" selector="rendererClass">rendererClass 
	"Returns the receivers default renderer class"

	^ ShoreCanvas</body>
</methods>

<methods>
<class-id>Seaside.ShoreDemo1NestedFormsDemo</class-id> <category>rendering</category>

<body package="ShoreComponents-Demo1" selector="renderContentOn:">renderContentOn: html

	html heading: self pageTitle.

	html paragraph: 'Simple component with a form:' translated.
	html render: component1.
	
	html paragraph: 'The component with a form which includes the next component with a form:' translated.
	html render: component2.
</body>
</methods>

<methods>
<class-id>Seaside.ShoreDemo1NestedFormsDemo</class-id> <category>initialization</category>

<body package="ShoreComponents-Demo1" selector="initialize">initialize
	super initialize.
	component1 := ShoreDemo1ComponentWithForm new.
	component2 := ShoreDemo1ComponentWithForm2 new</body>
</methods>

<methods>
<class-id>Seaside.ShoreDemo1NestedFormsDemo</class-id> <category>accessing</category>

<body package="ShoreComponents-Demo1" selector="children">children

	^ Array with: component1 with: component2.</body>

<body package="ShoreComponents-Demo1" selector="pageTitle">pageTitle

	^ 'Nested forms demo' translated</body>
</methods>

<methods>
<class-id>Seaside.ShoreDemo1NestedFormsDemo class</class-id> <category>as yet unclassified</category>

<body package="ShoreComponents-Demo1" selector="menuName">menuName

	^ 'Nested forms' translated</body>

<body package="ShoreComponents-Demo1" selector="menuPriority">menuPriority

	^ 10

	</body>
</methods>

<methods>
<class-id>Seaside.ShoreDemo1NestedFormsDemo class</class-id> <category>initialization</category>

<body package="ShoreComponents-Demo1" selector="initialize">initialize

	self registerToMenu
</body>
</methods>

<methods>
<class-id>Seaside.ShoreStandardScheme</class-id> <category>stylesheets</category>

<body package="ShoreComponents-Libraries" selector="componentCss">componentCss

^ '

.shoreComponent {
	background-color: #ecf1fd;
	border: 1px solid #8e98b5;
}

.shoreComponentImportantPart {
	background-color: #c6d3f7;
	font-weight: bold;
}

.shoreComponentImportantPart a {
	text-decoration: none;
}

.shoreComponentList {
	background-color: #c6d3f7;
	font-weight: bold;
}

.shoreComponentListItem {
	background-color: #c6d3f7;
	font-weight: bold;
}

.shoreComponentListItem:hover {
	background-color: #c6d3f7;
}

.shoreComponenNote {
	color: gray;
}

.shoreComponentButton {
	border: 1px solid #8e98b5;
	background: #8e98b5;
}

.shoreComponentButtonDisabled {
	border: 1px solid gray;
	color: gray;
}

.shoreComponentInput {
	border: 1px solid #8e98b5;
}


'</body>

<body package="ShoreComponents-Libraries" selector="controlCss">controlCss

^ '

.shoreControl {
	background-color: #ecf1fd;
	border: 1px solid #3d64bc;
}

.shoreControlItem {
	background-color: white;
}

.shoreControlItem:hover {
	background-color: #3d64bc;	
	color: white;
}

'</body>

<body package="ShoreComponents-Libraries" selector="formCss">formCss

^ '

.shoreForm {
	border: 2px solid #3d64bc;;
	background-color: #ecf1fd;
}

.shoreForm {
	border: 2px solid #3d64bc;;
	background-color: #ecf1fd;
}

.shoreForm h1 {
	font-size: 120%;
	font-weight: bold;
}

.shoreForm p {
	border: 1px solid #e0e0e7;
	background-color: rgb(247, 249, 254);
}

.shoreFormInput {
	border: 1px solid #e0e0e7;
	background-color: white;
}

.shoreFormButton {
	font-size: 9pt;
	font-weight: bold;
	text-decoration: none;
}

'</body>

<body package="ShoreComponents-Libraries" selector="generalCss">generalCss

^ '

h1 {
	font-size: 200%;	
}

'</body>

<body package="ShoreComponents-Libraries" selector="layoutCss">layoutCss

^ '
.shorePageHeader {
	color: white;
	border: 0px;
	font: 16pt sans-serif;
	font-weight: bold;
	background-color: #3d64bc;
	background-image: url(logo.png);
}

.shorePageHeaderSubtitle {
	font: 9pt sans-serif;
	font-weight: bold;;
}

.shorePageFooter {
	border: 1px solid black;
	background-color: #ccccee;
}
'</body>

<body package="ShoreComponents-Libraries" selector="panelCss">panelCss

^ '
.shorePanel {

}

.shorePanelSection {
	background-color: rgb(214, 223, 247);
}

.shorePanelSectionHeader {
	background-color: #555577;
	color: white;
	font-weight: bold;
}

.shorePanelSectionContent {
	background-color: rgb(214, 223, 247);
	color: black;
	font-weight: normal;
}

.shorePanelSectionContent a {
	text-decoration: none;
}

'</body>

<body package="ShoreComponents-Libraries" selector="schemeCss">schemeCss

^ '

.shoreForm {
	border: 2px solid #3d64bc;;
	background-color: #ecf1fd;
}

.shoreForm {
	border: 2px solid #3d64bc;;
	background-color: #ecf1fd;
}

.shoreForm h1 {
	font-size: 120%;
	font-weight: bold;
}

.shoreForm p {
	border: 1px solid #e0e0e7;
	background-color: rgb(247, 249, 254);
}

.shoreFormInput {
	border: 1px solid #e0e0e7;
	background-color: white;
}

.shoreFormButton {
	font-size: 9pt;
	font-weight: bold;
	text-decoration: none;
}


.shoreControl {
	background-color: #ecf1fd;
	border: 1px solid #3d64bc;
}

.shoreControlItem {
	background-color: white;
}

.shoreControlItem:hover {
	background-color: #3d64bc;	
	color: white;
}

'</body>
</methods>

<methods>
<class-id>Seaside.ShoreStandardScheme</class-id> <category>accessing</category>

<body package="ShoreComponents-Libraries" selector="globalFileSelectors">globalFileSelectors
	^ #(standardSchemeCss)</body>

<body package="ShoreComponents-Libraries" selector="individualFileSelectors">individualFileSelectors
	^#(#componentCss #controlCss #formCss #generalCss #layoutCss #panelCss #schemeCss)</body>

<body package="ShoreComponents-Libraries" selector="standardSchemeCss">standardSchemeCss
	^self globalFileFor: self individualFileSelectors</body>
</methods>

<methods>
<class-id>Seaside.ShoreStandardScheme</class-id> <category>images</category>

<body package="ShoreComponents-Libraries" selector="logoPng">logoPng
	| xxxCache |
	xxxCache := #(nil) beMutable.
	(xxxCache at: 1) isNil ifTrue: [
		xxxCache at: 1 put: #(137 80 78 71 13 10 26 10 0 0 0 13 73 72 68 82 0 0 0 32 0 0 0 32 8 6 0 0 0 115 122 122 244 0 0 1 171 73 68 65 84 120 94 99 0 130 255 3 140 7 139 3 42 62 252 103 168 255 79 30 206 188 244 159 65 213 27 195 112 102 102 134 255 50 50 12 255 61 61 25 254 199 197 49 252 95 188 24 130 159 60 161 166 3 60 38 252 103 96 102 131 27 40 36 196 240 63 57 153 225 255 197 139 12 255 129 178 88 241 135 15 212 114 128 247 52 184 65 162 162 12 255 215 175 199 109 41 245 29 80 252 252 63 3 11 39 88 175 149 21 113 22 83 215 1 62 51 193 250 216 217 73 179 156 122 14 176 175 3 235 83 84 28 40 7 248 205 25 224 16 40 120 8 79 253 205 205 3 225 0 16 54 72 128 231 247 59 119 6 194 1 165 175 254 51 240 72 128 245 243 241 49 252 255 252 153 222 14 0 225 196 195 240 168 80 86 30 8 7 128 112 208 82 184 129 142 142 3 225 0 16 118 106 129 27 186 118 237 64 56 0 132 21 157 192 102 105 104 12 148 3 160 117 131 128 192 64 57 192 178 8 108 150 146 210 64 56 0 164 159 75 20 108 86 102 230 64 56 64 55 10 108 14 11 11 195 255 111 223 232 237 0 231 118 184 129 83 167 210 59 27 58 52 194 13 243 247 167 103 65 84 243 243 63 131 113 26 220 32 27 27 122 214 5 57 55 254 51 200 88 194 13 241 245 165 103 109 232 214 11 111 138 49 50 50 252 175 175 167 87 123 0 228 107 121 123 184 70 126 126 134 255 7 15 146 110 57 233 14 40 123 251 159 193 36 243 63 3 35 51 74 98 251 243 135 60 203 137 119 0 136 15 74 225 236 252 40 77 239 237 219 201 183 152 56 7 100 93 253 207 96 158 255 159 129 141 7 174 136 147 147 225 127 95 31 229 22 227 119 128 85 233 127 6 9 3 148 174 21 168 193 153 149 69 89 112 19 239 128 145 218 59 6 0 56 48 152 98 61 78 225 60 0 0 0 0 73 69 78 68 174 66 96 130) asByteArray ].
	^ xxxCache at: 1</body>
</methods>

<methods>
<class-id>Seaside.ShoreTabControl</class-id> <category>rendering</category>

<body package="ShoreComponents-Hierarchy" selector="renderContentOn:">renderContentOn: html

	html div class: 'shoreTabControl'; with: [
		html div class: 'navigationOptions'; with: [self renderOptionsOn: html].
		html div class: 'navigationContent'; with: [self renderSelectionOn: html].
	]</body>

<body package="ShoreComponents-Hierarchy" selector="rendererClass">rendererClass 
	"Returns the receivers default renderer class"

	^ ShoreCanvas</body>

<body package="ShoreComponents-Hierarchy" selector="renderOptionsOn:">renderOptionsOn: html

	html unorderedList
		selected: self selection;
		callback: [:v | self select: v];
		labels: [:ea | self labelForOption: ea];
		list: self options;
		with: nil
</body>

<body package="ShoreComponents-Hierarchy" selector="renderSelectionOn:">renderSelectionOn: html

	html render: self selectedComponent</body>
</methods>

<methods>
<class-id>Seaside.ShoreTabControl</class-id> <category>initialization</category>

<body package="ShoreComponents-Hierarchy" selector="initialize">initialize
	
	super initialize.

	components := OrderedCollection new.
	selection := WAStateHolder new</body>
</methods>

<methods>
<class-id>Seaside.ShoreTabControl</class-id> <category>accessing</category>

<body package="ShoreComponents-Hierarchy" selector="add:label:">add: aComponent label: aString

	components add: aString -&gt; aComponent</body>

<body package="ShoreComponents-Hierarchy" selector="labelForOption:">labelForOption: anObject

	^ anObject displayString</body>

<body package="ShoreComponents-Hierarchy" selector="labels">labels
	"Return the tabs labels"

	^ self options</body>

<body package="ShoreComponents-Hierarchy" selector="options">options

	^ components collect: [:ea | ea key]</body>
</methods>

<methods>
<class-id>Seaside.ShoreTabControl</class-id> <category>hierarchy</category>

<body package="ShoreComponents-Hierarchy" selector="children">children

	^Array with: self selectedComponent.</body>
</methods>

<methods>
<class-id>Seaside.ShoreTabControl</class-id> <category>selection</category>

<body package="ShoreComponents-Hierarchy" selector="select:">select: anObject

	selection contents: anObject.
	self selectionChanged</body>

<body package="ShoreComponents-Hierarchy" selector="selectedComponent">selectedComponent

	^ (components detect: [:ea | ea key = self selection] ifNone: [^ nil]) value</body>

<body package="ShoreComponents-Hierarchy" selector="selection">selection

	^ selection contents</body>

<body package="ShoreComponents-Hierarchy" selector="selectionChanged">selectionChanged
	</body>
</methods>

<methods>
<class-id>Seaside.ShoreId class</class-id> <category>instance creation</category>

<body package="ShoreComponents-Kernel" selector="new">new
	"Generates new unique identifier for html element etc "

	id ifNil: [ id := 0 ].
	id &gt; 1048576 ifTrue: [ id := 0 ].
	id := id + 1.
	^ 'eid', id displayString.
		</body>
</methods>

<methods>
<class-id>Seaside.ShoreBatchedList</class-id> <category>initialization</category>

<body package="ShoreComponents-Lists" selector="initialize">initialize 

	super initialize. 

	page := 1.
	pageSize := 15.
	title := 'List' translated.
	sorters := OrderedCollection  new.
	activeSorter := nil.

	id := ShoreId new.
	idLeft1 := ShoreId new.
	idRight1 := ShoreId new.
	idLeft2 := ShoreId new.
	idRight2 := ShoreId new.
</body>

<body package="ShoreComponents-Lists" selector="states">states

	^ Array with: self</body>
</methods>

<methods>
<class-id>Seaside.ShoreBatchedList</class-id> <category>accessing</category>

<body package="ShoreComponents-Lists" selector="activeSorter">activeSorter
	^activeSorter</body>

<body package="ShoreComponents-Lists" selector="activeSorter:">activeSorter: sorterName

	activeSorter := sorterName.
	self data: self data.</body>

<body package="ShoreComponents-Lists" selector="data">data
	^data</body>

<body package="ShoreComponents-Lists" selector="data:">data: anObject

	activeSorter ifNil: [ 
		data := anObject.
		^ self ].

	data := (anObject asSortedCollection: activeSorter value) asOrderedCollection

	</body>

<body package="ShoreComponents-Lists" selector="filteredData">filteredData
	"This needs to be more generic, since we do not always batch on classes"

	(filterText isEmptyOrNil or: [self showItemBlock isNil]) 
		ifTrue: [^data]
		ifFalse: [^data select: [:e | self showItemBlock value: e value: filterText]]</body>

<body package="ShoreComponents-Lists" selector="itemBlock">itemBlock
	^itemBlock</body>

<body package="ShoreComponents-Lists" selector="itemBlock:">itemBlock: anObject
	itemBlock := anObject</body>

<body package="ShoreComponents-Lists" selector="noteBlock">noteBlock
	^noteBlock</body>

<body package="ShoreComponents-Lists" selector="noteBlock:">noteBlock: anObject
	noteBlock := anObject</body>

<body package="ShoreComponents-Lists" selector="page">page
	^page</body>

<body package="ShoreComponents-Lists" selector="page:">page: anObject
	page := anObject</body>

<body package="ShoreComponents-Lists" selector="pageSize">pageSize
	^pageSize</body>

<body package="ShoreComponents-Lists" selector="pageSize:">pageSize: anObject
	pageSize := anObject</body>

<body package="ShoreComponents-Lists" selector="setSorter:">setSorter: sorterName

	activeSorter := sorterName
</body>

<body package="ShoreComponents-Lists" selector="showItemBlock">showItemBlock
	^ showItemBlock</body>

<body package="ShoreComponents-Lists" selector="showItemBlock:">showItemBlock: aBlock
	showItemBlock := aBlock</body>

<body package="ShoreComponents-Lists" selector="sorters">sorters
	^sorters</body>

<body package="ShoreComponents-Lists" selector="sorters:">sorters: anObject
	sorters := anObject</body>

<body package="ShoreComponents-Lists" selector="title">title
	^title</body>

<body package="ShoreComponents-Lists" selector="title:">title: anObject
	title := anObject</body>
</methods>

<methods>
<class-id>Seaside.ShoreBatchedList</class-id> <category>rendering</category>

<body package="ShoreComponents-Lists" selector="renderComponentOn:">renderComponentOn: html 

	| pageData pagesCount |	

	pageData := self filteredData.
	pagesCount := (pageData size - 1) // pageSize + 1.
	pageData := pageData copyFrom: ((page - 1) * pageSize + 1 max: 1)
				to: (page * pageSize min: pageData size).
	self renderHeaderOn: html.
	self renderPageData: pageData on: html.

	self renderScriptsOn: html page: page pagesCount: pagesCount.

	html div class: #shoreComponentList; class: #shoreBatchedListPages; with: [
		self renderPagesOn: html pagesCount: pagesCount.].

	
</body>

<body package="ShoreComponents-Lists" selector="renderContentOn:">renderContentOn: html 

	html div class: #shoreComponent; class: #shoreBatchedList; with: [
		 html div id: id; with: [
			self renderComponentOn: html ]. 
			html form class: #shoreComponentImportantPart; class: #shoreBatchedListNavigation; with: [
				self renderFiltersOn: html. 
				self renderNavigationOn: html.].
		
	].
</body>

<body package="ShoreComponents-Lists" selector="rendererClass">rendererClass 
	"Returns the receivers default renderer class"

	^ ShoreCanvas</body>

<body package="ShoreComponents-Lists" selector="renderFiltersOn:">renderFiltersOn: html 

	showItemBlock ifNotNil: 
		[ 
			html textInput callback: [:v |
				page := 1. 
				filterText := v.
					(filterText beginsWith: '*') 
						ifFalse: [filterText size &gt; 1 ifTrue: [filterText := '*' , filterText]].
					(filterText endsWith: '*') 
						ifFalse: [filterText size &gt; 1 ifTrue: [filterText := filterText , '*']]].
			html space.
			html submitButton text: 'Filter On']</body>

<body package="ShoreComponents-Lists" selector="renderHeaderOn:">renderHeaderOn: html 

	html div  class: #shoreComponentImportantPart; class: #shoreBatchedListNavigation; with: [
		self renderSortersOn: html.
		html text: title].
	</body>

<body package="ShoreComponents-Lists" selector="renderNavigationOn:">renderNavigationOn: html 

	| pagesCount |

	pagesCount := (self filteredData size - 1) // pageSize + 1.

	html space.
	page &lt;= 1 
		ifFalse: 	[
			html span class: #shoreComponentButton; class: #shoreLiveBatchdeListButton;
				onClickAction: [page := page - 1];
				with: '&lt;']
		ifTrue: 	[
			html span class: #shoreComponentButtonDisabled; class: #shoreLiveBatchdeListButtonDisabled;
				with: '&lt;'].
	page &gt;= pagesCount 
		ifFalse: 	[
			html span class: #shoreComponentButton; class: #shoreLiveBatchdeListButton;
				onClickAction: [page := page + 1];
				with: '&gt;']
		ifTrue: 	[
			html span  class: #shoreComponentButtonDisabled; class: #shoreLiveBatchdeListButtonDisabled;
				with: '&gt;'].

</body>

<body package="ShoreComponents-Lists" selector="renderPageData:on:">renderPageData: pageData on: html 
	noteBlock
		ifNil: [pageData
				do: [:item | html
						div: [html div class: #shoreBatchedListItem;
								
								with: [itemBlock
										ifNil: [html text: item displayString]
										ifNotNil: [itemBlock value: item value: html]]]]]
		ifNotNil: [html table class: #layout; class: #shoreBatchedListTable;
				with: [pageData
						do: [:item | html tableRow
								with: [html tableData class: #shoreBatchedListItem;
										
										with: [itemBlock
												ifNil: [html text: item displayString]
												ifNotNil: [itemBlock value: item value: html]].
									html tableData class: #shoreComponenNote;
										 class: #shoreBatchedListItemNote;
										
										with: [noteBlock value: item value: html]]]]]</body>

<body package="ShoreComponents-Lists" selector="renderPagesOn:pagesCount:">renderPagesOn: html pagesCount: pagesCount

	html text: ('[Page {1} of {2}]' format: (Array with: page with: pagesCount )).</body>

<body package="ShoreComponents-Lists" selector="renderScriptsOn:page:pagesCount:">renderScriptsOn: html page: pageIndex pagesCount: pagesCount


	
</body>

<body package="ShoreComponents-Lists" selector="renderSorterLink:on:">renderSorterLink: sorter on: html

	html anchor callback: [ self activeSorter: sorter];
		with: sorter key displayString.</body>

<body package="ShoreComponents-Lists" selector="renderSortersOn:">renderSortersOn: html

	| names |

	names := sorters asOrderedCollection.

	names isEmpty ifFalse: [
		html div class: #shoreBatchedListSorters; with: [
			html  text: '(sort by '.
			names allButLast do: [:sorter |
				self renderSorterLink: sorter on: html.
				html text: ', '].
			self renderSorterLink: names last on: html.
			html text: ')'. ] ]</body>
</methods>

<methods>
<class-id>Seaside.ShoreBatchedList</class-id> <category>sorting</category>

<body package="ShoreComponents-Lists" selector="addSorter:block:">addSorter: name block: sortBlock

	sorters add: (name -&gt; sortBlock).
</body>
</methods>

<methods>
<class-id>Seaside.ShoreLiveBatchedList</class-id> <category>rendering</category>

<body package="ShoreComponents-Lists" selector="renderFiltersOn:">renderFiltersOn: html 

	showItemBlock ifNotNil: 
		[ 
			html textInput callback: [:v | 
				page := 1.
				filterText := v.
					(filterText beginsWith: '*') 
						ifFalse: [filterText size &gt; 1 ifTrue: [filterText := '*' , filterText]].
					(filterText endsWith: '*') 
						ifFalse: [filterText size &gt; 1 ifTrue: [filterText := filterText , '*']]].
			html space.
			html submitButton 
				onClick: (html updater
					id: id;
					triggerForm: html formId;
					callback: [ :h | self renderComponentOn: h ]);
				text: 'Filter On']</body>

<body package="ShoreComponents-Lists" selector="renderNavigationOn:">renderNavigationOn: html 

	| pagesCount |

	pagesCount := (self filteredData size - 1) // pageSize + 1.

	html space.
	self renderDecreaseLinkOn: html pagesCount: pagesCount.
	self renderIncreaseLinkOn: html pagesCount: pagesCount.
</body>

<body package="ShoreComponents-Lists" selector="renderScriptsOn:page:pagesCount:">renderScriptsOn: html page: pageIndex pagesCount: pagesCount

	| script |
	
	script := '
		var button = document.getElementById("{1}");
		if (button) \{ button.className="{2}" \};
		button = document.getElementById("{3}");
		if (button) \{ button.className="{4}" \}; '.

	pageIndex &lt;= 1
		ifTrue: 	[
				html script: (script format: (Array 
					with: idLeft1 with: #hidden 
					with: idLeft2 with: #shoreLiveBatchdeListButtonDisabled )) ]
		ifFalse: 	[
				html script: (script format: (Array 
					with: idLeft2 with: #hidden 
					with: idLeft1 with: #shoreLiveBatchdeListButton )) ].
	
	pageIndex &gt;= pagesCount 
		ifTrue: 	[
				html script: (script format: (Array 
					with: idRight1 with: #hidden 
					with: idRight2 with: #shoreLiveBatchdeListButtonDisabled )) ]
		ifFalse: 	[
				html script: (script format: (Array 
					with: idRight2 with: #hidden 
					with: idRight1 with: #shoreLiveBatchdeListButton )) ].


	
</body>

<body package="ShoreComponents-Lists" selector="renderSorterLink:on:">renderSorterLink: sorter on: html

	html anchor onClick: (html updater id: id; 
		callback: [:h | 
			self activeSorter: sorter.
			self renderComponentOn: h]);
		with: sorter key displayString.</body>
</methods>

<methods>
<class-id>Seaside.ShoreLiveBatchedList</class-id> <category>as yet unclassified</category>

<body package="ShoreComponents-Lists" selector="renderDecreaseLinkOn:pagesCount:">renderDecreaseLinkOn: html pagesCount: pagesCount

	| style1 style2 |
	page &lt;= 1 
		ifTrue: 	[
			style1 := #hidden.
			style2 := 'shoreComponentButtonDisabled shoreLiveBatchdeListButtonDisabled' ]
		ifFalse: [ 
			style1 := 'shoreComponentButton shoreLiveBatchdeListButton'.
			style2 := #hidden. ].

	html span id: idLeft1; class: style1;
		onClick: (html updater id: id; 
			evalScripts: true;
			callback: [:h | 
				page := page - 1.
				self renderComponentOn: h]);
			 with: '&lt;'.

	html span id: idLeft2; class: style2; with: '&lt;'</body>

<body package="ShoreComponents-Lists" selector="renderIncreaseLinkOn:pagesCount:">renderIncreaseLinkOn: html pagesCount: pagesCount

	| style1 style2 |
	page &gt;= pagesCount
		ifTrue: 	[
			style1 := #hidden.
			style2 := 'shoreComponentButtonDisabled shoreLiveBatchdeListButtonDisabled'.]
		ifFalse: [ 
			style1 := 'shoreComponentButton shoreLiveBatchdeListButton'.
			style2 := #hidden. ].

	html span id: idRight1;class: style1;
		onClick: (html updater id: id; 
			evalScripts: true;
			callback: [:h | 
				page := page + 1.
				self renderComponentOn: h]);
			 with: '&gt;'.

	html span id: idRight2; class: style2; with: '&gt;'</body>
</methods>

<methods>
<class-id>Seaside.ShoreLiveBatchedList</class-id> <category>convenience</category>

<body package="ShoreComponents-Lists" selector="registerForBacktracking">registerForBacktracking
</body>
</methods>

<methods>
<class-id>Seaside.ShoreEncoder class</class-id> <category>initialization</category>

<body package="ShoreComponents-Kernel" selector="initialize">initialize
	"self initialize"
	XHtmlCharacters := Array new: 256.
	
	0 to: 255 do: [:ea | XHtmlCharacters at: ea + 1 put: ea asCharacter].
	
	#($" 'quot' $&lt; 'lt' $&amp; 'amp' $&gt; 'gt') pairsDo:
		[:c :s | XHtmlCharacters at: (c asInteger + 1) put: ('&amp;',s,';') ].

	XHtmlCharacters at: Character cr asciiValue +1 put: '&lt;br/&gt;'
	</body>
</methods>

<methods>
<class-id>Seaside.ShoreEncoder class</class-id> <category>encode-decode</category>

<body package="ShoreComponents-Kernel" selector="encode:">encode: anObject

	| charOrString |
	^ String streamContents: [:s |
		anObject displayString do: [:char |
			charOrString := XHtmlCharacters at: char asInteger + 1 ifAbsent: [char asCharacter].
			charOrString isString
				ifTrue: [s nextPutAll: charOrString]
				ifFalse: [s nextPut: charOrString]]]</body>
</methods>

<methods>
<class-id>Seaside.ShoreDemo1ListsDemo</class-id> <category>initialization</category>

<body package="ShoreComponents-Demo1" selector="initialize">initialize

	| data |

	data := Smalltalk allClasses select: [:c | c name beginsWith: #Shore ].

	super initialize.

	list := ShoreList new.
	list showItemBlock: [:item :filterText | filterText match: item name displayString].
	list onClickBlock: [:item | self shoreInform: item ].
	list data: data.


	list1 := ShoreBatchedList  new.
	list1 title: 'Shore Batched List'.
	list1 data: data.

	list2 := ShoreBatchedList  new.
	list2 title: 'Shore Batched List'.
	list2 data: data.
	list2 itemBlock: 
			[:item :html | 
			html anchor callback: [self browse: item];
				with: item displayString].
	list2 noteBlock: [:item :html | html text: item name size displayString].
	list2 showItemBlock: [:item :filterText | filterText match: item name displayString].
	list2 addSorter: 'name ascending' translated block: [:a :b | a name &lt;= b name].
	list2 addSorter: 'name descending' translated block: [:a :b | b name &lt;= a name].

	list3 := ShoreLiveBatchedList new.
	list3 title: 'Shore Live Batched List'.
	list3 data: data.

	list4 := ShoreLiveBatchedList new.
	list4 title: 'Shore Live Batched List'.
	list4 data: data.
	list4 itemBlock: 
			[:item :html | 
			html anchor callback: [self browse: item];
				with: item displayString].
	list4 noteBlock: [:item :html | html text: item name size displayString].
	list4 showItemBlock: [:item :filterText | filterText match: item name displayString].
	list4 addSorter: 'name ascending' translated block: [:a :b | a name &lt;= b name].
	list4 addSorter: 'name descending' translated block: [:a :b | b name &lt;= a name]</body>
</methods>

<methods>
<class-id>Seaside.ShoreDemo1ListsDemo</class-id> <category>accessing</category>

<body package="ShoreComponents-Demo1" selector="children">children

	^ Array with: list with: list1 with: list2 with: list3 with: list4</body>

<body package="ShoreComponents-Demo1" selector="pageTitle">pageTitle

	^ 'ShoreBatchedList demo' translated</body>
</methods>

<methods>
<class-id>Seaside.ShoreDemo1ListsDemo</class-id> <category>actions</category>

<body package="ShoreComponents-Demo1" selector="browse:">browse: aClass
	| browser |
	browser := WABrowser fullOnClass: aClass.
	browser addDecoration: (WAWindowDecoration new title: aClass name; yourself).
	self call: browser.</body>
</methods>

<methods>
<class-id>Seaside.ShoreDemo1ListsDemo</class-id> <category>rendering</category>

<body package="ShoreComponents-Demo1" selector="renderContentOn:">renderContentOn: html

	html heading: self pageTitle.

	html paragraph: 'Simple list' translated.
	html render: list.

	html paragraph: 'Simple batched list' translated.
	html render: list1.

	html paragraph: 'Batched list with actions, sorting and notes' translated.
	html render: list2.

	html paragraph: 'Simple live batched list' translated.
	html render: list3.

	html paragraph: 'Live batched list with actions, sorting and notes' translated.
	html render: list4.


</body>
</methods>

<methods>
<class-id>Seaside.ShoreDemo1ListsDemo class</class-id> <category>as yet unclassified</category>

<body package="ShoreComponents-Demo1" selector="menuName">menuName

	^ 'Lists' translated</body>

<body package="ShoreComponents-Demo1" selector="menuPriority">menuPriority

	^ 20

	</body>
</methods>

<methods>
<class-id>Seaside.ShoreDemo1ListsDemo class</class-id> <category>initialization</category>

<body package="ShoreComponents-Demo1" selector="initialize">initialize

	self registerToMenu
</body>
</methods>

<methods>
<class-id>Seaside.ShoreFormTag</class-id> <category>private</category>

<body package="ShoreComponents-Kernel" selector="after">after

	canvas context actionUrl parameters keysAndValuesDo:
		[:k :v |
		canvas hiddenInput name: k; value: v.
		canvas text: ' ']</body>
</methods>

<methods>
<class-id>Seaside.ShoreFormTag</class-id> <category>public</category>

<body package="ShoreComponents-Kernel" selector="with:">with: aBlock


	| oldStream newStream |
	
	(self document isKindOf: WAPrettyPrintedDocument)
		ifTrue: [ ^ super with: aBlock].
	
	oldStream := self document stream.
	newStream := oldStream class with: String new.
	self document stream: newStream. 

	ShoreCurrentForm use: self during: [
		canvas nest:  [
			self before.
			aBlock renderOn: canvas.] ].

	self document stream: oldStream.
	self document openTag: self tag attributes: attributes.
	oldStream nextPutAll: newStream reset contents.
	closed := true.

	self after.
	self document closeTag: self tag.


</body>
</methods>

<methods>
<class-id>Seaside.ShoreHelper</class-id> <category>rendering</category>

<body package="ShoreComponents-Kernel" selector="renderContentOn:">renderContentOn: html

	html div id: #shoreModalDialogOverlay; class: #hidden.

	html div id: #shoreProgressOverlay; class: #hidden.
	html div id: #shoreProgressSpinner; class: #hidden; with: [
		html image url: ('spinner.gif' asShoreUrl) ].

	html div id: #shoreModalDialogBox; class: #hidden;
		with: [ 
			html div id: #shoreModalDialogBoxHeader; with: [].
			html div id: #shoreModalDialog].

	html div id: #shoreContextMenu; class: #hidden; with: [
		html div id: #shoreContextMenuContent].

	html script: 'shoreResizeHandler(null);'.

</body>

<body package="ShoreComponents-Kernel" selector="rendererClass">rendererClass 
	"Returns the receivers default renderer class"

	^ ShoreCanvas</body>
</methods>

<methods>
<class-id>Seaside.ShorePageHeader</class-id> <category>accessing</category>

<body package="ShoreComponents-Hierarchy" selector="image">image
	^image</body>

<body package="ShoreComponents-Hierarchy" selector="image:">image: anObject
	image := anObject</body>

<body package="ShoreComponents-Hierarchy" selector="subtitle">subtitle
	^subtitle</body>

<body package="ShoreComponents-Hierarchy" selector="subtitle:">subtitle: anObject
	subtitle := anObject</body>

<body package="ShoreComponents-Hierarchy" selector="title">title
	^title</body>

<body package="ShoreComponents-Hierarchy" selector="title:">title: anObject
	title := anObject</body>
</methods>

<methods>
<class-id>Seaside.ShorePageHeader</class-id> <category>initialization</category>

<body package="ShoreComponents-Hierarchy" selector="initialize">initialize
	"Initializes the receiver"

	super initialize.

	title := 'Title' translated.
	subtitle := 'Subtitle' translated.
	image := nil.


	</body>

<body package="ShoreComponents-Hierarchy" selector="states">states
	^ Array with: self</body>

<body package="ShoreComponents-Hierarchy" selector="updateRoot:">updateRoot: anHtmlRoot
	"Updates the root of the html document by adding the title and subtitle"	

	super updateRoot: anHtmlRoot.	
	anHtmlRoot title: (self title, ' - ', self subtitle).

	</body>
</methods>

<methods>
<class-id>Seaside.ShorePageHeader</class-id> <category>rendering</category>

<body package="ShoreComponents-Hierarchy" selector="renderContentOn:">renderContentOn: html

	html div 
		class: #shorePageHeader; 
		with: [
			html text: title; break.
			html div class: #shorePageHeaderSubtitle; with: subtitle ].

	</body>

<body package="ShoreComponents-Hierarchy" selector="rendererClass">rendererClass 
	"Returns the receivers default renderer class"

	^ ShoreCanvas</body>
</methods>

<methods>
<class-id>Seaside.ShoreDemo1ContextMenu</class-id> <category>rendering</category>

<body package="ShoreComponents-Demo1" selector="renderContentOn:">renderContentOn: html

	| id1 id2 |

	html heading: self pageTitle.

	id1 := ShoreId new.
	id2 := ShoreId new.

	html div
		class: #bordered;
		id: id1;
		contextMenu: (Array 
			with: ('Item 1' translated -&gt; [ self shoreInform: 'Item 1' translated])
			with: ('Item 2' translated -&gt; [ self shoreInform: 'Item 2' translated])
			with: ('Item 3' translated -&gt; [ self shoreInform: 'Item 3' translated]));			
		with: 'click here with right mouse button...' translated.
	html assignContextMenuTo: id1.

	html paragraph
		id: id2;
		contextMenu: (Array 
			with: ('Item 4' translated -&gt; [ self inform: 'Item 4' translated])
			with: ('Item 5' translated -&gt; [ self inform: 'Item 5' translated])
			with: ('Item 6' translated -&gt; [ self inform: 'Item 6' translated]));			
		with: 'another menu...' translated.
	html assignContextMenuTo: id2.
	</body>
</methods>

<methods>
<class-id>Seaside.ShoreDemo1ContextMenu</class-id> <category>accessing</category>

<body package="ShoreComponents-Demo1" selector="pageTitle">pageTitle

	^ 'Context menu demo' translated</body>
</methods>

<methods>
<class-id>Seaside.ShoreDemo1ContextMenu class</class-id> <category>as yet unclassified</category>

<body package="ShoreComponents-Demo1" selector="menuName">menuName

	^ 'Context menu' translated</body>

<body package="ShoreComponents-Demo1" selector="menuPriority">menuPriority

	^ 40</body>
</methods>

<methods>
<class-id>Seaside.ShoreDemo1ContextMenu class</class-id> <category>initialization</category>

<body package="ShoreComponents-Demo1" selector="initialize">initialize

	self registerToMenu
</body>
</methods>

<methods>
<class-id>Seaside.ShoreDemo1DynamicFileDownload</class-id> <category>file contents</category>

<body package="ShoreComponents-Demo1" selector="csvContents">csvContents
	"Note that we return the field seperated by , instead of ; since this makes it correctly visible in Excel "

	^'"Hello","World"'</body>

<body package="ShoreComponents-Demo1" selector="logo">logo

	^'&lt;?xml version="1.0" encoding="UTF-8" standalone="no"?&gt;
&lt;!-- Created with Inkscape (http://www.inkscape.org/) --&gt;
&lt;svg
   xmlns:dc="http://purl.org/dc/elements/1.1/"
   xmlns:cc="http://web.resource.org/cc/"
   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
   xmlns:svg="http://www.w3.org/2000/svg"
   xmlns="http://www.w3.org/2000/svg"
   xmlns:sodipodi="http://inkscape.sourceforge.net/DTD/sodipodi-0.dtd"
   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
   id="svg2"
   sodipodi:version="0.32"
   inkscape:version="0.43"
   width="100"
   height="100"
   sodipodi:docbase="C:\temp\66"
   sodipodi:docname="shore.svg"
   version="1.0"&gt;

  &lt;defs
     id="defs5" /&gt;

  &lt;path
     style="opacity:1;fill:#307ae6;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:3.99999952;stroke-miterlimit:4.30000019;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
     d="M 90.68,2.0000008 L 2.0,2.0 L 2.0,98.0 L 2.6899998,97.999972 C 3.4731582,97.653796 3.3387582,97.689412 4.1899998,97.309924 C 7.6852063,95.752036 11.73007,93.90298 16.04,91.849924 C 20.349929,89.796964 24.921152,87.542212 29.51,85.099972 C 34.098848,82.657684 38.708067,80.025652 43.04,77.30002 C 45.205971,75.937108 47.308726,74.54386 49.31,73.129972 C 51.311273,71.71618 53.210393,70.291636 54.98,68.84002 C 56.749606,67.388404 58.36904,65.936116 59.84,64.46002 C 61.31096,62.983828 62.634665,61.477492 63.74,59.989972 C 64.845334,58.502548 65.737261,57.005524 66.41,55.52002 C 67.082739,54.03442 67.526845,52.580404 67.7,51.109972 C 67.808077,50.192308 67.805168,49.300679 67.73,48.470001 C 67.654832,47.639322 67.514029,46.855002 67.28,46.100001 C 66.811952,44.589998 66.047168,43.235313 65.09,41.960001 C 64.132832,40.684689 62.981216,39.491342 61.73,38.360001 C 60.478784,37.22866 59.120192,36.13809 57.77,35.060001 C 56.419808,33.981911 55.064096,32.90555 53.81,31.790001 C 52.555904,30.674452 51.412928,29.523729 50.45,28.280001 C 49.487072,27.036273 48.706678,25.722628 48.23,24.260001 C 47.991661,23.528692 47.830208,22.75305 47.75,21.950001 C 47.669792,21.146951 47.677683,20.316119 47.78,19.430001 C 47.90935,18.309777 48.215033,17.258452 48.68,16.280001 C 49.144966,15.30155 49.779344,14.397383 50.54,13.550001 C 51.300656,12.702618 52.1936,11.907018 53.21,11.180001 C 54.2264,10.452983 55.367801,9.7873672 56.6,9.1700008 C 59.064397,7.9352776 61.912025,6.9103432 65,6.0500008 C 68.087974,5.1896584 71.417955,4.491604 74.81,3.9200008 C 78.202045,3.3483976 81.663411,2.908516 85.04,2.5400008 C 87.005273,2.3255176 88.805571,2.168644 90.68,2.0000008 z "
     id="path2196" /&gt;
  &lt;path
     style="opacity:1;fill:#ffff00;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:3.99999952;stroke-miterlimit:4.30000019;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
     d="M 90.68,2.0000008 C 88.805571,2.168644 87.005273,2.3255176 85.04,2.5400008 C 81.663411,2.908516 78.202045,3.3483976 74.81,3.9200008 C 71.417955,4.491604 68.087974,5.1896584 65,6.0500008 C 61.912025,6.9103432 59.064397,7.9352776 56.6,9.1700008 C 55.367801,9.7873672 54.2264,10.452983 53.21,11.180001 C 52.1936,11.907018 51.300656,12.702618 50.54,13.550001 C 49.779344,14.397383 49.144966,15.30155 48.68,16.280001 C 48.215033,17.258452 47.90935,18.309777 47.78,19.430001 C 47.677683,20.316119 47.669792,21.146951 47.75,21.950001 C 47.830208,22.75305 47.991661,23.528692 48.23,24.260001 C 48.706678,25.722628 49.487072,27.036273 50.45,28.280001 C 51.412928,29.523729 52.555904,30.674452 53.81,31.790001 C 55.064096,32.90555 56.419808,33.981911 57.77,35.060001 C 59.120192,36.13809 60.478784,37.22866 61.73,38.360001 C 62.981216,39.491342 64.132832,40.684689 65.09,41.960001 C 66.047168,43.235313 66.811952,44.589998 67.28,46.100001 C 67.514029,46.855002 67.654832,47.639322 67.73,48.470001 C 67.805168,49.300679 67.808077,50.192308 67.7,51.109972 C 67.526845,52.580404 67.082739,54.03442 66.41,55.52002 C 65.737261,57.005524 64.845334,58.502548 63.74,59.989972 C 62.634665,61.477492 61.31096,62.983828 59.84,64.46002 C 58.36904,65.936116 56.749606,67.388404 54.98,68.84002 C 53.210393,70.291636 51.311273,71.71618 49.31,73.129972 C 47.308726,74.54386 45.205971,75.937108 43.04,77.30002 C 38.708067,80.025652 34.098848,82.657684 29.51,85.099972 C 24.921152,87.542212 20.349929,89.796964 16.04,91.849924 C 11.73007,93.90298 7.6852063,95.752036 4.1899998,97.309924 C 3.3387582,97.689412 3.4731582,97.653796 2.6899998,97.999972 L 97.99999,97.999972 L 97.99999,2.0000008 L 90.68,2.0000008 z "
     id="rect1318" /&gt;
&lt;/svg&gt;
'</body>

<body package="ShoreComponents-Demo1" selector="rtfContents">rtfContents

	^'{\rtf1\ansi\ansicpg1252\deff0\deflang1031{\fonttbl{\f0\fswiss\fcharset0 Arial;}}
\viewkind4\uc1\pard\f0\fs20 Hello World\par
}'</body>

<body package="ShoreComponents-Demo1" selector="svg">svg
	^'&lt;?xml version="1.0" standalone="no"?&gt;
&lt;!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.0//EN"
  "http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd"&gt;
&lt;!-- ===================================================================== --&gt;
&lt;!--

  SVG Color Identifiers

  author: Stephane Hillion - 2000/04/16

--&gt;
&lt;!-- ===================================================================== --&gt;
&lt;svg width="800" height="600" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns="http://www.w3.org/2000/svg" preserveAspectRatio="xMidYMid meet" zoomAndPan="magnify"&gt;
&lt;title&gt;SVG Color Identifiers&lt;/title&gt;
  &lt;style type="text/css"&gt;&lt;![CDATA[
    text {
      font-size:   16;
      font-weight: bold
    }
  ]]&gt;
  &lt;/style&gt;
  &lt;rect width="100%" height="100%" style="fill: black"/&gt;
  &lt;text x="200" y="30" style="font-size: 32; fill:white" startOffset="0"&gt;SVG Color Identifiers&lt;/text&gt;
  &lt;line x1="10" y1="35" x2="790" y2="35" style="stroke: white"/&gt;
  &lt;text x="10" y="50" style="fill: AliceBlue" startOffset="0"&gt;AliceBlue&lt;/text&gt;
  &lt;text x="10" y="65" style="fill: AntiqueWhite" startOffset="0"&gt;AntiqueWhite&lt;/text&gt;
  &lt;text x="10" y="80" style="fill: Aqua" startOffset="0"&gt;Aqua&lt;/text&gt;
  &lt;text x="10" y="95" style="fill: Aquamarine" startOffset="0"&gt;Aquamarine&lt;/text&gt;
  &lt;text x="10" y="110" style="fill: Azure" startOffset="0"&gt;Azure&lt;/text&gt;
  &lt;text x="10" y="125" style="fill: Beige" startOffset="0"&gt;Beige&lt;/text&gt;
  &lt;text x="10" y="140" style="fill: Azure" startOffset="0"&gt;Bisque&lt;/text&gt;
  &lt;text x="10" y="155" style="fill: Black; stroke:White" startOffset="0"&gt;Black&lt;/text&gt;
  &lt;text x="10" y="170" style="fill: BlancheDalmond" startOffset="0"&gt;BlancheDalmond&lt;/text&gt;
  &lt;text x="10" y="185" style="fill: Blue" startOffset="0"&gt;Blue&lt;/text&gt;
  &lt;text x="10" y="200" style="fill: BlueViolet" startOffset="0"&gt;BlueViolet&lt;/text&gt;
  &lt;text x="10" y="215" style="fill: Brown" startOffset="0"&gt;Brown&lt;/text&gt;
  &lt;text x="10" y="230" style="fill: BurlyWood" startOffset="0"&gt;BurlyWood&lt;/text&gt;
  &lt;text x="10" y="245" style="fill: CadetBlue" startOffset="0"&gt;CadetBlue&lt;/text&gt;
  &lt;text x="10" y="260" style="fill: Chartreuse" startOffset="0"&gt;Chartreuse&lt;/text&gt;
  &lt;text x="10" y="275" style="fill: Chocolate" startOffset="0"&gt;Chocolate&lt;/text&gt;
  &lt;text x="10" y="290" style="fill: Coral" startOffset="0"&gt;Coral&lt;/text&gt;
  &lt;text x="10" y="305" style="fill: CornFlowerBlue" startOffset="0"&gt;CornFlowerBlue&lt;/text&gt;
  &lt;text x="10" y="320" style="fill: CornSilk" startOffset="0"&gt;CornSilk&lt;/text&gt;
  &lt;text x="10" y="335" style="fill: Crimson" startOffset="0"&gt;Crimson&lt;/text&gt;
  &lt;text x="10" y="350" style="fill: Cyan" startOffset="0"&gt;Cyan&lt;/text&gt;
  &lt;text x="10" y="365" style="fill: DarkBlue" startOffset="0"&gt;DarkBlue&lt;/text&gt;
  &lt;text x="10" y="380" style="fill: DarkCyan" startOffset="0"&gt;DarkCyan&lt;/text&gt;
  &lt;text x="10" y="395" style="fill: DarkGoldenRod" startOffset="0"&gt;DarkGoldenRod&lt;/text&gt;
  &lt;text x="10" y="410" style="fill: DarkGray" startOffset="0"&gt;DarkGray&lt;/text&gt;
  &lt;text x="10" y="425" style="fill: DarkGreen" startOffset="0"&gt;DarkGreen&lt;/text&gt;
  &lt;text x="10" y="440" style="fill: DarkGrey" startOffset="0"&gt;DarkGrey&lt;/text&gt;
  &lt;text x="10" y="455" style="fill: DarkKhaki" startOffset="0"&gt;DarkKhaki&lt;/text&gt;
  &lt;text x="10" y="470" style="fill: DarkMagenta" startOffset="0"&gt;DarkMagenta&lt;/text&gt;
  &lt;text x="10" y="485" style="fill: DarkOliveGreen" startOffset="0"&gt;DarkOliveGreen&lt;/text&gt;
  &lt;text x="10" y="500" style="fill: DarkOrange" startOffset="0"&gt;DarkOrange&lt;/text&gt;
  &lt;text x="10" y="515" style="fill: DarkOrchid" startOffset="0"&gt;DarkOrchid&lt;/text&gt;
  &lt;text x="10" y="530" style="fill: DarkRed" startOffset="0"&gt;DarkRed&lt;/text&gt;
  &lt;text x="10" y="545" style="fill: DarkSalmon" startOffset="0"&gt;DarkSalmon&lt;/text&gt;
  &lt;text x="10" y="560" style="fill: DarkSeaGreen" startOffset="0"&gt;DarkSeaGreen&lt;/text&gt;
  &lt;text x="10" y="575" style="fill: DarkSlateBlue" startOffset="0"&gt;DarkSlateBlue&lt;/text&gt;
  &lt;text x="10" y="590" style="fill: DarkSlateGray" startOffset="0"&gt;DarkSlateGray&lt;/text&gt;
  &lt;text x="190" y="50" style="fill: DarkSlateGrey" startOffset="0"&gt;DarkSlateGrey&lt;/text&gt;
  &lt;text x="190" y="65" style="fill: DarkTurquoise" startOffset="0"&gt;DarkTurquoise&lt;/text&gt;
  &lt;text x="190" y="80" style="fill: DarkViolet" startOffset="0"&gt;DarkViolet&lt;/text&gt;
  &lt;text x="190" y="95" style="fill: DeepPink" startOffset="0"&gt;DeepPink&lt;/text&gt;
  &lt;text x="190" y="110" style="fill: DeepSkyBlue" startOffset="0"&gt;DeepSkyBlue&lt;/text&gt;
  &lt;text x="190" y="125" style="fill: DimGray" startOffset="0"&gt;DimGray&lt;/text&gt;
  &lt;text x="190" y="140" style="fill: DimGrey" startOffset="0"&gt;DimGrey&lt;/text&gt;
  &lt;text x="190" y="155" style="fill: DodgerBlue" startOffset="0"&gt;DodgerBlue&lt;/text&gt;
  &lt;text x="190" y="170" style="fill: FireBrick" startOffset="0"&gt;FireBrick&lt;/text&gt;
  &lt;text x="190" y="185" style="fill: FloralWhite" startOffset="0"&gt;FloralWhite&lt;/text&gt;
  &lt;text x="190" y="200" style="fill: ForestGreen" startOffset="0"&gt;ForestGreen&lt;/text&gt;
  &lt;text x="190" y="215" style="fill: Fuchsia" startOffset="0"&gt;Fuchsia&lt;/text&gt;
  &lt;text x="190" y="230" style="fill: Gainsboro" startOffset="0"&gt;Gainsboro&lt;/text&gt;
  &lt;text x="190" y="245" style="fill: GhostWhite" startOffset="0"&gt;GhostWhite&lt;/text&gt;
  &lt;text x="190" y="260" style="fill: Gold" startOffset="0"&gt;Gold&lt;/text&gt;
  &lt;text x="190" y="275" style="fill: GoldenRod" startOffset="0"&gt;GoldenRod&lt;/text&gt;
  &lt;text x="190" y="290" style="fill: Gray" startOffset="0"&gt;Gray&lt;/text&gt;
  &lt;text x="190" y="305" style="fill: Green" startOffset="0"&gt;Green&lt;/text&gt;
  &lt;text x="190" y="320" style="fill: Grey" startOffset="0"&gt;Grey&lt;/text&gt;
  &lt;text x="190" y="335" style="fill: GreenYellow" startOffset="0"&gt;GreenYellow&lt;/text&gt;
  &lt;text x="190" y="350" style="fill: HoneyDew" startOffset="0"&gt;HoneyDew&lt;/text&gt;
  &lt;text x="190" y="365" style="fill: HotPink" startOffset="0"&gt;HotPink&lt;/text&gt;
  &lt;text x="190" y="380" style="fill: IndianRed" startOffset="0"&gt;IndianRed&lt;/text&gt;
  &lt;text x="190" y="395" style="fill: Indigo" startOffset="0"&gt;Indigo&lt;/text&gt;
  &lt;text x="190" y="410" style="fill: Ivory" startOffset="0"&gt;Ivory&lt;/text&gt;
  &lt;text x="190" y="425" style="fill: Khaki" startOffset="0"&gt;Khaki&lt;/text&gt;
  &lt;text x="190" y="440" style="fill: Lavender" startOffset="0"&gt;Lavender&lt;/text&gt;
  &lt;text x="190" y="455" style="fill: LavenderBlush" startOffset="0"&gt;LavenderBlush&lt;/text&gt;
  &lt;text x="190" y="470" style="fill: LawnGreen" startOffset="0"&gt;LawnGreen&lt;/text&gt;
  &lt;text x="190" y="485" style="fill: LemonChiffon" startOffset="0"&gt;LemonChiffon&lt;/text&gt;
  &lt;text x="190" y="500" style="fill: LightBlue" startOffset="0"&gt;LightBlue&lt;/text&gt;
  &lt;text x="190" y="515" style="fill: LightCoral" startOffset="0"&gt;LightCoral&lt;/text&gt;
  &lt;text x="190" y="530" style="fill: LightCyan" startOffset="0"&gt;LightCyan&lt;/text&gt;
  &lt;text x="190" y="545" style="fill: LightGoldenRodYellow" startOffset="0"&gt;LightGoldenRodYellow&lt;/text&gt;
  &lt;text x="190" y="560" style="fill: LightGray" startOffset="0"&gt;LightGray&lt;/text&gt;
  &lt;text x="190" y="575" style="fill: LightGreen" startOffset="0"&gt;LightGreen&lt;/text&gt;
  &lt;text x="190" y="590" style="fill: LightGrey" startOffset="0"&gt;LightGrey&lt;/text&gt;
  &lt;text x="410" y="50" style="fill: LightPink" startOffset="0"&gt;LightPink&lt;/text&gt;
  &lt;text x="410" y="65" style="fill: LightSalmon" startOffset="0"&gt;LightSalmon&lt;/text&gt;
  &lt;text x="410" y="80" style="fill: LightSeaGreen" startOffset="0"&gt;LightSeaGreen&lt;/text&gt;
  &lt;text x="410" y="95" style="fill: LightSkyBlue" startOffset="0"&gt;LightSkyBlue&lt;/text&gt;
  &lt;text x="410" y="110" style="fill: LightSlateGray" startOffset="0"&gt;LightSlateGray&lt;/text&gt;
  &lt;text x="410" y="125" style="fill: LightSlateGrey" startOffset="0"&gt;LightSlateGrey&lt;/text&gt;
  &lt;text x="410" y="140" style="fill: LightSteelBlue" startOffset="0"&gt;LightSteelBlue&lt;/text&gt;
  &lt;text x="410" y="155" style="fill: LightYellow" startOffset="0"&gt;LightYellow&lt;/text&gt;
  &lt;text x="410" y="170" style="fill: Lime" startOffset="0"&gt;Lime&lt;/text&gt;
  &lt;text x="410" y="185" style="fill: LimeGreen" startOffset="0"&gt;LimeGreen&lt;/text&gt;
  &lt;text x="410" y="200" style="fill: Linen" startOffset="0"&gt;Linen&lt;/text&gt;
  &lt;text x="410" y="215" style="fill: Magenta" startOffset="0"&gt;Magenta&lt;/text&gt;
  &lt;text x="410" y="230" style="fill: Maroon" startOffset="0"&gt;Maroon&lt;/text&gt;
  &lt;text x="410" y="245" style="fill: MediumAquamarine" startOffset="0"&gt;MediumAquamarine&lt;/text&gt;
  &lt;text x="410" y="260" style="fill: MediumBlue" startOffset="0"&gt;MediumBlue&lt;/text&gt;
  &lt;text x="410" y="275" style="fill: MediumOrchid" startOffset="0"&gt;MediumOrchid&lt;/text&gt;
  &lt;text x="410" y="290" style="fill: MediumPurple" startOffset="0"&gt;MediumPurple&lt;/text&gt;
  &lt;text x="410" y="305" style="fill: MediumSeaGreen" startOffset="0"&gt;MediumSeaGreen&lt;/text&gt;
  &lt;text x="410" y="320" style="fill: MediumSlateBlue" startOffset="0"&gt;MediumSlateBlue&lt;/text&gt;
  &lt;text x="410" y="335" style="fill: MediumSpringGreen" startOffset="0"&gt;MediumSpringGreen&lt;/text&gt;
  &lt;text x="410" y="350" style="fill: MediumTurquoise" startOffset="0"&gt;MediumTurquoise&lt;/text&gt;
  &lt;text x="410" y="365" style="fill: MediumVioletRed" startOffset="0"&gt;MediumVioletRed&lt;/text&gt;
  &lt;text x="410" y="380" style="fill: MidnightBlue" startOffset="0"&gt;MidnightBlue&lt;/text&gt;
  &lt;text x="410" y="395" style="fill: MintCream" startOffset="0"&gt;MintCream&lt;/text&gt;
  &lt;text x="410" y="410" style="fill: MistyRose" startOffset="0"&gt;MistyRose&lt;/text&gt;
  &lt;text x="410" y="425" style="fill: Moccasin" startOffset="0"&gt;Moccasin&lt;/text&gt;
  &lt;text x="410" y="440" style="fill: NavajoWhite" startOffset="0"&gt;NavajoWhite&lt;/text&gt;
  &lt;text x="410" y="455" style="fill: Navy" startOffset="0"&gt;Navy&lt;/text&gt;
  &lt;text x="410" y="470" style="fill: OldLace" startOffset="0"&gt;OldLace&lt;/text&gt;
  &lt;text x="410" y="485" style="fill: Olive" startOffset="0"&gt;Olive&lt;/text&gt;
  &lt;text x="410" y="500" style="fill: OliveDrab" startOffset="0"&gt;OliveDrab&lt;/text&gt;
  &lt;text x="410" y="515" style="fill: Orange" startOffset="0"&gt;Orange&lt;/text&gt;
  &lt;text x="410" y="530" style="fill: OrangeRed" startOffset="0"&gt;OrangeRed&lt;/text&gt;
  &lt;text x="410" y="545" style="fill: Orchid" startOffset="0"&gt;Orchid&lt;/text&gt;
  &lt;text x="410" y="560" style="fill: PaleGoldenRod" startOffset="0"&gt;PaleGoldenRod&lt;/text&gt;
  &lt;text x="410" y="575" style="fill: PaleGreen" startOffset="0"&gt;PaleGreen&lt;/text&gt;
  &lt;text x="410" y="590" style="fill: PaleTurquoise" startOffset="0"&gt;PaleTurquoise&lt;/text&gt;
  &lt;text x="620" y="50" style="fill: PaleVioletRed" startOffset="0"&gt;PaleVioletRed&lt;/text&gt;
  &lt;text x="620" y="65" style="fill: PapayaWhip" startOffset="0"&gt;PapayaWhip&lt;/text&gt;
  &lt;text x="620" y="80" style="fill: PeachPuff" startOffset="0"&gt;PeachPuff&lt;/text&gt;
  &lt;text x="620" y="95" style="fill: Peru" startOffset="0"&gt;Peru&lt;/text&gt;
  &lt;text x="620" y="110" style="fill: Pink" startOffset="0"&gt;Pink&lt;/text&gt;
  &lt;text x="620" y="125" style="fill: Plum" startOffset="0"&gt;Plum&lt;/text&gt;
  &lt;text x="620" y="140" style="fill: PowderBlue" startOffset="0"&gt;PowderBlue&lt;/text&gt;
  &lt;text x="620" y="155" style="fill: Purple" startOffset="0"&gt;Purple&lt;/text&gt;
  &lt;text x="620" y="170" style="fill: Red" startOffset="0"&gt;Red&lt;/text&gt;
  &lt;text x="620" y="185" style="fill: RosyBrown" startOffset="0"&gt;RosyBrown&lt;/text&gt;
  &lt;text x="620" y="200" style="fill: RoyalBlue" startOffset="0"&gt;RoyalBlue&lt;/text&gt;
  &lt;text x="620" y="215" style="fill: SaddleBrown" startOffset="0"&gt;SaddleBrown&lt;/text&gt;
  &lt;text x="620" y="230" style="fill: Salmon" startOffset="0"&gt;Salmon&lt;/text&gt;
  &lt;text x="620" y="245" style="fill: SandyBrown" startOffset="0"&gt;SandyBrown&lt;/text&gt;
  &lt;text x="620" y="260" style="fill: SeaGreen" startOffset="0"&gt;SeaGreen&lt;/text&gt;
  &lt;text x="620" y="275" style="fill: SeaShell" startOffset="0"&gt;SeaShell&lt;/text&gt;
  &lt;text x="620" y="290" style="fill: Sienna" startOffset="0"&gt;Sienna&lt;/text&gt;
  &lt;text x="620" y="305" style="fill: Silver" startOffset="0"&gt;Silver&lt;/text&gt;
  &lt;text x="620" y="320" style="fill: SkyBlue" startOffset="0"&gt;SkyBlue&lt;/text&gt;
  &lt;text x="620" y="335" style="fill: SlateBlue" startOffset="0"&gt;SlateBlue&lt;/text&gt;
  &lt;text x="620" y="350" style="fill: SlateGray" startOffset="0"&gt;SlateGray&lt;/text&gt;
  &lt;text x="620" y="365" style="fill: SlateGrey" startOffset="0"&gt;SlateGrey&lt;/text&gt;
  &lt;text x="620" y="380" style="fill: Snow" startOffset="0"&gt;Snow&lt;/text&gt;
  &lt;text x="620" y="395" style="fill: SpringGreen" startOffset="0"&gt;SpringGreen&lt;/text&gt;
  &lt;text x="620" y="410" style="fill: SteelBlue" startOffset="0"&gt;SteelBlue&lt;/text&gt;
  &lt;text x="620" y="425" style="fill: Tan" startOffset="0"&gt;Tan&lt;/text&gt;
  &lt;text x="620" y="440" style="fill: Teal" startOffset="0"&gt;Teal&lt;/text&gt;
  &lt;text x="620" y="455" style="fill: Thistle" startOffset="0"&gt;Thistle&lt;/text&gt;
  &lt;text x="620" y="470" style="fill: Tomato" startOffset="0"&gt;Tomato&lt;/text&gt;
  &lt;text x="620" y="485" style="fill: Turquoise" startOffset="0"&gt;Turquoise&lt;/text&gt;
  &lt;text x="620" y="500" style="fill: Violet" startOffset="0"&gt;Violet&lt;/text&gt;
  &lt;text x="620" y="515" style="fill: Wheat" startOffset="0"&gt;Wheat&lt;/text&gt;
  &lt;text x="620" y="530" style="fill: White" startOffset="0"&gt;White&lt;/text&gt;
  &lt;text x="620" y="545" style="fill: WhiteSmoke" startOffset="0"&gt;WhiteSmoke&lt;/text&gt;
  &lt;text x="620" y="560" style="fill: Yellow" startOffset="0"&gt;Yellow&lt;/text&gt;
  &lt;text x="620" y="575" style="fill: YellowGreen" startOffset="0"&gt;YellowGreen&lt;/text&gt;
&lt;/svg&gt;
'</body>
</methods>

<methods>
<class-id>Seaside.ShoreDemo1DynamicFileDownload</class-id> <category>rendering</category>

<body package="ShoreComponents-Demo1" selector="displayLogo">displayLogo

	| response |

	response := WAResponse new contentType: 'image/svg+xml'.
	response stream nextPutAll: self logo.
	self session returnResponse: response</body>

<body package="ShoreComponents-Demo1" selector="displaySVG">displaySVG

	| response |

	response := WAResponse new contentType: 'image/svg+xml'.
	response stream nextPutAll: self svg.
	self session returnResponse: response</body>

<body package="ShoreComponents-Demo1" selector="renderContentOn:">renderContentOn: html 
	"Renders the receivers content on the given html object"
	html heading: self pageTitle.
	html unorderedList
		list: (Array
				with: [html anchor
						callback: [self session
								download: self csvContents
								mimeType: 'application/csv'
								filename: 'file.csv'];
						 with: 'CSV']
				with: [html anchor
						callback: [self session
								download: self rtfContents
								mimeType: 'application/rtf'
								filename: 'file.rtf'];
						 with: 'RTF']
				with: [html anchor
						callback: [self displaySVG];
						 with: 'SVG demo']
				with: [html anchor
						callback: [self displayLogo];
						 with: 'ShoreComponents logo'])</body>
</methods>

<methods>
<class-id>Seaside.ShoreDemo1DynamicFileDownload</class-id> <category>accessing</category>

<body package="ShoreComponents-Demo1" selector="pageTitle">pageTitle
	"Returns the receivers page title"

	^'Dynamic Download Demo'</body>
</methods>

<methods>
<class-id>Seaside.ShoreDemo1DynamicFileDownload class</class-id> <category>as yet unclassified</category>

<body package="ShoreComponents-Demo1" selector="menuName">menuName

	^ 'Dynamic files' translated</body>

<body package="ShoreComponents-Demo1" selector="menuPriority">menuPriority

	^ 25

	</body>
</methods>

<methods>
<class-id>Seaside.ShoreDemo1DynamicFileDownload class</class-id> <category>initialization</category>

<body package="ShoreComponents-Demo1" selector="initialize">initialize

	self registerToMenu
</body>
</methods>

<methods>
<class-id>Seaside.ShoreDemo1DemosMenu</class-id> <category>rendering</category>

<body package="ShoreComponents-Demo1" selector="renderContentOn:">renderContentOn: html
	"Renders the receivers content on the given html object"

	html unorderedList: [
		"add all demos"	
		(self class demoMapping asSortedCollection: [:a :b | a menuPriority &lt;= b menuPriority ]) 
			do: [:demoClass | 
				self renderLinkTo: demoClass on: html ]]

</body>

<body package="ShoreComponents-Demo1" selector="rendererClass">rendererClass 
	"Returns the receivers default renderer class"

	^ ShoreCanvas</body>

<body package="ShoreComponents-Demo1" selector="renderLinkTo:on:">renderLinkTo: demoClass on: html
	"Renders a link to a demo component on the given html object"

	html listItem with: [
		html anchor 
			callback: [ self shoreTarget show: (demoClass  new)];
			with:  demoClass menuName. ].
	</body>
</methods>

<methods>
<class-id>Seaside.ShoreDemo1DemosMenu</class-id> <category>accessing</category>

<body package="ShoreComponents-Demo1" selector="name">name
	"Returns the receivers name"
	
	^'Demos menu'.</body>
</methods>

<methods>
<class-id>Seaside.ShoreDemo1DemosMenu class</class-id> <category>accessing</category>

<body package="ShoreComponents-Demo1" selector="demoMapping">demoMapping
	"Returns the receivers demo mapping"

	DemoMapping isNil ifTrue: [ self resetMapping].

	^ DemoMapping</body>

<body package="ShoreComponents-Demo1" selector="resetMapping">resetMapping

	DemoMapping := OrderedCollection new</body>
</methods>

<methods>
<class-id>Seaside.ShoreDemo1DemosMenu class</class-id> <category>demo registration</category>

<body package="ShoreComponents-Demo1" selector="register:">register: aDemoPage

	"Registers the given demo in the demo mapping"

	(self demoMapping includes: aDemoPage) 
		ifTrue: [ ^ aDemoPage ].

	^self demoMapping add: aDemoPage.</body>
</methods>

<methods>
<class-id>Seaside.ShoreDynamicPanelDecoration</class-id> <category>initialization</category>

<body package="ShoreComponents-Panels" selector="initialize">initialize

	super initialize.

	id := ShoreId new.
	</body>
</methods>

<methods>
<class-id>Seaside.ShoreDynamicPanelDecoration</class-id> <category>rendering</category>

<body package="ShoreComponents-Panels" selector="renderContentOn:">renderContentOn: html

	html roundedDivColor: 'rgb(214, 223, 247)' top: false bottom: true with: [
		html div class: #shorePanelSection; 
			passenger: self;
			class: 'inventory-item';
			script: (html draggable revert: true);
			with: [
				html div class: #shorePanelSectionContent;  
					class: #shoreDynamicPanelSectionContent; 
					with: [ self renderOwnerOn: html  ]]]
		

</body>

<body package="ShoreComponents-Panels" selector="rendererClass">rendererClass 
	"Returns the receivers default renderer class"

	^ ShoreCanvas</body>
</methods>

<methods>
<class-id>Seaside.ShoreDynamicPanelDecoration</class-id> <category>accessing</category>

<body package="ShoreComponents-Panels" selector="id">id
	"Answer the value of id"

	^ id</body>

<body package="ShoreComponents-Panels" selector="id:">id: anObject
	"Set the value of id"

	id := anObject</body>
</methods>

<methods>
<class-id>Seaside.ShoreDemo1TableDemo5</class-id> <category>initialization</category>

<body package="ShoreComponents-Demo1" selector="initialize">initialize

	| rows columns |
   
	super initialize.
 
	rows := Smalltalk allClasses select: [:class | class name beginsWith: 'Shore' ].
	columns := OrderedCollection new
		add: ((ShoreTableColumn selector: #yourself title: 'class' translated)
			clickBlock: [:row | self browse: row];
			sortBlock: [:a :b | 
				a name compare: b name ];
			yourself);
		add: ((ShoreTableColumn selector: #hasMethods title: 'has methods' translated)
			sortBlock: [:a :b | 
				a displayString compare: b displayString ];
			groupBy: true;
			yourself);		
		add: ((ShoreTableColumn selector: #superclass title: 'superclass' translated)
			sortBlock: [:a :b | 
				a name compare: b name ];
			groupBy: true;
			yourself);	
	yourself.
	

	table := ShoreLiveTable new.
	table rows: rows; columns: columns.
	table previewBlock: [:html :row | 
		html html: (row definition asXHtml) ].
	
	table actionsBlock: [:html |
		table renderSelectAllAnchorOn: html.
		html separator.
		table renderSelectNoneAnchorOn: html.
		html separator.
		html anchor callback: [ table selection do: [:each | self browse: each]];
			with: 'browse selected' translated. ].
	
	

</body>
</methods>

<methods>
<class-id>Seaside.ShoreDemo1TableDemo5</class-id> <category>style</category>

<body package="ShoreComponents-Demo1" selector="style">style
	^ '

.ShoreDemo1TableDemo2 table { 
	border-left: 1px solid #e7dfce;
	border-top: 1px solid #e7dfce;
}


.ShoreDemo1TableDemo2 th { 
	margin: 0px;
	padding: 2px;
	background-color: #efebde; 
	color: black;
	border-right: 1px solid #a5aa94;
	border-bottom: 3px solid #cec7bd;
 }

.ShoreDemo1TableDemo2 th img { 
	padding-left: 5px;
 }

.shoreLiveTableSelector { 
	margin: 0px;
}

.ShoreDemo1TableDemo2 th:hover { 
	margin: 0px;
	padding: 2px;
	background-color: #f8f5ed; 
	color: black;
	border-right: 1px solid #a5aa94;
	border-bottom: 3px solid #f6cd4f;
 }

.shoreTableColumnSortIndex {
	color: #a5aa94;
	padding-left: 3px;
}

.sortable { 
	cursor: pointer;
 }


.ShoreDemo1TableDemo2 td {
	border-right: 1px solid #e7dfce;
	border-bottom: 1px solid #e7dfce;
	text-align: left;
}
.ShoreDemo1TableDemo2 td.big {color: red; font-weight: bold;}
.ShoreDemo1TableDemo2 tr+tr&gt;th {text-align: right}
.ShoreDemo1TableDemo2 tr.odd { background-color: #fbf8f0}
.ShoreDemo1TableDemo2 tr.even { background-color: white}

.shoreLiveTableOffset {
	background-color: white;
}

.shoreLiveTableGroup {
	font-weight: bold;
}

.shoreLiveTableGroupHeader {
	width: 15px;
}

'</body>
</methods>

<methods>
<class-id>Seaside.ShoreDemo1TableDemo5</class-id> <category>rendering</category>

<body package="ShoreComponents-Demo1" selector="renderContentOn:">renderContentOn: html

	html heading: self pageTitle.
	
	html div class: #ShoreDemo1TableDemo2; with: [
		html render: table ].
	
</body>
</methods>

<methods>
<class-id>Seaside.ShoreDemo1TableDemo5</class-id> <category>accessing</category>

<body package="ShoreComponents-Demo1" selector="children">children

	^ Array with: table</body>

<body package="ShoreComponents-Demo1" selector="pageTitle">pageTitle

	^ 'Grouping live table demo 2'.</body>
</methods>

<methods>
<class-id>Seaside.ShoreDemo1TableDemo5</class-id> <category>actions</category>

<body package="ShoreComponents-Demo1" selector="browse:">browse: aClass
	self call: ((WABrowser fullOnClass: aClass) 
					addDecoration: ShoreBrowserDecoration new; 
					yourself).
</body>
</methods>

<methods>
<class-id>Seaside.ShoreDemo1TableDemo5 class</class-id> <category>as yet unclassified</category>

<body package="ShoreComponents-Demo1" selector="menuName">menuName

	^ 'Grouping live table 2' translated</body>

<body package="ShoreComponents-Demo1" selector="menuPriority">menuPriority

	^ 65</body>
</methods>

<methods>
<class-id>Seaside.ShoreDemo1TableDemo5 class</class-id> <category>initialization</category>

<body package="ShoreComponents-Demo1" selector="initialize">initialize

	self registerToMenu
</body>
</methods>

<methods>
<class-id>Seaside.ShoreSlidingDoors</class-id> <category>images</category>

<body package="ShoreComponents-Libraries" selector="backgroundImagePng">backgroundImagePng
	| xxxCache |
	xxxCache := #(nil) beMutable.
	(xxxCache at: 1) isNil ifTrue: [
		xxxCache at: 1 put: #(137 80 78 71 13 10 26 10 0 0 0 13 73 72 68 82 0 0 0 20 0 0 0 45 8 6 0 0 0 174 252 75 104 0 0 0 220 73 68 65 84 120 94 213 206 205 14 193 64 24 133 225 115 147 110 193 45 184 79 66 168 144 106 139 86 41 74 181 244 231 8 11 73 187 208 76 28 139 46 158 153 201 151 153 55 3 203 30 210 18 210 7 231 171 17 149 58 16 92 184 99 42 117 32 104 123 19 42 181 7 221 169 145 214 224 202 155 25 129 179 182 168 4 119 51 167 18 188 237 130 74 88 251 75 42 97 19 216 239 195 183 221 4 76 31 252 61 232 135 78 13 130 189 75 37 236 14 30 149 36 193 48 218 126 118 188 22 37 236 143 62 127 113 56 5 53 104 14 76 69 231 93 13 154 131 95 225 24 135 84 66 124 141 168 132 243 37 226 55 109 129 230 125 253 15 47 201 137 74 72 210 152 74 250 96 154 38 84 66 150 221 168 132 251 61 165 146 62 248 120 100 84 66 158 231 84 66 81 20 84 210 7 203 178 164 18 170 170 162 82 7 130 131 126 143 74 79 69 15 20 86 163 130 134 94 0 0 0 0 73 69 78 68 174 66 96 130) asByteArray ].
	^ xxxCache at: 1</body>

<body package="ShoreComponents-Libraries" selector="leftImagePng">leftImagePng
	| xxxCache |
	xxxCache := #(nil) beMutable.
	(xxxCache at: 1) isNil ifTrue: [
		xxxCache at: 1 put: #(137 80 78 71 13 10 26 10 0 0 0 13 73 72 68 82 0 0 0 9 0 0 0 150 8 6 0 0 0 12 161 162 134 0 0 1 40 73 68 65 84 120 94 229 210 207 78 194 64 16 199 241 125 124 143 62 130 137 119 79 38 28 68 52 70 229 160 137 10 138 85 8 34 210 80 133 82 81 254 41 135 209 239 152 93 26 41 79 48 77 38 77 118 63 249 205 236 102 93 254 123 110 95 75 227 230 64 170 199 187 82 222 223 150 210 222 150 86 0 205 198 169 156 85 118 132 255 240 173 35 139 249 68 150 203 111 45 5 15 119 39 82 191 42 201 56 123 13 27 249 210 22 36 140 179 36 44 126 45 102 154 52 155 126 104 57 18 72 250 191 57 249 76 67 57 82 146 248 113 13 208 154 244 247 81 95 28 167 96 177 8 140 134 189 223 122 17 199 17 243 253 61 202 210 88 65 58 232 22 35 90 0 184 138 65 210 254 67 69 41 36 0 54 34 15 56 16 21 80 62 5 208 239 69 18 119 111 133 123 84 228 239 131 89 152 3 192 102 167 117 41 79 205 139 21 242 71 38 133 4 54 91 209 185 94 180 34 218 144 194 44 204 64 138 7 81 253 104 133 152 133 86 30 241 26 0 60 157 53 196 60 204 2 186 175 29 218 71 246 145 125 100 31 217 71 246 145 125 100 31 217 71 246 145 125 100 31 217 71 246 145 125 100 31 217 71 246 145 125 180 9 253 0 206 244 122 113 97 234 19 197 0 0 0 0 73 69 78 68 174 66 96 130) asByteArray ].
	^ xxxCache at: 1</body>

<body package="ShoreComponents-Libraries" selector="leftSelectedImagePng">leftSelectedImagePng
	| xxxCache |
	xxxCache := #(nil) beMutable.
	(xxxCache at: 1) isNil ifTrue: [
		xxxCache at: 1 put: #(137 80 78 71 13 10 26 10 0 0 0 13 73 72 68 82 0 0 0 9 0 0 0 150 8 6 0 0 0 12 161 162 134 0 0 1 37 73 68 65 84 120 94 229 210 187 106 2 65 20 6 96 95 210 7 72 147 62 149 86 1 139 84 41 211 4 107 33 144 98 65 18 8 33 216 165 211 82 3 41 82 5 4 21 73 92 221 43 59 123 220 115 118 103 50 155 189 136 245 63 240 55 179 223 206 57 115 233 216 227 99 62 163 215 241 3 221 223 94 211 224 234 130 122 151 93 137 1 239 147 103 186 187 233 211 219 211 35 125 125 46 200 59 236 73 15 3 156 209 144 86 203 111 170 27 89 137 105 182 66 175 17 8 122 113 70 82 162 109 116 184 73 238 161 21 241 46 236 38 107 17 111 241 212 168 160 52 77 43 17 100 79 40 165 138 36 38 130 236 201 36 137 41 142 67 73 20 5 146 2 149 65 20 250 20 6 158 36 240 221 28 149 254 204 0 127 240 189 223 108 215 63 116 112 183 127 72 3 254 91 3 119 183 145 52 34 94 33 71 235 106 185 28 237 76 41 83 206 52 92 234 41 135 28 131 254 67 189 34 167 254 8 10 168 177 117 152 234 212 97 170 202 117 232 22 56 45 119 167 202 119 215 246 2 204 43 56 251 61 225 35 124 132 143 240 17 62 194 71 248 8 31 225 35 124 132 143 240 17 62 194 71 248 8 31 225 35 124 68 71 242 159 206 86 145 30 165 193 0 0 0 0 73 69 78 68 174 66 96 130) asByteArray ].
	^ xxxCache at: 1</body>

<body package="ShoreComponents-Libraries" selector="rightImagePng">rightImagePng
	| xxxCache |
	xxxCache := #(nil) beMutable.
	(xxxCache at: 1) isNil ifTrue: [
		xxxCache at: 1 put: #(137 80 78 71 13 10 26 10 0 0 0 13 73 72 68 82 0 0 0 200 0 0 0 30 8 6 0 0 0 105 63 81 172 0 0 1 171 73 68 65 84 120 94 229 218 89 75 2 97 20 135 241 249 248 125 131 190 65 209 69 18 66 40 17 180 82 105 139 86 22 211 130 132 45 182 136 68 66 133 141 156 248 31 57 195 155 247 93 61 194 15 47 230 220 62 156 119 150 172 86 153 179 26 31 31 92 99 123 193 218 205 170 221 230 123 150 165 191 201 164 48 62 62 162 162 248 177 241 248 219 70 31 3 235 117 219 118 118 180 106 155 245 121 255 47 3 209 0 31 31 213 215 231 200 3 121 31 246 237 237 185 107 221 235 134 111 147 50 18 13 240 241 81 41 14 25 188 222 89 255 33 247 77 114 213 217 242 77 226 199 173 24 224 227 35 210 230 24 14 238 125 123 60 246 58 190 65 20 70 115 103 209 14 119 151 44 211 0 31 31 85 196 17 219 35 2 137 251 145 76 3 124 124 84 138 227 229 233 230 207 246 208 17 235 242 116 221 159 110 101 58 123 241 241 17 41 142 216 30 179 129 228 231 27 211 64 98 136 143 143 72 219 99 246 120 165 56 202 13 162 1 62 62 170 216 30 10 36 61 94 149 129 104 128 143 143 42 226 136 237 17 113 116 90 245 105 32 186 200 199 71 150 30 173 46 218 107 254 4 75 60 16 93 228 227 35 82 20 233 77 185 182 134 190 199 146 86 99 101 26 136 46 242 241 81 197 13 121 196 113 114 80 177 227 253 101 231 129 196 153 139 143 143 74 113 232 72 165 173 161 48 244 6 93 111 210 249 129 240 161 233 126 35 226 72 183 135 226 40 3 209 16 31 31 145 226 72 3 73 183 135 190 232 229 7 194 199 15 132 31 8 31 31 63 16 62 62 126 32 124 124 252 64 248 248 248 129 240 241 241 3 225 227 227 7 194 199 199 15 132 143 143 31 8 31 31 63 16 126 32 124 124 252 64 248 248 248 129 240 241 253 123 32 191 149 138 215 33 239 75 105 187 0 0 0 0 73 69 78 68 174 66 96 130) asByteArray ].
	^ xxxCache at: 1</body>

<body package="ShoreComponents-Libraries" selector="rightSelectedImagePng">rightSelectedImagePng
	| xxxCache |
	xxxCache := #(nil) beMutable.
	(xxxCache at: 1) isNil ifTrue: [
		xxxCache at: 1 put: #(137 80 78 71 13 10 26 10 0 0 0 13 73 72 68 82 0 0 0 200 0 0 0 30 8 6 0 0 0 105 63 81 172 0 0 1 203 73 68 65 84 120 94 229 155 59 78 195 64 16 64 125 73 106 58 106 10 164 180 72 156 32 13 39 160 161 161 163 164 224 0 20 20 72 136 2 4 136 252 44 227 143 98 199 137 226 12 204 196 187 89 27 95 0 189 39 189 206 85 164 167 217 95 162 209 201 145 140 248 242 5 123 126 122 44 227 139 51 185 185 186 148 199 135 123 137 66 132 15 31 32 187 221 78 154 102 43 235 186 146 100 241 97 97 104 32 26 202 221 237 181 240 3 225 195 15 164 13 164 92 166 146 125 79 59 161 248 72 248 63 21 31 126 32 169 164 201 68 226 249 155 204 38 47 22 137 78 18 91 110 241 127 42 62 252 64 186 129 124 189 63 217 20 81 249 129 240 225 7 210 11 100 250 249 236 167 8 63 16 62 252 64 6 38 136 170 167 91 252 64 248 240 3 25 152 32 26 136 30 1 71 250 33 95 190 52 155 166 145 237 118 99 129 44 139 100 112 130 88 32 90 17 95 190 52 45 142 245 74 86 85 225 3 89 204 94 255 6 162 31 241 229 75 180 94 149 82 149 153 20 249 194 238 64 194 229 149 15 68 11 226 203 151 102 85 230 109 28 177 93 18 246 151 87 62 16 29 47 124 249 210 212 48 92 28 58 61 250 203 43 31 136 142 23 190 124 137 230 217 220 246 30 252 64 248 242 29 136 67 167 135 11 36 60 226 117 182 129 196 194 151 47 211 238 20 113 145 56 249 123 16 190 252 189 200 111 40 97 36 78 141 197 2 217 239 230 249 242 165 153 153 122 139 190 15 165 187 236 82 45 16 61 11 230 203 151 232 225 200 55 12 229 176 4 227 95 20 242 229 91 87 62 150 254 116 177 64 54 155 90 248 242 37 27 198 18 202 127 139 197 151 111 251 46 203 25 134 195 127 205 203 151 111 251 178 119 72 11 132 255 207 0 62 124 134 225 7 194 135 15 63 16 62 124 248 129 240 225 195 15 132 15 31 126 32 124 248 240 3 225 195 231 127 4 242 3 217 13 114 57 20 65 105 106 0 0 0 0 73 69 78 68 174 66 96 130) asByteArray ].
	^ xxxCache at: 1</body>
</methods>

<methods>
<class-id>Seaside.ShoreSlidingDoors</class-id> <category>stylesheets</category>

<body package="ShoreComponents-Libraries" selector="slidingDoorsCss">slidingDoorsCss
	^ '
/* 
	http://www.alistapart.com/articles/slidingdoors/ 
*/
.shoreTabControl2 .navigationOptions {
	_float: left;
	_width: 100%;
	background:#DAE0D2 url(backgroundImage.png) repeat-x bottom;
	line-height:normal;
}
html&gt;body .shoreTabControl2 .navigationOptions  {
	overflow: auto;
}
.shoreTabControl2 .navigationOptions ul {
      margin:0;
      padding:10px 10px 0;
      list-style:none;
}
.shoreTabControl2 .navigationOptions li {
      float:left;
      background:url(leftImage.png) no-repeat left top;
      margin:0;
      padding:0 0 0 9px;
}
.shoreTabControl2 .navigationOptions a {
      display:block;
      background:url(rightImage.png) no-repeat right top;
      padding:5px 15px 4px 6px;
      text-decoration:none;
       color:#765;
 }
 .shoreTabControl2 .navigationOptions a:hover {
      color:#333;
 }
 .shoreTabControl2 .navigationOptions .option-selected {
      background-image:url(leftSelectedImage.png);
 }
 .shoreTabControl2 .navigationOptions .option-selected a {
      background-image:url(rightSelectedImage.png);
      color:#333;
      padding-bottom:5px;
}
.shoreTabControl2 .navigationContent {
	background : #fff;
	border : 1px solid #776655;
	border-top : none;
	margin : 0px;
	padding : 15px;
	line-height: 1.1;  /* IE6 CSS workaround - http://www.dracos.co.uk/web/css/ie6floatbug/ */
}
'</body>
</methods>

<methods>
<class-id>Seaside.ShoreSlidingDoors</class-id> <category>accessing</category>

<body package="ShoreComponents-Libraries" selector="selectorsToInclude">selectorsToInclude
	^ #( #slidingDoorsCss )</body>
</methods>

<methods>
<class-id>Seaside.ShoreWidget</class-id> <category>accessing</category>

<body package="ShoreComponents-Widgets" selector="renderer">renderer
	"Answer the value of renderer"

	^ renderer</body>

<body package="ShoreComponents-Widgets" selector="renderer:">renderer: anObject
	"Set the value of renderer"

	renderer := anObject</body>
</methods>

<methods>
<class-id>Seaside.ShoreWidget class</class-id> <category>accessing</category>

<body package="ShoreComponents-Widgets" selector="in:">in: aHtmlRenderer

	^(self basicNew renderer: aHtmlRenderer) initialize</body>

<body package="ShoreComponents-Widgets" selector="initialize">initialize
</body>
</methods>

<methods>
<class-id>Seaside.ShoreDatePicker</class-id> <category>rendering</category>

<body package="ShoreComponents-Widgets" selector="on:of:">on: aSymbol of: receiver 
	| html |
	html := self renderer.
	"html context advanceKey."
	currentDate := [(receiver perform: aSymbol) asDate]
				on: Error do: [ :error | Date today].
	html textInput
		id: id;
		value: (currentDate printFormat: printFormat);
		callback:
			[:val | self
					processDate: val
					on: aSymbol
					of: receiver].
	self renderDatePickerImageOn: html.
	html div
		id: divId;
		class: #shoreDatePickerHidden;
		with:
			[ self renderCalendarNavigationOn: html.
			self renderCalendarFor: currentDate on: html ]</body>

<body package="ShoreComponents-Widgets" selector="renderCalendarFor:on:">renderCalendarFor: baseDate on: html 

	html div
		id: calendarId;
		with: 
			[ self renderCalendarTopFor: baseDate on: html.
			self renderMonth: baseDate asMonth for: baseDate on: html ]
</body>

<body package="ShoreComponents-Widgets" selector="renderCalendarNavigationOn:">renderCalendarNavigationOn: html
	html table class: #layout;
				 class: #shoreDatePickerNavigationTable;
				
				with: [html
						tableRow: [html tableData class: #shoreDatePickerNavigationTableCell;
								
								with: [html anchor onClick: (html updater id: calendarId;
											
											callback: [:h | 
												currentDate := self prevMonthOf: currentDate.
												self renderCalendarFor: currentDate on: h]);
										 ignoreURL;
										 with: '&lt;'].
							html tableData class: #shoreDatePickerNavigationTableCell;
								
								with: [html anchor onClick: (html updater id: calendarId;
											
											callback: [:h | 
												currentDate := self nextMonthOf: currentDate.
												self renderCalendarFor: currentDate on: h]);
										 ignoreURL;
										 with: '&gt;'].
							html tableData class: #shoreDatePickerNavigationTableCell;
								
								with: [html anchor onClick: (html updater id: calendarId;
											
											callback: [:h | 
												currentDate := self prevYearOf: currentDate.
												self renderCalendarFor: currentDate on: h]);
										 ignoreURL;
										 with: '&lt;&lt;'].
							html tableData class: #shoreDatePickerNavigationTableCell;
								
								with: [html anchor onClick: (html updater id: calendarId;
											
											callback: [:h | 
												currentDate := self nextYearOf: currentDate.
												self renderCalendarFor: currentDate on: h]);
										 ignoreURL;
										 with: '&gt;&gt;']]]
</body>

<body package="ShoreComponents-Widgets" selector="renderCalendarTopFor:on:">renderCalendarTopFor: baseDate on: html 
	html table: 
		[ html tableRow
				class: #shoreDatePickerCalendarHeader;
				with: 
					[ html tableData: baseDate asMonth name translated.
					html tableData: baseDate start year asString translated ]]</body>

<body package="ShoreComponents-Widgets" selector="renderDatePickerImageOn:">renderDatePickerImageOn: html
	html image
		onClick: 'datePickerToggle(' 
			, divId printString 
			, ',' 
			, id printString
			,')';
		url: (self resources addToPath: 'datePickerImage.gif');
		altText: 'select date' translated.
</body>

<body package="ShoreComponents-Widgets" selector="renderDay:class:on:">renderDay: day class: cssClass on: html

	html tableData
		class: #shoreDatePickerDay;
		class: cssClass;
		onClick: 'datePickerSetDate(' 
			, id printString
			, ',' 
			, (day printFormat: printFormat) printString
			, ') ';
		with: 
			[ html text: day dayOfMonth ]
	

	</body>

<body package="ShoreComponents-Widgets" selector="renderMonth:for:on:">renderMonth: aMonth for: baseDate on: html
	html table 
			class: #layout;
			class: #shoreDatePickerCalendarTable;
			with:
				[ html tableRow: 
					[ Week dayNames do: 
						[ :dayName | 
						html tableData
								class: #shoreDatePickerDayName;
								with: (dayName first: 3)]].
				aMonth weeksDo: 
						[:week | 
						html tableRow: [ self renderWeek: week for: baseDate on: html ]]]</body>

<body package="ShoreComponents-Widgets" selector="renderWeek:for:on:">renderWeek: aWeek for: baseDate on: html 
	| thisMonth today cssClass |
	thisMonth := baseDate asMonth.
	today := Date today.
	aWeek
		datesDo: [:eachDay | 
			cssClass := eachDay = today
						ifTrue: [#shoreDatePickerToday]
						ifFalse: [eachDay asMonth = thisMonth
								ifTrue: [#shoreDatePickerThisMonth]
								ifFalse: [#shoreDatePickerAnotherMonth]].
			self
				renderDay: eachDay
				class: cssClass
				on: html]</body>
</methods>

<methods>
<class-id>Seaside.ShoreDatePicker</class-id> <category>initialization</category>

<body package="ShoreComponents-Widgets" selector="initialize">initialize

	id := ShoreId new.
	calendarId := id , 'calendar'.
	divId :=  id , 'div'.
	printFormat := #(2 1 3 $/ 1 1).

</body>
</methods>

<methods>
<class-id>Seaside.ShoreDatePicker</class-id> <category>date utilities</category>

<body package="ShoreComponents-Widgets" selector="makeDateFromString:">makeDateFromString: aString
	^[ (printFormat = #(1 2 3 $. 1 1))
		ifTrue:
			[ | d |
			d := aString findTokens: '.'.
			Date 
				year: d third asNumber 
				month: d second asNumber 
				day: d first asNumber ]
		ifFalse: 
			[ aString asDate ]
	] on: Error do: [:error | Date today]
</body>

<body package="ShoreComponents-Widgets" selector="nextMonthOf:">nextMonthOf: aDate
 
	| year month day |

	year := aDate year + (aDate monthIndex // 12).
	month := aDate monthIndex \\ 12 + 1.
	day := (aDate dayOfMonth) min: (Date daysInMonth: month forYear: year).

	^ Date newDay: day month: month year: year.</body>

<body package="ShoreComponents-Widgets" selector="nextYearOf:">nextYearOf: aDate
 
	| year month day |

	year := aDate year + 1.
	month := aDate monthIndex.
	day := (aDate dayOfMonth) min: (Date daysInMonth: month forYear: year).

	^ Date newDay: day month: month year: year.</body>

<body package="ShoreComponents-Widgets" selector="prevMonthOf:">prevMonthOf: aDate
 
	| year month day |

	year := aDate year + (aDate monthIndex - 2 // 12).
	month := aDate monthIndex - 2 \\ 12 + 1.
	day := (aDate dayOfMonth) min: (Date daysInMonth: month forYear: year).

	^ Date newDay: day month: month year: year.</body>

<body package="ShoreComponents-Widgets" selector="prevYearOf:">prevYearOf: aDate
 
	| year month day |

	year := aDate year - 1.
	month := aDate monthIndex.
	day := (aDate dayOfMonth) min: (Date daysInMonth: month forYear: year).

	^ Date newDay: day month: month year: year.</body>

<body package="ShoreComponents-Widgets" selector="processDate:on:of:">processDate: aString on: aSymbol of: receiver

	receiver
		perform: aSymbol asMutator 
		with: (self makeDateFromString: aString)
</body>
</methods>

<methods>
<class-id>Seaside.ShoreDatePicker</class-id> <category>accessing</category>

<body package="ShoreComponents-Widgets" selector="printFormat">printFormat

	^ printFormat</body>

<body package="ShoreComponents-Widgets" selector="printFormat:">printFormat: definition

	printFormat := definition</body>
</methods>

<methods>
<class-id>Seaside.ShoreDatePicker</class-id> <category>library</category>

<body package="ShoreComponents-Widgets" selector="resources">resources
	^ WAUrl new
		addToPath: WADispatcher default basePath;
		addToPath: '/files/';
		addToPath: self class library name;
		yourself</body>
</methods>

<methods>
<class-id>Seaside.ShoreDatePicker class</class-id> <category>libraries</category>

<body package="ShoreComponents-Widgets" selector="library">library
	^ShoreDatePickerLibrary</body>

<body package="ShoreComponents-Widgets" selector="updateRoot:">updateRoot: anHtmlRoot
	self library default updateRoot: anHtmlRoot</body>
</methods>

<methods>
<class-id>Seaside.ShoreDatePickerSubmitting</class-id> <category>rendering</category>

<body package="ShoreComponents-Widgets" selector="renderDay:class:on:">renderDay: day class: cssClass on: html

	html tableData
		class: #shoreDatePickerDay;
		class: cssClass;
		onClick: 'datePickerSetDate('
			, id printString
			, ','
			, (day printFormat: printFormat) printString,
			')';
		onClick: 'document.getElementById('
			, formId printString 
			, ').submit()';
		with: [ html text: day dayOfMonth .]
	</body>
</methods>

<methods>
<class-id>Seaside.ShoreDatePickerSubmitting</class-id> <category>initialization</category>

<body package="ShoreComponents-Widgets" selector="initialize">initialize
	super initialize.
	formId := self renderer formId.
</body>
</methods>

<methods>
<class-id>Seaside.ShoreTable</class-id> <category>state variables</category>

<body package="ShoreComponents-Tables" selector="sortColumn">sortColumn

	^ sortColumn contents</body>

<body package="ShoreComponents-Tables" selector="sortColumn:">sortColumn: anObject 

	anObject = sortColumn contents
		ifTrue: [isReversed := isReversed not]
		ifFalse: [isReversed := false].
	sortColumn contents: anObject</body>
</methods>

<methods>
<class-id>Seaside.ShoreTable</class-id> <category>accessing</category>

<body package="ShoreComponents-Tables" selector="columns:">columns: anArray

	columns:= anArray</body>

<body package="ShoreComponents-Tables" selector="initialize">initialize

	super initialize.
	
	rows := #().
	isReversed := false.
	columns := #().
	sortColumn := WAStateHolder new.
	renderFooter := false.</body>

<body package="ShoreComponents-Tables" selector="isReversed">isReversed

	^ isReversed</body>

<body package="ShoreComponents-Tables" selector="renderFooter">renderFooter

	^ renderFooter</body>

<body package="ShoreComponents-Tables" selector="renderFooter:">renderFooter: aBoolean

	renderFooter := aBoolean</body>

<body package="ShoreComponents-Tables" selector="rowColors:">rowColors: colorArray

	rowColors := colorArray</body>

<body package="ShoreComponents-Tables" selector="rows">rows

	| r |
	
	self sortColumn ifNil: [^ rows].
	r := self sortColumn sortRows: rows.
	^ self isReversed ifTrue: [r reversed] ifFalse: [r]</body>

<body package="ShoreComponents-Tables" selector="rows:">rows: aCollection

	rows := aCollection</body>
</methods>

<methods>
<class-id>Seaside.ShoreTable</class-id> <category>rendering</category>

<body package="ShoreComponents-Tables" selector="renderColumn:row:on:">renderColumn: aColumn row: aRow on: html

	|text|
	
	text := aColumn textForRow: aRow.
	text isEmpty ifTrue: [text := ' '].
	html tableData 
		class: (aColumn styleBlock ifNotNil: [aColumn styleBlock value: aRow] ifNil: ['']);
		with: [
			aColumn renderBlock 
				ifNotNil: [ aColumn renderBlock value: aRow value: html ]
				ifNil: [
					aColumn canChoose
						ifFalse: [html text: text]
						ifTrue: [html anchor callback: [self chooseRow: aRow column: aColumn]; with: text] ]
	]</body>

<body package="ShoreComponents-Tables" selector="renderContentOn:">renderContentOn: html

	| table |
	
	table := html table.
	table 
		class: #shoreTable;
		cellspacing: 0;
		cellpadding: 5. 

	table with: [
		self renderTableHeaderOn: html.
		self renderRowsOn: html.
		self renderTableFooterOn: html.
	]</body>

<body package="ShoreComponents-Tables" selector="rendererClass">rendererClass 
	"Returns the receivers default renderer class"

	^ ShoreCanvas</body>

<body package="ShoreComponents-Tables" selector="renderFooterForColumn:on:">renderFooterForColumn: aColumn on: html

	html tableHeading with: [ html text: (aColumn totalForRows: rows)]
</body>

<body package="ShoreComponents-Tables" selector="renderHeaderForColumn:on:">renderHeaderForColumn: aColumn on: html

	html tableHeading with: [
		aColumn canSort
			ifTrue: [
				html anchor callback: [self sortColumn: aColumn]; with: aColumn title]
			ifFalse: [
				html text: aColumn title]
	]</body>

<body package="ShoreComponents-Tables" selector="renderRowNumber:item:on:">renderRowNumber: index item: row on: html

	html tableRow
		class: (self styleClassForRow: index item: row);
		with: [ 
			self visibleColumns do: [:ea | 
				self renderColumn: ea row: row on: html] ]</body>

<body package="ShoreComponents-Tables" selector="renderRowsOn:">renderRowsOn: html

	self rows withIndexDo: [:row :i | 
		self renderRowNumber: i item: row on: html ]</body>

<body package="ShoreComponents-Tables" selector="renderTableFooterOn:">renderTableFooterOn: html


	self renderFooter ifTrue: [
		html tableRow with: [ 
			self visibleColumns do: [ :ea | 
				self renderFooterForColumn: ea on: html] ] ]</body>

<body package="ShoreComponents-Tables" selector="renderTableHeaderOn:">renderTableHeaderOn: html

	html tableRow with: [ 
		self visibleColumns do: [ :ea | 
			self renderHeaderForColumn: ea on: html] ]</body>

<body package="ShoreComponents-Tables" selector="visibleColumns">visibleColumns

	^ columns select: [:col | col visible ].</body>
</methods>

<methods>
<class-id>Seaside.ShoreTable</class-id> <category>private</category>

<body package="ShoreComponents-Tables" selector="chooseRow:column:">chooseRow: aRow column: aColumn	
	
	aColumn chooseRow: aRow</body>
</methods>

<methods>
<class-id>Seaside.ShoreTable</class-id> <category>styles</category>

<body package="ShoreComponents-Tables" selector="styleClassForRow:item:">styleClassForRow: rowIndex item: row

	^ rowIndex even
		ifTrue: [ #even ]
		ifFalse: [ #odd ].</body>
</methods>

<methods>
<class-id>Seaside.ShoreLiveTable</class-id> <category>accessing</category>

<body package="ShoreComponents-Tables" selector="actionsBlock">actionsBlock

	^ actionsBlock</body>

<body package="ShoreComponents-Tables" selector="actionsBlock:">actionsBlock: anObject

	actionsBlock := anObject</body>

<body package="ShoreComponents-Tables" selector="columns:">columns: anArray
	
	columns := (Array with: self selectionColumn with: self previewColumn), anArray.

	sorters := anArray select: [:col |
		col canSort ].</body>

<body package="ShoreComponents-Tables" selector="compare:with:using:">compare: a with: b using: restSorters

	| res sorter va vb |
	sorter := restSorters first.	
	va := sorter valueForRow: a.
	vb := sorter valueForRow: b.

	res := sorter sortBlock value: va value: vb.
	sorter isReversed ifTrue: [
		res := (res - 2) negated + 2 ].
	((res = 2) and: [restSorters size &gt; 1]) ifTrue: [
		res := self compare: a with: b using:  restSorters allButFirst. ].

	^ res.</body>

<body package="ShoreComponents-Tables" selector="contentIdFor:">contentIdFor: rowIndex

	^ self id, '-', rowIndex displayString, 'content'</body>

<body package="ShoreComponents-Tables" selector="group:by:">group: rowsDict by: restGroupByColumns 

	| groupByColumn newDict |

	restGroupByColumns isEmpty ifTrue: [ ^ rowsDict ].

	groupByColumn := restGroupByColumns first.

	newDict := OrderedCollection new.
	(self group: rowsDict by: (restGroupByColumns allButFirst) ) do: [:assoc |
		(self privGroup: assoc value by: [:row | groupByColumn valueForRow: row ])
			do: [:group |
				newDict add: (((Array with: group key), assoc key) -&gt; group value) ]].

	^ newDict.</body>

<body package="ShoreComponents-Tables" selector="groupByColumns">groupByColumns 

	^ sorters select: [:col | col groupBy ].
</body>

<body package="ShoreComponents-Tables" selector="id">id
	"Answer the value of id"

	^ id</body>

<body package="ShoreComponents-Tables" selector="id:">id: anObject
	"Set the value of id"

	id := anObject</body>

<body package="ShoreComponents-Tables" selector="initialize">initialize

	super initialize.
	
	id := ShoreId new.
	sortCallbacks := IdentityDictionary new.

	sortColumn := nil.
	selectable := false.
</body>

<body package="ShoreComponents-Tables" selector="previewBlock">previewBlock
	"Answer the value of previewBlock"

	^ previewBlock</body>

<body package="ShoreComponents-Tables" selector="previewBlock:">previewBlock: anObject
	"Set the value of previewBlock"

	previewBlock := anObject</body>

<body package="ShoreComponents-Tables" selector="previewColumn">previewColumn

	^ (ShoreTableColumn new)
		renderBlock: [:row :html | 
			| updateScript rowIndex switchId |
			rowIndex := (rows indexOf: row) displayString.
			switchId := self switchIdFor: rowIndex.
			updateScript := previewRequest displayString.
			updateScript := updateScript copyReplaceAll: 'PARAM01' with: rowIndex.
			updateScript := updateScript copyReplaceAll: 'PARAM02' with: ( self contentIdFor: rowIndex).
			html span
				class: #shoreTablePreviewButton;
				id: switchId;
				onClick: (self swapPreviewScriptFor: (self previewIdFor: rowIndex) switchId: switchId style: 'shoreLiveTablePreview' updateScript: updateScript);
				with: [ html image url: ('plus.gif' asShoreUrl) ].

			    ];
		yourself.</body>

<body package="ShoreComponents-Tables" selector="previewContentIdFor:">previewContentIdFor: rowIndex

	^ self id, '-', rowIndex displayString, 'content'</body>

<body package="ShoreComponents-Tables" selector="previewIdFor:">previewIdFor: rowIndex

	^ self id, '-', rowIndex displayString, 'preview'</body>

<body package="ShoreComponents-Tables" selector="previewUpdateScriptFor:canvas:id:">previewUpdateScriptFor: rowIndex canvas: html id: contentId
	
	| arg |

	arg := ValueHolder new.
	
	^ html updater
		id: contentId;
		callback: [ :val | 
			arg contents: (rows at: val asInteger) ] value: rowIndex;
		callback: [ :h | 
			previewBlock value: h value: arg contents ];
		yourself.
</body>

<body package="ShoreComponents-Tables" selector="privGroup:by:">privGroup: collection by: keyBlock

	| result key |
	result := OrderedCollection new.
	collection do: 
		[:e | 
		| assoc |
		key := keyBlock value: e.
		assoc := result detect: [:ass | ass key = key] ifNone: [result add: (key -&gt; OrderedCollection new)].
		assoc value add: e. ].

	^ result</body>

<body package="ShoreComponents-Tables" selector="renderActionsOn:">renderActionsOn: html

	actionsBlock ifNil: [ ^ self ].

	html div class: #shoreLiveTableActions; with: [
		actionsBlock value: html.		
	].
</body>

<body package="ShoreComponents-Tables" selector="renderContentOn:">renderContentOn: html

	sortCallbacks := IdentityDictionary new.
	columns do: [:col |
		sortCallbacks at: col put: (self sortCallbackFor: col canvas: html )].

	previewRequest := self previewUpdateScriptFor: 'PARAM01' canvas: html id: 'PARAM02'.

	selection := Set new.

	checkBoxRequest := html request
		callback: [:val | 
			| row |
			row := rows at: val asInteger.
			(selection includes: row)
				ifTrue: [ selection remove: row ]
				ifFalse: [ selection add: row ] ]
		value: 'PARAM01'.

	html form with: [
		html div id: id; with: [
			self renderTableOn: html ].
		self renderActionsOn: html.  ].</body>

<body package="ShoreComponents-Tables" selector="renderGroupHeader:on:lastHeader:">renderGroupHeader: header on: html lastHeader: lastHeader

	| col |

	col := OrderedCollection new.
	lastHeader isNil 
		ifFalse: [
			| changed | 
			changed := false.
			col := lastHeader reversed with: header reversed collect: [:last :new |
				(changed not and: [last = new])
					ifTrue: [ nil ]
					ifFalse: [ changed := true. new ] ] ]
		ifTrue: [ col := header reversed ].

	col withIndexDo: [:head :index |
		head ifNotNil: [
			html tableRow with: [ 
				(index &gt; 1) ifTrue: [
					html tableData
						class: #shoreLiveTableOffset;
						colSpan: index-1;
						with: [ html space ] ].
				html tableData
					class: #shoreLiveTableGroup;
					colSpan: self visibleColumns size - index +1+(self groupByColumns size);
					with: head.]]]
		
</body>

<body package="ShoreComponents-Tables" selector="renderHeaderForColumn:on:">renderHeaderForColumn: aColumn on: html

	| th |
	
	th := html tableHeading.
	aColumn canSort ifTrue: [
		th class: 'sortable'.
		th onClick: (sortCallbacks at: aColumn)].
	th with: [
		 aColumn title isNil 
			ifFalse: [ html text: aColumn title ]
			ifTrue: [ html space ].
		aColumn canSort ifTrue: [
			aColumn isReversed 
				ifFalse: [ html image url: ('down.gif' asShoreUrl) ]
				ifTrue: [ html image url: ('up.gif' asShoreUrl)  ].
			html 
				span class: #shoreTableColumnSortIndex; 
				with: (sorters indexOf: aColumn) displayString]
	]</body>

<body package="ShoreComponents-Tables" selector="renderRowNumber:item:on:">renderRowNumber: index item: row on: html

	| rowId contentId styleClass rowIndex |

	styleClass := self styleClassForRow: index item: row.
	
	html tableRow
		class: styleClass;
		with: [ 
			self groupByColumns isEmpty ifFalse: [
				html tableData
					class: #shoreLiveTableOffset;
					colSpan: self groupByColumns size;
					with: [ html space ]].

			self visibleColumns do: [:ea | 
				self renderColumn: ea row: row on: html] ].

	rowIndex := rows indexOf: row.

	rowId := self previewIdFor: rowIndex.
	contentId := self contentIdFor: rowIndex.

	html tableRow
		id: rowId;
		class: 'hidden';
		with: [ 
			self groupByColumns isEmpty ifFalse: [
				html tableData
					colSpan: self groupByColumns size;
					with: [ html space ]].
			html tableData
				colSpan: self visibleColumns size;
				with: [ 
					html div 				
					id: contentId;
						with: [html space ]]].
</body>

<body package="ShoreComponents-Tables" selector="renderRowsOn:">renderRowsOn: html

	| groupByCols groups index lastHead |

	groupByCols := self groupByColumns reversed.

	groups := self group: (OrderedCollection with: (Array new-&gt;self rows)) by: groupByCols.

	index := 1.
	lastHead := nil.
	groups do: [:assoc | 
		| groupKey groupCol |
		groupKey := assoc key.
		groupCol := assoc value.
		self renderGroupHeader: groupKey on: html lastHeader: lastHead.
		lastHead := groupKey.

		groupCol do: [:row |
			self renderRowNumber: index item: row on: html.
			index := index + 1 ]].</body>

<body package="ShoreComponents-Tables" selector="renderSelectAllAnchorOn:">renderSelectAllAnchorOn: html
	
	| script |

	script := '
		for(i=1; i&lt;', rows size displayString, '; i++)
		{
			var elm = document.getElementById("', self id, '-" + i + "checkbox");
			if (elm) {
				elm.checked = true;
			}					
		}'.

	html anchor 
		onClick: script;
		onClick: (html request 
			callback: [ self selection addAll: rows ]);
		with: 'all' translated</body>

<body package="ShoreComponents-Tables" selector="renderSelectNoneAnchorOn:">renderSelectNoneAnchorOn: html
	
	| script |

	script := '
		for(i=1; i&lt;', rows size displayString, '; i++)
		{
			var elm = document.getElementById("', self id, '-" + i + "checkbox");
			if (elm) {
				elm.checked = false;
			}					
		}'.

	html anchor 
		onClick: script;
		onClick: (html request 
			callback: [ self selection: Set new ]);
		with: 'none' translated</body>

<body package="ShoreComponents-Tables" selector="renderSelectorFor:on:">renderSelectorFor: aRow on: html

	html checkbox
		class: #shoreLiveTableSelector;
		value: false;
		callback: [:val | 
			val ifTrue: [ selection add: aRow] ].</body>

<body package="ShoreComponents-Tables" selector="renderTableFooterOn:">renderTableFooterOn: html


	self renderFooter ifTrue: [
		self groupByColumns isEmpty ifFalse: [
			html tableHeading
				colSpan: (self groupByColumns size);
				with: [ html space ]].
		html tableRow with: [ 
			self visibleColumns do: [ :ea | 
				self renderFooterForColumn: ea on: html] ] ]</body>

<body package="ShoreComponents-Tables" selector="renderTableHeaderOn:">renderTableHeaderOn: html

	html tableRow with: [ 
		self groupByColumns isEmpty ifFalse: [
			self groupByColumns size timesRepeat: [
				html tableHeading
					class: #shoreLiveTableGroupHeader;
					with: [ html space ]]].
		self visibleColumns do: [ :ea | 
			self renderHeaderForColumn: ea on: html] ]</body>

<body package="ShoreComponents-Tables" selector="renderTableOn:">renderTableOn: html

	super renderContentOn: html .


</body>

<body package="ShoreComponents-Tables" selector="rows">rows

	sorters isEmpty ifTrue: [^ rows].
	^ self sortRows: rows.
</body>

<body package="ShoreComponents-Tables" selector="selection">selection
	
	^ selection</body>

<body package="ShoreComponents-Tables" selector="selection:">selection: anObject

	selection := anObject</body>

<body package="ShoreComponents-Tables" selector="selectionColumn">selectionColumn

	^ (ShoreTableColumn new)
		renderBlock: [:row :html | 
				| checkBoxId |
				checkBoxId := rows indexOf: row.
				html checkbox
					class: #shoreLiveTableSelector;
					id: (self id, '-', checkBoxId displayString, 'checkbox');
					value: false;
					onClick: (checkBoxRequest displayString copyReplaceAll: 'PARAM01' with: checkBoxId displayString);
					callback:[:r| ];
					yourself ];
		yourself.</body>

<body package="ShoreComponents-Tables" selector="sortBlockFrom:">sortBlockFrom: restSorters

	^ [:a :b | 
		| av bv res |
		av := a value.
		bv := b value.
		res := restSorters first sortBlock value: av value: bv.
		restSorters first isReversed ifTrue: [
			res := res negated ].
		((res = 0) and: [restSorters size &gt; 1]) ifTrue: [
			res := (self sortBlockFrom: restSorters allButFirst) value: av value: bv.].
		 res ].</body>

<body package="ShoreComponents-Tables" selector="sortCallbackFor:canvas:">sortCallbackFor: col canvas: html

	^ html updater
		id: self id;
		callback: [:h | self sortColumn: col. self renderTableOn: h].</body>

<body package="ShoreComponents-Tables" selector="sortColumn">sortColumn

	^ sortColumn</body>

<body package="ShoreComponents-Tables" selector="sortColumn:">sortColumn: anObject 

	anObject = sorters first
		ifTrue: [ anObject isReversed: anObject isReversed not].
	
	sorters remove: anObject.
	sorters addFirst: anObject.</body>

<body package="ShoreComponents-Tables" selector="sortRows:">sortRows: anArray 
	| |
	^ anArray asSortedCollection: [:a :b |
		(self compare: a with: b using: sorters) &lt;= 2].
	</body>

<body package="ShoreComponents-Tables" selector="swapPreviewScriptFor:style:updateScript:">swapPreviewScriptFor: rowId style: styleClass updateScript: updateScript


 ^ '	shoreTableSwapPreview("{1}","{2}","{3}","{4}","{5}")' 

	format: (OrderedCollection new
		add: rowId;
		add: styleClass;
		add: updateScript;
		add: ('plus.gif' asShoreUrl);
		add: ('minus.gif' asShoreUrl);
		yourself)</body>

<body package="ShoreComponents-Tables" selector="swapPreviewScriptFor:switchId:style:updateScript:">swapPreviewScriptFor: rowId switchId: switchId style: styleClass updateScript: updateScript


 ^ '	shoreTableSwapPreview("{1}","{2}","{3}","{4}","{5}","{6}")' 

	format: (OrderedCollection new
		add: rowId;
		add: switchId;
		add: styleClass;
		add: updateScript;
		add: ('plus.gif' asShoreUrl);
		add: ('minus.gif' asShoreUrl);
		yourself)</body>

<body package="ShoreComponents-Tables" selector="switchIdFor:">switchIdFor: rowIndex

	^ self id, '-', rowIndex displayString, 'switch'</body>

<body package="ShoreComponents-Tables" selector="visibleColumns">visibleColumns

	^ columns select: [:col | col visible ].</body>
</methods>

<methods>
<class-id>Seaside.ShoreRootComponent</class-id> <category>rendering</category>

<body package="ShoreComponents-Kernel" selector="children">children

	^ Array with: helper</body>

<body package="ShoreComponents-Kernel" selector="initialize">initialize

	super initialize.

	id := ShoreId new.
	
	helper := ShoreHelper new.</body>

<body package="ShoreComponents-Kernel" selector="rendererClass">rendererClass 
	"Returns the receivers default renderer class"

	^ ShoreCanvas</body>

<body package="ShoreComponents-Kernel" selector="renderWithContext:">renderWithContext: aRenderingContext
	
	ShoreCurrentRoot use: self during: [
	| html callbacks |
	callbacks := aRenderingContext callbacksFor: self.
	html := self rendererClass context: aRenderingContext callbacks: callbacks.
	(self showHalo and: [ aRenderingContext isDebugMode ])
		ifTrue: [ (WAHalo for: self) renderContentOn: html ]
		ifFalse: [ self renderContentOn: html. html render: helper. ].
	html flush
	
		]</body>
</methods>

<methods>
<class-id>Seaside.ShoreRootComponent</class-id> <category>request processing</category>

<body package="ShoreComponents-Kernel" selector="processChildCallbacks:">processChildCallbacks: aStream

	ShoreCurrentRoot use: self during: [
		super processChildCallbacks: aStream ]
</body>
</methods>

<methods>
<class-id>Seaside.ShoreRootComponent class</class-id> <category>accessing</category>

<body package="ShoreComponents-Kernel" selector="appName">appName

	^ self name</body>

<body package="ShoreComponents-Kernel" selector="folderName">folderName

	^'shorecomponents'</body>
</methods>

<methods>
<class-id>Seaside.ShoreRootComponent class</class-id> <category>initialization</category>

<body package="ShoreComponents-Kernel" selector="initializeApplication">initializeApplication

	^(self registerAsApplication: self appName)
		addLibrary: SULibrary; 
		addLibrary: ShoreStandardStyles;
		addLibrary: ShoreStandardScripts;
		addLibrary: ShoreStandardScheme.

	
</body>
</methods>

<methods>
<class-id>Seaside.ShoreRootComponent class</class-id> <category>testing</category>

<body package="ShoreComponents-Kernel" selector="canBeRoot">canBeRoot
	
	^ true</body>
</methods>

<methods>
<class-id>Seaside.ShoreDemo1</class-id> <category>accessing</category>

<body package="ShoreComponents-Demo1" selector="children">children

	^ Array with: header with: root.</body>
</methods>

<methods>
<class-id>Seaside.ShoreDemo1</class-id> <category>initialization</category>

<body package="ShoreComponents-Demo1" selector="initialize">initialize

	super initialize.

	header := ShorePageHeader new.
	header title: 'ShoreComponents Demonstration'.
	header subtitle: self class description.
	
	root := ShoreDemo1Root new.



	</body>
</methods>

<methods>
<class-id>Seaside.ShoreDemo1</class-id> <category>rendering</category>

<body package="ShoreComponents-Demo1" selector="renderContentOn:">renderContentOn: html 

	header image: 'logo.png' asShoreUrl.
	html render: header.
	html render: root</body>
</methods>

<methods>
<class-id>Seaside.ShoreDemo1 class</class-id> <category>accessing</category>

<body package="ShoreComponents-Demo1" selector="description">description

	^'ShoreComponents demo 1'</body>
</methods>

<methods>
<class-id>Seaside.ShoreDemo1 class</class-id> <category>as yet unclassified</category>

<body package="ShoreComponents-Demo1" selector="appName">appName

	^ self folderName , '/demo1'</body>
</methods>

<methods>
<class-id>Seaside.ShoreDemo1 class</class-id> <category>initialization</category>

<body package="ShoreComponents-Demo1" selector="initialize">initialize

	" self initialize "

	self initializeApplication</body>
</methods>

<methods>
<class-id>Seaside.ShoreDemo2</class-id> <category>rendering</category>

<body package="ShoreComponents-Demo2" selector="renderContentOn:">renderContentOn: html 
	header image: 'logo.png' asShoreUrl.
	html div id: id;
		 class: #shoreLayoutHolder;
		
		with: [html render: header.
			html div class: #shoreLayoutLeftColumn;
				
				with: [html div class: #shoreLayoutColumn;
						
						with: [self renderLeftColumnOn: html]].
			html div class: #shoreLayoutRightColumn;
				
				with: [html div class: #shoreLayoutColumn;
						
						with: [self renderRightColumnOn: html]].
			html div class: #shoreLayoutMiddleColumn;
				
				with: [self renderMiddleColumnOn: html].
			html div class: #shoreLayoutCleaner;
				
				with: [html space].
			html div class: #shorePageFooter;
				 class: #shoreLayoutFooter;
				
				with: [self renderFooterOn: html]]</body>

<body package="ShoreComponents-Demo2" selector="renderFooterOn:">renderFooterOn: html

	html text: 'ShoreComponents demonstration application #2' translated

</body>

<body package="ShoreComponents-Demo2" selector="renderLeftColumnOn:">renderLeftColumnOn: html

	html render: leftPanel

	


</body>

<body package="ShoreComponents-Demo2" selector="renderMiddleColumnOn:">renderMiddleColumnOn: html

	html render: target.





</body>

<body package="ShoreComponents-Demo2" selector="renderRightColumnOn:">renderRightColumnOn: html

	html render: rightPanel




</body>
</methods>

<methods>
<class-id>Seaside.ShoreDemo2</class-id> <category>initialization</category>

<body package="ShoreComponents-Demo2" selector="header">header

	^ header</body>

<body package="ShoreComponents-Demo2" selector="initialize">initialize

	super initialize.

	
	header := ShorePageHeader new.
	header title: 'ShoreComponents Demonstration'.
	header subtitle: self class description.

	leftPanel := ShoreDynamicPanel new.
	leftPanel addSection: (ShoreDemo1DemosMenu new).
	leftPanel addSection: (ShoreDemo1SimpleComponent new) .

	rightPanel := ShoreDynamicPanel new.
	rightPanel addSection: (ShoreDemo1DemosMenu new) .
	rightPanel addSection: (ShoreDemo1SimpleComponent new) .

	leftPanel providers add: rightPanel.
	rightPanel providers add: leftPanel.
	
	target := ShoreDemo1Introduction new.</body>
</methods>

<methods>
<class-id>Seaside.ShoreDemo2</class-id> <category>accessing</category>

<body package="ShoreComponents-Demo2" selector="children">children

	^ Array with: header with: leftPanel with: rightPanel with: target </body>
</methods>

<methods>
<class-id>Seaside.ShoreDemo2</class-id> <category>hierarchy</category>

<body package="ShoreComponents-Demo2" selector="processChildCallbacks:">processChildCallbacks: aStream

	ShoreCurrentTarget use: target during: [
		super processChildCallbacks: aStream ]
</body>

<body package="ShoreComponents-Demo2" selector="root">root

	^ target.</body>

<body package="ShoreComponents-Demo2" selector="target">target

	^ target.</body>
</methods>

<methods>
<class-id>Seaside.ShoreDemo2 class</class-id> <category>accessing</category>

<body package="ShoreComponents-Demo2" selector="description">description

	^'ShoreComponents demo 2'</body>
</methods>

<methods>
<class-id>Seaside.ShoreDemo2 class</class-id> <category>as yet unclassified</category>

<body package="ShoreComponents-Demo2" selector="appName">appName

	^ self folderName , '/demo2'</body>
</methods>

<methods>
<class-id>Seaside.ShoreDemo2 class</class-id> <category>initialization</category>

<body package="ShoreComponents-Demo2" selector="initialize">initialize

	" self initialize "

	self initializeApplication.</body>
</methods>

<methods>
<class-id>Seaside.ShoreDemo1TableDemo</class-id> <category>rendering</category>

<body package="ShoreComponents-Demo1" selector="renderContentOn:">renderContentOn: html

	html heading: self pageTitle.
	
	html render: table.
	
	</body>
</methods>

<methods>
<class-id>Seaside.ShoreDemo1TableDemo</class-id> <category>initialization</category>

<body package="ShoreComponents-Demo1" selector="initialize">initialize

	super initialize.

	table := ShoreTable new.
	
	table rows: (Smalltalk allClasses first: 15);
		columns: 
			(Array with: (ShoreTableColumn selector: #yourself title: 'class' translated)
			with: ( ShoreTableColumn new
				title: 'name length' translated;
				valueBlock: [:ea | ea name size])
			with:
			 (ShoreTableColumn new
				title: 'reversed name' translated;
				valueBlock: [:ea | ea name reversed])).

		

</body>
</methods>

<methods>
<class-id>Seaside.ShoreDemo1TableDemo</class-id> <category>accessing</category>

<body package="ShoreComponents-Demo1" selector="children">children

	^ Array with: table</body>

<body package="ShoreComponents-Demo1" selector="pageTitle">pageTitle

	^ 'Table report demo'.</body>
</methods>

<methods>
<class-id>Seaside.ShoreDemo1TableDemo class</class-id> <category>as yet unclassified</category>

<body package="ShoreComponents-Demo1" selector="menuName">menuName

	^ 'Table report' translated</body>

<body package="ShoreComponents-Demo1" selector="menuPriority">menuPriority

	^ 50</body>
</methods>

<methods>
<class-id>Seaside.ShoreDemo1TableDemo class</class-id> <category>initialization</category>

<body package="ShoreComponents-Demo1" selector="initialize">initialize

	self registerToMenu
</body>
</methods>

<methods>
<class-id>Seaside.ShoreDemo1TableDemo2</class-id> <category>initialization</category>

<body package="ShoreComponents-Demo1" selector="initialize">initialize

	| rows columns |
   
	super initialize.
 
	rows := #(6 5 4 3 2 1).
	columns := OrderedCollection new
		add: ((ShoreTableColumn selector: #yourself title: 'original' translated)
			clickBlock: [:row | self tellMeMoreAbout: row];
			sortBlock: [:a :b | a  &lt;= b ];
			hasTotal: true;
			 yourself);   
		add: ((ShoreTableColumn selector: #factorial title: 'factorial' translated)
			hasTotal: true;
			styleBlock: [:rowItem | rowItem factorial  &gt;=100 ifTrue: ['big'] ifFalse: [''] ];
			yourself);
		add: (ShoreTableColumn new 
			valueBlock: [:rowItem | rowItem even ifTrue: ['even' translated] ifFalse: ['odd' translated]];
			title: 'odd/even' translated;
			yourself);
		yourself.
	

	table := ShoreTable new.
	table rows: rows; columns: columns.
	
	table renderFooter: true.

</body>
</methods>

<methods>
<class-id>Seaside.ShoreDemo1TableDemo2</class-id> <category>style</category>

<body package="ShoreComponents-Demo1" selector="style">style
	^ '
.ShoreDemo1TableDemo2 th { background-color: #525252; color: white;}
.ShoreDemo1TableDemo2 th a { color: white;}
.ShoreDemo1TableDemo2 td {text-align: right;}
.ShoreDemo1TableDemo2 td.big {color: red; font-weight: bold;}
.ShoreDemo1TableDemo2 tr+tr&gt;th {text-align: right}
.ShoreDemo1TableDemo2 tr.odd { background-color: #dfdffa}
.ShoreDemo1TableDemo2 tr.even { background-color: white}
'</body>
</methods>

<methods>
<class-id>Seaside.ShoreDemo1TableDemo2</class-id> <category>rendering</category>

<body package="ShoreComponents-Demo1" selector="renderContentOn:">renderContentOn: html

	html heading: self pageTitle.
	
	html div class: #ShoreDemo1TableDemo2; with: [
		html render: table ].
	
</body>

<body package="ShoreComponents-Demo1" selector="tellMeMoreAbout:">tellMeMoreAbout: aNumber

	self shoreInform: 'The number ' translated, aNumber printString , ' is a very pretty number.' translated</body>
</methods>

<methods>
<class-id>Seaside.ShoreDemo1TableDemo2</class-id> <category>accessing</category>

<body package="ShoreComponents-Demo1" selector="children">children

	^ Array with: table</body>

<body package="ShoreComponents-Demo1" selector="pageTitle">pageTitle

	^ 'Table report enhanced demo'.</body>
</methods>

<methods>
<class-id>Seaside.ShoreDemo1TableDemo2 class</class-id> <category>as yet unclassified</category>

<body package="ShoreComponents-Demo1" selector="menuName">menuName

	^ 'Table report (enhanced)' translated</body>

<body package="ShoreComponents-Demo1" selector="menuPriority">menuPriority

	^ 52</body>
</methods>

<methods>
<class-id>Seaside.ShoreDemo1TableDemo2 class</class-id> <category>initialization</category>

<body package="ShoreComponents-Demo1" selector="initialize">initialize

	self registerToMenu
</body>
</methods>

<methods>
<class-id>Seaside.ShoreDemo1RichEditDemo</class-id> <category>rendering</category>

<body package="ShoreComponents-Demo1" selector="renderContentOn:">renderContentOn: html

	html heading: self pageTitle.
	
	html form with: [
		html render: editor.
		html buttons: [		
			html submitButton.].
	].

	html paragraph: 'The content of the ShoreRichEdit:'.
	html html: editor content.
</body>
</methods>

<methods>
<class-id>Seaside.ShoreDemo1RichEditDemo</class-id> <category>initialization</category>

<body package="ShoreComponents-Demo1" selector="initialize">initialize

	super initialize.

	editor := ShoreRichEdit new.

</body>
</methods>

<methods>
<class-id>Seaside.ShoreDemo1RichEditDemo</class-id> <category>accessing</category>

<body package="ShoreComponents-Demo1" selector="children">children

	^ Array with: editor.</body>

<body package="ShoreComponents-Demo1" selector="pageTitle">pageTitle

	^ 'Rich edit demo'.</body>
</methods>

<methods>
<class-id>Seaside.ShoreDemo1RichEditDemo class</class-id> <category>accessing</category>

<body package="ShoreComponents-Demo1" selector="menuName">menuName

	^ 'Rich edit' translated</body>

<body package="ShoreComponents-Demo1" selector="menuPriority">menuPriority

	^ 30</body>
</methods>

<methods>
<class-id>Seaside.ShoreDemo1RichEditDemo class</class-id> <category>initialization</category>

<body package="ShoreComponents-Demo1" selector="initialize">initialize

	self registerToMenu
</body>
</methods>

<methods>
<class-id>Seaside.ShoreNestedFormTag</class-id> <category>accessing</category>

<body package="ShoreComponents-Kernel" selector="attributes">attributes

	^ self parentForm attributes</body>

<body package="ShoreComponents-Kernel" selector="defaultAction:">defaultAction: aBlock

	self parentForm defaultAction: aBlock</body>

<body package="ShoreComponents-Kernel" selector="multipart:">multipart: aBoolean

	self parentForm multipart: aBoolean</body>

<body package="ShoreComponents-Kernel" selector="name:">name: aString

	self parentForm attributeAt: 'name' put: aString</body>

<body package="ShoreComponents-Kernel" selector="parentForm">parentForm
	"Answer the value of parentForm"

	^ parentForm</body>

<body package="ShoreComponents-Kernel" selector="parentForm:">parentForm: anObject
	"Set the value of parentForm"

	parentForm := anObject</body>

<body package="ShoreComponents-Kernel" selector="tag">tag
	^ 'div'</body>
</methods>

<methods>
<class-id>Seaside.ShoreNestedFormTag</class-id> <category>private</category>

<body package="ShoreComponents-Kernel" selector="after">after
"	canvas context actionUrl parameters keysAndValuesDo:
		[:k :v |
		canvas hiddenInput name: k; value: v.
		canvas text: ' ']"</body>
</methods>

<methods>
<class-id>Seaside.ShoreDemo1Root</class-id> <category>initialization</category>

<body package="ShoreComponents-Demo1" selector="initialize">initialize

	| path |

	super initialize.

	panel := ShoreXPPanel new.
	panel addSection: (ShoreDemo1DemosMenu new) .
	panel addSection: (ShoreDemo1SimpleComponent new) .

	target := ShoreDemo1Introduction new.

	path := self session currentRequest url allButFirst: self session application basePath size.
	(path notEmpty and: [ path ~= '/' ]) 
		ifTrue: [ self processStatic: path allButFirst].



	</body>

<body package="ShoreComponents-Demo1" selector="processStatic:">processStatic: path 

	| classMapping |

	classMapping := ShoreDemo1DemosMenu demoMapping  
		detect: [:association | association value = path ] 
		ifNone: [ ^ self].

	self shoreTarget show: ((Smalltalk at: classMapping value asSymbol) new).
	



	</body>
</methods>

<methods>
<class-id>Seaside.ShoreDemo1Root</class-id> <category>style information</category>

<body package="ShoreComponents-Demo1" selector="style">style

	^ '

.leftPanel {
	vertical-align: top;
	width: 220px;
	margin: 0px; 
	padding: 0px;
	height: 100%;
	background-color: rgb(116, 150, 226);

}

.layoutTable {
	width: 100%;
	height: 100%;
	padding: 0px;
}

.main {
	width: 100%;
	padding: 5px;
	margin: 0px;
	margin-bottom: 0px;
	height: 100%;
	padding-bottom: 20px;
}





'</body>
</methods>

<methods>
<class-id>Seaside.ShoreDemo1Root</class-id> <category>rendering</category>

<body package="ShoreComponents-Demo1" selector="processChildCallbacks:">processChildCallbacks: aStream

	ShoreCurrentTarget use: target during: [
		super processChildCallbacks: aStream ]
</body>

<body package="ShoreComponents-Demo1" selector="renderContentOn:">renderContentOn: html 
	html table class: #layout;
		with: [html tableRow
				with: [html tableData class: #leftPanel;
						
						with: [html div class: #leftPanel;
								
								with: [html render: panel]].
					html tableData class: #main;
						 attributeAt: #valign put: #top;
						
						with: [html render: target]]]</body>

<body package="ShoreComponents-Demo1" selector="rendererClass">rendererClass 
	"Returns the receivers default renderer class"

	^ ShoreCanvas</body>
</methods>

<methods>
<class-id>Seaside.ShoreDemo1Root</class-id> <category>accessing</category>

<body package="ShoreComponents-Demo1" selector="children">children

	^ Array with: panel with: target </body>
</methods>

<methods>
<class-id>Seaside.ShoreDemo1Root</class-id> <category>hierarchy</category>

<body package="ShoreComponents-Demo1" selector="target">target

	^ target.</body>
</methods>

<methods>
<class-id>Seaside.ShoreDemo1SimpleComponent</class-id> <category>rendering</category>

<body package="ShoreComponents-Demo1" selector="renderContentOn:">renderContentOn: html

	html paragraph: 'This is a simple ShoreComponent' translated.

	html paragraph: 'Today: ' translated, Date today displayString.</body>

<body package="ShoreComponents-Demo1" selector="rendererClass">rendererClass 
	"Returns the receivers default renderer class"

	^ ShoreCanvas</body>
</methods>

<methods>
<class-id>Seaside.ShoreDemo1SimpleComponent</class-id> <category>accessing</category>

<body package="ShoreComponents-Demo1" selector="name">name

	^ 'Simple component'</body>
</methods>

<methods>
<class-id>Seaside.ShoreDemo1WebTree</class-id> <category>interface creation</category>

<body package="ShoreComponents-Demo1" selector="createTreeView1">createTreeView1

	^ (self treeComponentClass new)
		 rootNodes: self testTreeProvider webTree1;
		 yourself</body>

<body package="ShoreComponents-Demo1" selector="createTreeView2">createTreeView2

	^ (self treeComponentClass new)
		 rootNodes: self testTreeProvider webTree2;
		 yourself</body>

<body package="ShoreComponents-Demo1" selector="createTreeView3">createTreeView3

	^ (self treeComponentClass new)
		 rootNodes: self testTreeProvider webTree3;
		 yourself</body>

<body package="ShoreComponents-Demo1" selector="createTreeView4">createTreeView4

	^ (self treeComponentClass new)
		rootNodes: self testTreeProvider webTree4;			
		yourself</body>

<body package="ShoreComponents-Demo1" selector="createTreeView5">createTreeView5

	^ (self treeComponentClass new)
		 rootNodes: self testTreeProvider webTree5;
		 yourself</body>

<body package="ShoreComponents-Demo1" selector="createTreeView6">createTreeView6

	^ (self selectTreeComponentClass new)
		rootNodes: self testTreeProvider webTree5;
		eventHandler: self;
		yourself</body>
</methods>

<methods>
<class-id>Seaside.ShoreDemo1WebTree</class-id> <category>initialization</category>

<body package="ShoreComponents-Demo1" selector="initialize">initialize

	super initialize.
	
	tree := WAComponent new.</body>
</methods>

<methods>
<class-id>Seaside.ShoreDemo1WebTree</class-id> <category>actions</category>

<body package="ShoreComponents-Demo1" selector="showTree:">showTree: aTreeView
	browser := nil.
	tree show: aTreeView.</body>
</methods>

<methods>
<class-id>Seaside.ShoreDemo1WebTree</class-id> <category>accessing</category>

<body package="ShoreComponents-Demo1" selector="pageTitle">pageTitle

	^ 'Sample Trees' translated</body>
</methods>

<methods>
<class-id>Seaside.ShoreDemo1WebTree</class-id> <category>attributes</category>

<body package="ShoreComponents-Demo1" selector="selectTreeComponentClass">selectTreeComponentClass
	"Returns the component used for rendering selectable trees"

	^ShoreSelectWebTree</body>

<body package="ShoreComponents-Demo1" selector="testTreeProvider">testTreeProvider
	"Returns an object providing access to test examples for trees"

	^self class</body>

<body package="ShoreComponents-Demo1" selector="treeComponentClass">treeComponentClass
	"Returns the component used for rendering trees"

	^ShoreWebTree</body>
</methods>

<methods>
<class-id>Seaside.ShoreDemo1WebTree</class-id> <category>rendering</category>

<body package="ShoreComponents-Demo1" selector="renderContentOn:">renderContentOn: html 

	html heading: self pageTitle.

	html unorderedList list: (OrderedCollection new
		add: [ html anchor callback: [ self showTree: self createTreeView1 ]; with: 'Sample tree 1'.];
		add: [ html anchor callback: [ self showTree: self createTreeView2 ]; with: 'Sample tree 2'.];
		add: [ html anchor callback: [ self showTree: self createTreeView3 ]; with: 'Sample tree 3'.];
		add: [ html anchor callback: [ self showTree: self createTreeView4 ]; with: 'Sample tree 4'.];
		add: [ html anchor callback: [ self showTree: self createTreeView5 ]; with: 'Smalltalk Hierarchy'.];
		add: [ html anchor callback: [ self showTree: self createTreeView6 ]; with: 'Smalltalk Hierarchy with Class Browser'.];
		yourself).
		

	html table:
		[html tableRow:
			[html tableData:
				[html div id: 'ShoreTreeView'; with: [html render: tree]].
			html tableData:
				[html div id: 'ShoreClassBrowser'; with: [html render: browser]]]].
		
</body>

<body package="ShoreComponents-Demo1" selector="style">style
	^ '
div#ShoreTreeView {
	height: 45em;
	width: 18em;
	overflow: auto;
}
div#ShoreClassBrowser {
	margin-left: 1em;
	width: 50em;
}
td {
	vertical-align: top;
}

'</body>
</methods>

<methods>
<class-id>Seaside.ShoreDemo1WebTree</class-id> <category>events</category>

<body package="ShoreComponents-Demo1" selector="onCollapseNode:">onCollapseNode: aNode</body>

<body package="ShoreComponents-Demo1" selector="onExpandNode:">onExpandNode: aNode</body>

<body package="ShoreComponents-Demo1" selector="onSelectNode:">onSelectNode: aNode
	browser isNil ifTrue:
		[browser := ShoreBrowser fullOnClass: aNode wrappedObject]
	ifFalse:
		[browser model selectedClass = aNode wrappedObject
			ifTrue:
				[browser := nil]
			ifFalse:
				[browser model setClass: aNode wrappedObject selector: nil]]</body>
</methods>

<methods>
<class-id>Seaside.ShoreDemo1WebTree</class-id> <category>hierarchy</category>

<body package="ShoreComponents-Demo1" selector="children">children

	^ Array with: tree with: browser</body>
</methods>

<methods>
<class-id>Seaside.ShoreDemo1WebTree class</class-id> <category>examples</category>

<body package="ShoreComponents-Demo1" selector="webTree1">webTree1
 
	^ OrderedCollection new
		add: (self simpleTreeFor: #('A' 'D' 'E' ));
		
		add: (self simpleTreeFor: #('B' 'F' 'G' ));
		
		add: (self nodeFor: 'Z');
		
		add: (self simpleTreeFor: #('C' 'H' 'I' ));
		 yourself</body>

<body package="ShoreComponents-Demo1" selector="webTree2">webTree2
 
	^OrderedCollection new
		add: (self simpleTreeFor: #('A' 'D' 'E'));
		add: (self simpleTreeFor: #('B' 'F' 'G'));		
		add: (self simpleTreeFor: #('C' 'H' 'I'));
		add: (self nodeFor: 'Z');
		yourself</body>

<body package="ShoreComponents-Demo1" selector="webTree3">webTree3
 
	
	^OrderedCollection 
		with: (self simpleTreeFor: #('A' 'D' 'E')) 		 
	 

	
	
	</body>

<body package="ShoreComponents-Demo1" selector="webTree4">webTree4
 
	|node|
	node := self simpleTreeFor: #('B' 'F' 'G').	
	node addChild: (self simpleTreeFor: #('J' 'K' 'L')).
	^OrderedCollection new
		add: (self simpleTreeFor: #('A' 'D' 'E'));
		add: node;
		add: (self nodeFor: 'Z');
		add: (self simpleTreeFor: #('C' 'H' 'I'));
		yourself


	
	</body>

<body package="ShoreComponents-Demo1" selector="webTree5">webTree5
 
	^ OrderedCollection with: ShoreWebTreeNode smalltalkHierarchy</body>
</methods>

<methods>
<class-id>Seaside.ShoreDemo1WebTree class</class-id> <category>initialization</category>

<body package="ShoreComponents-Demo1" selector="initialize">initialize

	self registerToMenu
</body>
</methods>

<methods>
<class-id>Seaside.ShoreDemo1WebTree class</class-id> <category>as yet unclassified</category>

<body package="ShoreComponents-Demo1" selector="menuName">menuName

	^ 'Tree' translated</body>

<body package="ShoreComponents-Demo1" selector="menuPriority">menuPriority

	^ 70</body>
</methods>

<methods>
<class-id>Seaside.ShoreDemo1WebTree class</class-id> <category>private</category>

<body package="ShoreComponents-Demo1" selector="nodeFor:">nodeFor: anObject 

	^ ShoreWebTreeNode for: anObject</body>

<body package="ShoreComponents-Demo1" selector="simpleTreeFor:">simpleTreeFor: anArray

	^(self nodeFor: anArray first)
		addChild: (self nodeFor: anArray second);
		addChild: (self nodeFor: anArray last);
		yourself
	</body>
</methods>

<methods>
<class-id>Seaside.ShoreXPPanelDecoration</class-id> <category>initialization</category>

<body package="ShoreComponents-Panels" selector="initialize">initialize

	super initialize.
	
	open := true.</body>
</methods>

<methods>
<class-id>Seaside.ShoreXPPanelDecoration</class-id> <category>accessing</category>

<body package="ShoreComponents-Panels" selector="open">open
	^open</body>

<body package="ShoreComponents-Panels" selector="open:">open: anObject
	open := anObject</body>
</methods>

<methods>
<class-id>Seaside.ShoreXPPanelDecoration</class-id> <category>rendering</category>

<body package="ShoreComponents-Panels" selector="renderContentOn:">renderContentOn: html 
	html table
		class: #layout;
		class: #shoreXPPanelSectionsTable;
		with: [
			| id | 
			id := html advanceKey.
			html tableRow 
				onClick: 'xpPanel(this);';
				with: [
					html tableData
							class: #shoreXPPanelTopLeft;
							with: [ html space ].
					html tableData 
							class: #shoreXPPanelTopRightOpen if: self open;
							 class: #shoreXPPanelTopRightClosed if: self open not;
							 with: self owner name].
			html tableRow
				id: id;
				with: [
					html tableData colSpan: 2;
							class: #shoreXPPanelSection if: self open;
							class: #hidden if: self open not;
							with: [ self renderOwnerOn: html ]]]</body>

<body package="ShoreComponents-Panels" selector="rendererClass">rendererClass 
	"Returns the receivers default renderer class"

	^ ShoreCanvas</body>
</methods>

<methods>
<class-id>Seaside.ShoreBrowserDecoration</class-id> <category>rendering</category>

<body package="ShoreComponents-Demo1" selector="renderContentOn:">renderContentOn: html
	self renderOwnerOn: html.
	html form: [
		html
			submitButton callback: [self component answer];
			text: 'Close'
	]</body>

<body package="ShoreComponents-Demo1" selector="rendererClass">rendererClass 
	"Returns the receivers default renderer class"

	^ ShoreCanvas</body>
</methods>

<methods>
<class-id>Seaside.ShoreDemo1DatePicker</class-id> <category>accessing</category>

<body package="ShoreComponents-Demo1" selector="date">date
	^date</body>

<body package="ShoreComponents-Demo1" selector="date2">date2
	^date2</body>

<body package="ShoreComponents-Demo1" selector="date2:">date2: anObject
	date2 := anObject</body>

<body package="ShoreComponents-Demo1" selector="date:">date: anObject
	date := anObject</body>

<body package="ShoreComponents-Demo1" selector="pageTitle">pageTitle
	"Returns the receivers page title"

	^ 'Date picker demo' translated</body>
</methods>

<methods>
<class-id>Seaside.ShoreDemo1DatePicker</class-id> <category>initialization</category>

<body package="ShoreComponents-Demo1" selector="initialize">initialize
	"Initializes the receiver"

	super initialize.

	date := Date today.
	date2 := Date today + 7 days.</body>
</methods>

<methods>
<class-id>Seaside.ShoreDemo1DatePicker</class-id> <category>rendering</category>

<body package="ShoreComponents-Demo1" selector="renderContentOn:">renderContentOn: html

	html heading: self pageTitle.

	html form with: [
		| picker1 picker2 |

		html paragraph: 'Simple date picker using Ajax updaters (Scriptaculous).' translated.

		picker1 := ShoreDatePicker in: html.
		picker1 on: #date of: self.

		html buttons: [ html submitButton ].

		html paragraph: 'The submitting one...' translated.

		picker2 := ShoreDatePickerSubmitting in: html.
		picker2 printFormat: #(1 2 3 $. 1 1).
		picker2 on: #date2 of: self.

		
		html paragraph: 'Date one is: ' translated, date displayString.
		html paragraph: 'Date two is: ' translated, date2 displayString.
	 ].

	html heading level: 2; with: 'Component description' translated.
	html paragraph: 'This is not a component but only a widget' translated.
</body>

<body package="ShoreComponents-Demo1" selector="updateRoot:">updateRoot: anHtmlRoot
	super updateRoot: anHtmlRoot.
	ShoreDatePicker updateRoot: anHtmlRoot.</body>
</methods>

<methods>
<class-id>Seaside.ShoreDemo1DatePicker class</class-id> <category>as yet unclassified</category>

<body package="ShoreComponents-Demo1" selector="menuName">menuName

	^ 'Date picker' translated</body>

<body package="ShoreComponents-Demo1" selector="menuPriority">menuPriority

	^ 15

	</body>
</methods>

<methods>
<class-id>Seaside.ShoreDemo1DatePicker class</class-id> <category>initialization</category>

<body package="ShoreComponents-Demo1" selector="initialize">initialize

	self registerToMenu
</body>
</methods>

<methods>
<class-id>Seaside.ShoreFormDialog</class-id> <category>rendering</category>

<body package="ShoreComponents-Dialogs" selector="renderBackButtonOn:">renderBackButtonOn: html
	"Render a back button on the given html object"

	html anchor callback: [ self answer ]; with: ( '&lt;&lt; Back' translated  ) </body>

<body package="ShoreComponents-Dialogs" selector="renderContentOn:">renderContentOn: html
	"Renders the receivers content on the given html object"

	html div class: #shoreFormDialog; class: #shoreForm; with: [
		html table with: [
			html tableRow with: [
				html tableData with:  [ 
					html div 
						class: #shoreFormButton; 
						class: #shoreBackButton; 
						with: [ self renderBackButtonOn: html ] ].
				html tableData with: [
					html heading: self title.] ] ].
		html form with: [self renderDialogOn: html] ].
</body>

<body package="ShoreComponents-Dialogs" selector="renderDialogOn:">renderDialogOn: html
	"Render the receiver as form dialog on the given html object"</body>

<body package="ShoreComponents-Dialogs" selector="rendererClass">rendererClass 
	"Returns the receivers default renderer class"

	^ ShoreCanvas</body>
</methods>

<methods>
<class-id>Seaside.ShoreFormDialog</class-id> <category>initialization</category>

<body package="ShoreComponents-Dialogs" selector="initialize">initialize

	super initialize.
</body>
</methods>

<methods>
<class-id>Seaside.ShoreFormDialog</class-id> <category>accessing</category>

<body package="ShoreComponents-Dialogs" selector="pageTitle">pageTitle
	"Returns the receivers page title"

	^ self title.</body>

<body package="ShoreComponents-Dialogs" selector="title">title
	"Returns the receivers title"

	^ 'Dialog' translated.</body>
</methods>

<methods>
<class-id>Seaside.ShoreFormDialogWithResult</class-id> <category>rendering</category>

<body package="ShoreComponents-Dialogs" selector="renderBackButtonOn:">renderBackButtonOn: html
</body>
</methods>

<methods>
<class-id>Seaside.ShoreInformDialog</class-id> <category>accessing</category>

<body package="ShoreComponents-Dialogs" selector="message">message
	"Returns the receivers message"

	^message</body>

<body package="ShoreComponents-Dialogs" selector="message:">message: anObject
	"Sets the receivers message"

	message := anObject</body>

<body package="ShoreComponents-Dialogs" selector="title">title
	"Returns the receivers title"

	^ 'Information' translated .</body>
</methods>

<methods>
<class-id>Seaside.ShoreInformDialog</class-id> <category>rendering</category>

<body package="ShoreComponents-Dialogs" selector="renderDialogOn:">renderDialogOn: html
	"Render the receiver as a dialog on the given html object"

	html paragraph: [
		html text: self message. ].

	html buttons: [
		html submitButton 
			callback: [ self answer ];
			text: 'OK' translated. ]</body>
</methods>

<methods>
<class-id>Seaside.ShoreErrorDialog</class-id> <category>accessing</category>

<body package="ShoreComponents-Dialogs" selector="title">title
	"Returns the receivers title"

	^ 'Error' translated .</body>
</methods>

<methods>
<class-id>Seaside.ShoreGetStringDialog</class-id> <category>accessing</category>

<body package="ShoreComponents-Dialogs" selector="initialize">initialize

	super initialize.

	string := String new.</body>

<body package="ShoreComponents-Dialogs" selector="message">message
	"Returns the receivers message"

	^message</body>

<body package="ShoreComponents-Dialogs" selector="message:">message: anObject
	"Sets the receivers message"

	message := anObject</body>

<body package="ShoreComponents-Dialogs" selector="string">string
	^string</body>

<body package="ShoreComponents-Dialogs" selector="string:">string: anObject
	string := anObject</body>

<body package="ShoreComponents-Dialogs" selector="title">title
	"Returns the receivers title"

	^ 'Input' translated .</body>
</methods>

<methods>
<class-id>Seaside.ShoreGetStringDialog</class-id> <category>rendering</category>

<body package="ShoreComponents-Dialogs" selector="renderDialogOn:">renderDialogOn: html
	"Render the receiver as a dialog on the given html object"

	html paragraph: [
		html text: self message. 
		html break.
		html textInput
			class: #shoreFormDialogTextInput;
			class: #shoreFormInput;
			on: #string of: self.].

	html buttons: [
		html submitButton callback: [ self answer: string ]; text: 'OK' translated. ] </body>
</methods>

<methods>
<class-id>Seaside.ShoreDemo1TableDemo3</class-id> <category>initialization</category>

<body package="ShoreComponents-Demo1" selector="initialize">initialize

	| rows columns |
   
	super initialize.
 
	rows := Smalltalk allClasses select: [:class | class name beginsWith: 'Shore' ].
	columns := OrderedCollection new
		add: ((ShoreTableColumn selector: #superclass title: 'superclass' translated)
			sortBlock: [:a :b | 
				a name compare: b name ];
			yourself);	
		add: ((ShoreTableColumn selector: #yourself title: 'class' translated)
			clickBlock: [:row | self browse: row];
			sortBlock: [:a :b | 
				a name compare: b name ];
			yourself);
		add: ((ShoreTableColumn selector: #hasMethods title: 'has methods' translated)
			sortBlock: [:a :b | 
				a displayString compare: b displayString ];
			yourself);		
	yourself.
	

	table := ShoreLiveTable new.
	table rows: rows; columns: columns.
	table previewBlock: [:html :row | 
		html html: (row definition asXHtml) ].

	table actionsBlock: [:html |
		table renderSelectAllAnchorOn: html.
		html separator.
		table renderSelectNoneAnchorOn: html.
		html separator.
		html anchor callback: [ table selection do: [:each | self browse: each]];
			with: 'browse selected' translated. ].
	

</body>
</methods>

<methods>
<class-id>Seaside.ShoreDemo1TableDemo3</class-id> <category>style</category>

<body package="ShoreComponents-Demo1" selector="style">style
	^ '

.ShoreDemo1TableDemo2 table { 
	border-left: 1px solid #e7dfce;
	border-top: 1px solid #e7dfce;
}


.ShoreDemo1TableDemo2 th { 
	margin: 0px;
	padding: 2px;
	background-color: #efebde; 
	color: black;
	border-right: 1px solid #a5aa94;
	border-bottom: 3px solid #cec7bd;
 }

.ShoreDemo1TableDemo2 th img { 
	padding-left: 5px;
 }

.shoreLiveTableSelector { 
	margin: 0px;
}

.ShoreDemo1TableDemo2 th:hover { 
	margin: 0px;
	padding: 2px;
	background-color: #f8f5ed; 
	color: black;
	border-right: 1px solid #a5aa94;
	border-bottom: 3px solid #f6cd4f;
 }

.shoreTableColumnSortIndex {
	color: #a5aa94;
	padding-left: 3px;
}

.sortable { 
	cursor: pointer;
 }


.ShoreDemo1TableDemo2 td {
	border-right: 1px solid #e7dfce;
	border-bottom: 1px solid #e7dfce;
	text-align: left;
}
.ShoreDemo1TableDemo2 td.big {color: red; font-weight: bold;}
.ShoreDemo1TableDemo2 tr+tr&gt;th {text-align: right}
.ShoreDemo1TableDemo2 tr.odd { background-color: #fbf8f0}
.ShoreDemo1TableDemo2 tr.even { background-color: white}

.shoreLiveTableOffset {
	background-color: white;
}

.shoreLiveTableGroup {
	font-weight: bold;
}

.shoreLiveTableGroupHeader {
	width: 15px;
}

'</body>
</methods>

<methods>
<class-id>Seaside.ShoreDemo1TableDemo3</class-id> <category>rendering</category>

<body package="ShoreComponents-Demo1" selector="renderContentOn:">renderContentOn: html

	html heading: self pageTitle.
	
	html div class: #ShoreDemo1TableDemo2; with: [
		html render: table ].
	</body>
</methods>

<methods>
<class-id>Seaside.ShoreDemo1TableDemo3</class-id> <category>accessing</category>

<body package="ShoreComponents-Demo1" selector="children">children

	^ Array with: table</body>

<body package="ShoreComponents-Demo1" selector="pageTitle">pageTitle

	^ 'Live table demo'.</body>
</methods>

<methods>
<class-id>Seaside.ShoreDemo1TableDemo3</class-id> <category>actions</category>

<body package="ShoreComponents-Demo1" selector="browse:">browse: aClass
	| browser |
	browser := WABrowser fullOnClass: aClass.
	browser addDecoration: (WAWindowDecoration new title: aClass name; yourself).
	self call: browser.</body>
</methods>

<methods>
<class-id>Seaside.ShoreDemo1TableDemo3 class</class-id> <category>as yet unclassified</category>

<body package="ShoreComponents-Demo1" selector="menuName">menuName

	^ 'Live table' translated</body>

<body package="ShoreComponents-Demo1" selector="menuPriority">menuPriority

	^ 55</body>
</methods>

<methods>
<class-id>Seaside.ShoreDemo1TableDemo3 class</class-id> <category>initialization</category>

<body package="ShoreComponents-Demo1" selector="initialize">initialize

	self registerToMenu
</body>
</methods>

<methods>
<class-id>Seaside.ShoreDemo4</class-id> <category>initialization</category>

<body package="ShoreComponents-Demo4" selector="initialize">initialize

	super initialize.

	header := ShorePageHeader new.
	header title: 'ShoreComponents Demonstration'.
	header subtitle: self class description.
	
	leftPanel := ShorePanel new.
	leftPanel addSection: (ShoreDemo1DemosMenu new).
	leftPanel addSection: (ShoreDemo1SimpleComponent new) .

	rightPanel := ShorePanel new.
	rightPanel addSection: (ShoreDemo1DemosMenu new) enabled: false .
	rightPanel addSection: (ShoreDemo1SimpleComponent new) .

	target := ShoreDemo1Introduction new.



	</body>
</methods>

<methods>
<class-id>Seaside.ShoreDemo4 class</class-id> <category>accessing</category>

<body package="ShoreComponents-Demo4" selector="description">description

	^'ShoreComponents demo 4'</body>
</methods>

<methods>
<class-id>Seaside.ShoreDemo4 class</class-id> <category>as yet unclassified</category>

<body package="ShoreComponents-Demo4" selector="appName">appName

	^ self folderName , '/demo4'</body>
</methods>

<methods>
<class-id>Seaside.ShoreDemo4 class</class-id> <category>initialization</category>

<body package="ShoreComponents-Demo4" selector="initialize">initialize

	" self initialize "

	self initializeApplication.</body>
</methods>

<methods>
<class-id>Seaside.ShoreDynamicPanel</class-id> <category>rendering</category>

<body package="ShoreComponents-Panels" selector="renderContentOn:">renderContentOn: html
	"renders the receivers content on the given html object"

	html unorderedList
		id: id;
		script: (html sortable
			constraint: false;
			dropOnEmpty: true;
			containment: (self providers collect: [:panel | panel id ]);
			onUpdate: (html updater
			"	id: id;"
				triggerSortable: id
					callback: [ :values | self sections: values]";
		       callback: [ :renderer | self renderSectionsOn: renderer ]"));
		class: #shorePanel;
		class: #shoreDynamicPanel;
		with: [ sections do: [ :section |
		"	section decoration class halt."
			html listItem 
				passenger: section;
				onClick: (html effect
					id: (section decoration id);
					perform: #pulsate);
				"onClick: (html updater
					callback: [:h |  ]);"
				with: [ html roundedDivColor: '#555577' top: true bottom: false with: [html div class: #shorePanelSectionHeader;class: #shoreDynamicPanelSectionHeader; with: section name ].
					html render: section]] ] . 
</body>

<body package="ShoreComponents-Panels" selector="rendererClass">rendererClass 
	"Returns the receivers default renderer class"

	^ ShoreCanvas</body>

<body package="ShoreComponents-Panels" selector="renderSectionsOn:">renderSectionsOn: html

	 sections do: [ :section |
			 html listItem 
				passenger: section;
				with: [ html render: section name.
					html render: section]] </body>
</methods>

<methods>
<class-id>Seaside.ShoreDynamicPanel</class-id> <category>initialization</category>

<body package="ShoreComponents-Panels" selector="initialize">initialize
	"Initializes the receiver"

	super initialize.

	id := ShoreId new.
	providers := Set with: self.
	"self session registerObjectForBacktracking: self. "
	
	sections := OrderedCollection new.
</body>
</methods>

<methods>
<class-id>Seaside.ShoreDynamicPanel</class-id> <category>accessing</category>

<body package="ShoreComponents-Panels" selector="children">children

	^ sections</body>

<body package="ShoreComponents-Panels" selector="id">id
	"Answer the value of id"

	^ id</body>

<body package="ShoreComponents-Panels" selector="providers">providers

	^ providers</body>

<body package="ShoreComponents-Panels" selector="providers:">providers: anObject
	"Set the value of providers"

	providers := anObject</body>

<body package="ShoreComponents-Panels" selector="sections">sections
	"Answer the value of sections"

	^ sections</body>

<body package="ShoreComponents-Panels" selector="sections:">sections: anObject
	"Set the value of sections"

	sections := anObject</body>
</methods>

<methods>
<class-id>Seaside.ShoreDynamicPanel</class-id> <category>sections</category>

<body package="ShoreComponents-Panels" selector="addSection:">addSection: aComponent

	aComponent addDecoration: ShoreDynamicPanelDecoration new.
	sections add: aComponent.
</body>
</methods>

<methods>
<class-id>Seaside.ShoreWebTreeLibrary</class-id> <category>stylesheets</category>

<body package="ShoreComponents-Libraries" selector="webTreeCss">webTreeCss
	^ '
.verticalBar {
	background-image: url(verticalImage.gif);
}
.noBorder {
	border: none;
	margin: -1px;
}
'</body>
</methods>

<methods>
<class-id>Seaside.ShoreWebTreeLibrary</class-id> <category>images</category>

<body package="ShoreComponents-Libraries" selector="branchImageBottomGif">branchImageBottomGif
	| xxxCache |
	xxxCache := #(nil) beMutable.
	(xxxCache at: 1) isNil ifTrue: [
		xxxCache at: 1 put: #(71 73 70 56 57 97 19 0 16 0 231 0 0 0 0 0 128 128 128 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 33 249 4 9 0 0 0 0 44 0 0 0 0 19 0 16 0 0 8 43 0 1 8 28 40 48 0 193 131 8 19 42 76 104 112 161 195 135 8 27 66 156 232 80 34 197 139 7 13 106 4 176 209 34 198 143 32 67 138 28 9 50 32 0 59) asByteArray ].
	^ xxxCache at: 1</body>

<body package="ShoreComponents-Libraries" selector="branchImageCenterGif">branchImageCenterGif
	| xxxCache |
	xxxCache := #(nil) beMutable.
	(xxxCache at: 1) isNil ifTrue: [
		xxxCache at: 1 put: #(71 73 70 56 57 97 19 0 16 0 231 0 0 0 0 0 128 128 128 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 33 249 4 9 0 0 0 0 44 0 0 0 0 19 0 16 0 0 8 47 0 1 8 28 40 48 0 193 131 8 19 42 76 104 112 161 195 135 8 27 66 156 232 80 34 197 139 7 13 106 4 176 209 34 70 134 31 67 22 20 25 210 35 73 130 1 1 0 59) asByteArray ].
	^ xxxCache at: 1</body>

<body package="ShoreComponents-Libraries" selector="minusImageBottomGif">minusImageBottomGif
	| xxxCache |
	xxxCache := #(nil) beMutable.
	(xxxCache at: 1) isNil ifTrue: [
		xxxCache at: 1 put: #(71 73 70 56 57 97 19 0 16 0 231 0 0 0 0 0 0 0 1 128 128 128 255 255 255 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 33 249 4 9 0 0 0 0 44 0 0 0 0 19 0 16 0 0 8 75 0 1 8 28 40 80 0 193 131 8 19 42 76 104 112 161 195 135 5 5 72 156 40 209 161 128 1 0 48 106 108 168 208 160 198 140 0 56 50 252 184 209 34 128 0 40 81 134 92 105 80 228 69 144 37 23 122 132 185 82 38 201 140 34 17 82 220 9 177 167 207 159 11 3 2 0 59) asByteArray ].
	^ xxxCache at: 1</body>

<body package="ShoreComponents-Libraries" selector="minusImageCenterGif">minusImageCenterGif
	| xxxCache |
	xxxCache := #(nil) beMutable.
	(xxxCache at: 1) isNil ifTrue: [
		xxxCache at: 1 put: #(71 73 70 56 57 97 19 0 16 0 231 0 0 0 0 0 128 128 128 0 0 1 255 255 255 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 33 249 4 9 0 0 0 0 44 0 0 0 0 19 0 16 0 0 8 75 0 1 8 28 40 48 0 193 131 8 19 42 76 104 112 161 195 135 5 3 72 156 40 209 97 128 1 0 48 106 108 168 208 160 198 140 0 56 50 252 184 209 34 0 1 40 81 134 92 105 80 228 69 144 37 23 122 132 185 82 38 201 140 34 17 82 220 9 177 103 71 159 64 3 2 0 59) asByteArray ].
	^ xxxCache at: 1</body>

<body package="ShoreComponents-Libraries" selector="plusImageBottomGif">plusImageBottomGif
	| xxxCache |
	xxxCache := #(nil) beMutable.
	(xxxCache at: 1) isNil ifTrue: [
		xxxCache at: 1 put: #(71 73 70 56 57 97 19 0 16 0 231 0 0 0 0 0 128 128 128 0 0 1 255 255 255 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 33 249 4 9 0 0 0 0 44 0 0 0 0 19 0 16 0 0 8 80 0 1 8 28 40 48 0 193 131 8 19 42 76 104 112 161 195 135 5 3 72 156 40 209 97 128 1 0 48 106 108 168 208 32 70 1 25 1 112 100 168 81 192 70 139 0 4 168 84 41 178 165 193 145 23 51 154 204 56 18 161 199 148 33 107 30 140 169 145 166 69 138 20 33 10 29 74 116 97 64 0 59) asByteArray ].
	^ xxxCache at: 1</body>

<body package="ShoreComponents-Libraries" selector="plusImageCenterGif">plusImageCenterGif
	| xxxCache |
	xxxCache := #(nil) beMutable.
	(xxxCache at: 1) isNil ifTrue: [
		xxxCache at: 1 put: #(71 73 70 56 57 97 19 0 16 0 231 0 0 0 0 0 128 128 128 0 0 1 255 255 255 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 33 249 4 9 0 0 0 0 44 0 0 0 0 19 0 16 0 0 8 80 0 1 8 28 40 48 0 193 131 8 19 42 76 104 112 161 195 135 5 3 72 156 40 209 97 128 1 0 48 106 108 168 208 32 70 1 25 1 112 100 168 81 192 70 139 0 4 168 84 41 178 165 193 145 23 51 154 204 56 18 161 199 148 33 107 30 140 169 145 166 69 138 20 33 10 237 56 180 104 64 0 59) asByteArray ].
	^ xxxCache at: 1</body>

<body package="ShoreComponents-Libraries" selector="verticalImageGif">verticalImageGif
	| xxxCache |
	xxxCache := #(nil) beMutable.
	(xxxCache at: 1) isNil ifTrue: [
		xxxCache at: 1 put: #(71 73 70 56 57 97 16 0 16 0 231 0 0 0 0 0 128 128 128 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 33 249 4 9 0 0 0 0 44 0 0 0 0 16 0 16 0 0 8 39 0 1 8 28 40 48 0 193 131 8 19 42 4 96 112 161 195 135 13 31 74 68 24 113 162 69 134 23 51 86 204 8 145 163 197 141 30 3 2 0 59) asByteArray ].
	^ xxxCache at: 1</body>
</methods>

<methods>
<class-id>Seaside.ShoreWebTreeLibrary</class-id> <category>accessing</category>

<body package="ShoreComponents-Libraries" selector="selectorsToInclude">selectorsToInclude
	^ #( #webTreeCss )</body>
</methods>

<methods>
<class-id>Seaside.ShoreStandardStyles</class-id> <category>stylesheets</category>

<body package="ShoreComponents-Libraries" selector="bodyCss">bodyCss

^ '
body {
	margin: 0px; 
	font-family: sans-serif; 
	font-size: 9pt;
}

img{
	border-style: none ;
}


ul { 
	margin-left: 10px;
	padding-left: 10px;
}



'</body>

<body package="ShoreComponents-Libraries" selector="contextMenuCss">contextMenuCss

^ '
.shoreContextMenu {
	position: absolute;
	z-index: 80;
}

.shoreContextMenuItem {
	padding: 3px;	
	cursor: pointer;
}


'</body>

<body package="ShoreComponents-Libraries" selector="dialogsCss">dialogsCss

	^ '

.shoreFormDialog {
	margin-left: 10%;
	margin-right: 10%; 
	margin-top: 5px; 
	padding: 5px;
}

.shoreFormDialog h1 {
	margin: 0px;
}

.shoreFormDialog p {
	text-align: center;
	padding: 1px;
	margin: 1px;
	margin-left: 5%;
	margin-right: 5%;
}

.shoreFormDialogTextInput {
	padding: 1px;
	margin: 5px;
	margin-left: 5%;
	margin-right: 5%;
	width: 80%;
}



.shoreButtons {
	text-align: center;
	margin: 3px;
}

.shoreBackButton {
	margin-right: 10px; 
}

.shoreBackButton a {
	text-decoration: none;
}


'</body>

<body package="ShoreComponents-Libraries" selector="documentationCss">documentationCss

^ '
.shoreDocumentationTable {
	border: 1px solid #8e98b5;
	width: 100%;
}

.shoreDocumentationTableRow {
}

.shoreDocumentationTableLabel {
	background-color: #e0e0e7;
	width: 15em;
	vertical-align: top;
}

.shoreDocumentationTableContent {
	background-color: white;
}
'</body>

<body package="ShoreComponents-Libraries" selector="dynamicPanelCss">dynamicPanelCss

^ '
.shoreDynamicPanel {
	padding: 2px;
	margin: 0px;
}

.shorePanelSectionContainer {
	margin-bottom: 3px;
}

.shoreDynamicPanelSectionHeader {
	padding: 2px;
	padding-left: 5px;
	padding-right: 5px;
	cursor: move;
}

.shorePanelSectionHeader {
	padding: 2px;
	padding-left: 5px;
	padding-right: 5px;
	cursor: pointer;
}

.shorePanelSectionHeader img {
	margin-right: 5px;
	border-width: 0px;	
}

.shoreDynamicPanel li {
	padding: 2px;
	margin: 0px;
	list-style-type: none;
}

.shoreDynamicPanelSectionContent {
	margin-left: 3px;
	margin-right: 3px;
	padding: 2px;
}

.shoreDynamicPanelSectionContent li {
	margin-left: 0px;
	padding-left: 0px;
}


'</body>

<body package="ShoreComponents-Libraries" selector="editorsCss">editorsCss

^ '
.shoreRichEdit {
	border: 1px solid #8e98b5;
}

.shoreRichEditField {
	border: 1px solid #8e98b5;
	margin: 3px;
}

.shoreRichEditEditor {
	width: 100%;
}

.shoreRichEditButtons {

}
'</body>

<body package="ShoreComponents-Libraries" selector="hierarchyCss">hierarchyCss

^ '
.shorePageHeader {
	margin: 0px; 
	padding: 0px;
	padding-left: 40px;
	height: 45px;
	background-repeat: no-repeat;
	background-position: 4px;
}

.shorePageHeader img {
	float: left;
	border: 0px;
	padding-right: 50px;
}


'</body>

<body package="ShoreComponents-Libraries" selector="layoutCss">layoutCss 
^ '

ul, ol, dl {
     position: relative;  
}

.layout {
	border: none;
	border-collapse: collapse;
	padding: 0px;		
}

.shoreLayoutHolder {
	position: relative;
	height: 100%;
}

html&gt;body .shoreLayoutHolder {
			height: auto;
			min-height: 100%;
}

.shoreLayoutLeftColumn {
			float: left;
			width: 150px;

}

.shoreLayoutRightColumn {
			float: right;
			width: 150px;
}

.shoreLayoutMiddleColumn {
			height: expression("0px"); /* workaround pro 3px bug v IE */
			margin: 0 160px; /* do stran je treba margin */
			padding: 10px 0; /* do vysky je treba padding */
}

.shoreLayoutColumn {
	margin: 5px;
}

.shoreLayoutCleaner {
		height: 10px;
		clear: both;
}
		
.shoreLayoutFooter {
		margin: 2px;
		margin-left: 7px;
		margin-right: 7px;
		padding: 2px;
}
'

</body>

<body package="ShoreComponents-Libraries" selector="listsCss">listsCss

^ '
.shoreBatchedList {
}


.shoreBatchedListTable {
	width: 100%;
}

.shoreBatchedListNavigation {
	padding: 2px;
	text-align: right;
	margin: 0px;
	padding-top: 0px;
}

.shoreBatchedListPages {
	padding: 1px;
	padding-bottom: 0px;
	padding-left: 10px;
	margin: 0px;
}
	
.shoreLiveBatchdeListButton {
	padding: 1px;
	padding-left: 7px;
	padding-right: 7px;
	margin-left: 3px;
	cursor: pointer;
	padding-right: 10px;
}

.shoreLiveBatchdeListButtonDisabled {
	padding: 1px;
	padding-left: 7px;
	padding-right: 7px;
	margin-left: 3px;
}

.shoreBatchedListFilter {
	text-align: right;
	padding: 3px;
	margin: 0px;
}

.shoreBatchedListFilterInput {
	width: 120px;
}

.shoreBatchedListFilterButton {
	width: 60px;
}

.shoreBatchedListNavigation a {
}

.shoreBatchedListSorters {
	font-weight: normal;
	padding-left: 10px;
	float: right;
}

.shoreBatchedListItem{
	padding-left: 5px;
}

.shoreBatchedListItem:hover{
	padding-left: 5px;
}

.shoreBatchedListItemNote {
	padding-right: 5px;
	padding-right: 5px;
	text-align: right;
}

.shoreLisData{
	overflow: scroll;
	height: 140px;
	padding-left: 5px;
}
'</body>

<body package="ShoreComponents-Libraries" selector="modalDialogCss">modalDialogCss

^ '
.shoreModalDialogBox{
	position: absolute;
	top: 40px;
	left: 0px;
	width: 100%;
	height: 100px;
	z-index: 100;
	background-color: #ecf1fd;
	border: 2px solid #3d64bc;
	}

#shoreModalDialog{
	padding: 10px;
	}

		
.shoreModalDialogOverlay{
	position: absolute;
	top: 0;
	left: 0;
	z-index: 89;
	width: 100%;
	height: 500px;
	background-color: #DDD;
	filter:alpha(opacity=60);
	-moz-opacity: 0.6;
	opacity: 0.6;
	}

#shoreModalDialogBoxHeader{
	background-color: #3d64bc;
	color: white;
	padding: 5px;
	font-weight: bold;
	}

'
</body>

<body package="ShoreComponents-Libraries" selector="progressCss">progressCss

^ '
		
.shoreProgressOverlay{
	position: absolute;
	top: 0px;
	left: 0px;
	z-index: 90;
	width: 100%;
	background-color: #7e2424;
	filter:alpha(opacity=10);
	-moz-opacity: 0.1;
	opacity: 0.1;
	text-align: center;
	}

.shoreProgressSpinner{
	position: absolute;
	top: 0px;
	left: 0px;
	z-index: 100;
	width: 100%;
	text-align: center;
	}

.shoreProgressSpinner img {
	background-color: white;
	padding: 7px;
	border: 1px solid gray;
	}



'
</body>

<body package="ShoreComponents-Libraries" selector="roundCornersCss">roundCornersCss

^  '
.shoreR1 { 
	padding: 0px;
	border: 0px solid white; 
	border-top: 1px solid black; 
	margin: 0 4px;
}

.shoreR2 { 
	padding: 0px;
	border: 0px solid white; 
	border-top: 1px solid black; 
	margin: 0 2px;
	overflow: hidden; 
}

.shoreR3 { 
	padding: 0px;
	border: 0px solid white; 
	border-top: 1px solid black; 
	margin: 0 1px;
	overflow: hidden; 
}

.shoreRoundCorners { 
	margin: 0px;
	padding: 0px;
}

'.
</body>

<body package="ShoreComponents-Libraries" selector="tabControlCss">tabControlCss

^ '
.shoreTabControl .navigationOptions {
	border-bottom : 1px solid #ccc;
	margin : 0;
	padding-bottom : 19px;
	padding-left : 10px;
}

.shoreTabControl .navigationOptions ul, .shoreTabControl .navigationOptions li	{
	display : inline;
	list-style-type : none;
	margin : 0;
	padding : 0;
}

	
.shoreTabControl .navigationOptions a:link, .shoreTabControl .navigationOptions a:visited	{
	background : #E8EBF0;
	border : 1px solid #ccc;
	color : #666;
	float : left;
	font-size : small;
	font-weight : normal;
	line-height : 14px;
	margin-right : 8px;
	padding : 2px 10px 2px 10px;
	text-decoration : none;
}

.shoreTabControl .navigationOptions a:link.active, .shoreTabControl .navigationOptions a:visited.active	{
	background : #fff;
	border-bottom : 1px solid #fff;
	color : #000;
}

.shoreTabControl .navigationOptions ul a:hover	{
	color : #f00;
}

.shoreTabControl .navigationOptions .option-selected a {
	background : #fff;
	border-bottom : 1px solid #fff;
	color : #000;
}

.shoreTabControl .navigationContent {
	background : #fff;
	border : 1px solid #ccc;
	border-top : none;
	margin : 0px;
	padding : 15px;
	line-height: 1.1;  /* IE6 CSS workaround - http://www.dracos.co.uk/web/css/ie6floatbug/ */
}
'</body>

<body package="ShoreComponents-Libraries" selector="tablesCss">tablesCss

^ '
.shoreTable {
	padding: 0px;
	margin: 5px;
}

.shoreTablePreviewButton {
	cursor: pointer;
	text-align: center;
}


'</body>

<body package="ShoreComponents-Libraries" selector="timetablesCss">timetablesCss

^ '
.shoreDayTimetable {
	border: 2px solid black;
	position: relative;

}

.shoreDayTimetableItem {
	position: absolute;
	border-width: 0px;
	font-size: 8pt;
}
'</body>

<body package="ShoreComponents-Libraries" selector="usefulCss">usefulCss

^ '

.renderingTime {
	text-align: right;
	color: #dedede;
}

.bordered {
	padding: 2px;
	border: 1px solid #3d64bc;
}

.hidden{
	display: none;
}

'</body>

<body package="ShoreComponents-Libraries" selector="xpPanelCss">xpPanelCss

^ '
.shoreXPPanel {

	padding:10px;

	height: 100%;	
	background-color: rgb(116, 150, 226);

}

.shoreXPPanelSectionsTable {
	padding: 0px;
	margin-top: 8px;
	margin-bottom: 8px;
	width: 100%;
}

.shoreXPPanelTopLeft {
	background-color: rgb(247, 249, 254);
	background-image: url(topLeftImage.png);
	height: 25px;
	width: 2px;
	cursor: pointer;
	background-position: left top;
	background-repeat: no-repeat;
}

.shoreXPPanelTopRightOpen {
	background-color: rgb(247, 249, 254);
	background-image: url(topRightOpenImage.png);
	color: rgb(33, 93, 198);
	cursor: pointer;
	height: 20px;
	font-weight: bold;
	font-size: 11px;
	font-family: verdana,tahoma,arial,sans-serif;
	padding-left: 10px;
	padding-right: 35px;
	background-position: right top;
	background-repeat: no-repeat;
}
.shoreXPPanelTopRightClosed {
	background-color: rgb(247, 249, 254);
	background-image: url(topRightClosedImage.png);
	color: rgb(33, 93, 198);
	cursor: pointer;
	height: 20px;
	font-weight: bold;
	font-size: 11px;
	font-family: verdana,tahoma,arial,sans-serif;
	padding-left: 10px;
	padding-right: 35px;
	background-position: right top;
	background-repeat: no-repeat;
}
.shoreXPPanelSection {
	border-left: 1px solid rgb(247, 249, 254);
	border-right: 1px solid rgb(247, 249, 254);
	border-bottom: 1px solid rgb(247, 249, 254);
	background-color: rgb(214, 223, 247);
	font-family: verdana,tahoma,arial,sans-serif;
	color: black;
	cursor: default;
	font-size: 10px;
	padding: 5px;
}

'</body>
</methods>

<methods>
<class-id>Seaside.ShoreStandardStyles</class-id> <category>accessing</category>

<body package="ShoreComponents-Libraries" selector="globalFileSelectors">globalFileSelectors
	^#(#standardStylesCss)
</body>

<body package="ShoreComponents-Libraries" selector="individualFileSelectors">individualFileSelectors
	^#( #bodyCss #contextMenuCss #dialogsCss 
	#documentationCss #dynamicPanelCss #editorsCss 
	#hierarchyCss #layoutCss #listsCss #modalDialogCss 
	#progressCss #roundCornersCss #tabControlCss 
	#tablesCss #timetablesCss #usefulCss #xpPanelCss)
</body>

<body package="ShoreComponents-Libraries" selector="standardStylesCss">standardStylesCss
	^self globalFileFor: self individualFileSelectors</body>
</methods>

<methods>
<class-id>Seaside.ShoreStandardStyles</class-id> <category>images xp panel</category>

<body package="ShoreComponents-Libraries" selector="topLeftImagePng">topLeftImagePng
	| xxxCache |
	xxxCache := #(nil) beMutable.
	(xxxCache at: 1) isNil ifTrue: [
		xxxCache at: 1 put: #(137 80 78 71 13 10 26 10 0 0 0 13 73 72 68 82 0 0 0 2 0 0 0 2 8 6 0 0 0 114 182 13 36 0 0 0 21 73 68 65 84 120 94 99 40 154 244 240 127 17 16 3 25 15 254 131 0 0 103 231 12 168 159 196 122 4 0 0 0 0 73 69 78 68 174 66 96 130) asByteArray ].
	^ xxxCache at: 1</body>

<body package="ShoreComponents-Libraries" selector="topRightClosedImagePng">topRightClosedImagePng
	| xxxCache |
	xxxCache := #(nil) beMutable.
	(xxxCache at: 1) isNil ifTrue: [
		xxxCache at: 1 put: #(137 80 78 71 13 10 26 10 0 0 0 13 73 72 68 82 0 0 0 88 0 0 0 25 8 6 0 0 0 181 145 233 253 0 0 4 88 73 68 65 84 120 94 229 153 219 82 226 88 20 134 251 193 230 177 230 85 230 17 166 106 186 27 181 27 81 80 68 16 228 32 68 80 78 1 57 131 156 195 57 36 28 253 103 173 68 74 90 161 213 139 169 185 216 187 234 51 9 229 133 124 245 187 178 246 218 95 166 250 19 84 125 13 85 91 99 66 140 167 38 35 245 133 225 100 141 1 51 94 163 79 244 70 204 10 202 208 164 203 12 86 232 16 237 190 73 171 183 66 147 81 86 104 40 75 131 122 119 137 71 166 179 68 173 189 68 149 105 45 81 33 202 205 23 74 141 5 138 76 125 129 2 145 127 92 32 199 212 76 30 136 108 213 36 83 89 64 174 204 33 151 231 72 51 165 57 82 207 36 139 38 137 194 28 113 38 63 199 61 147 155 225 110 195 195 12 49 34 154 53 185 101 50 51 72 91 68 100 147 112 122 131 142 155 148 73 104 155 164 142 224 51 127 254 85 53 16 95 240 127 36 56 152 208 197 23 188 79 112 196 144 168 33 156 154 34 148 80 73 156 73 48 62 37 169 218 135 5 7 8 241 5 111 9 150 56 165 36 245 42 172 192 225 173 226 228 162 136 227 243 60 93 11 68 30 63 207 115 176 185 74 184 8 180 16 136 179 116 77 124 193 159 17 28 78 76 112 230 173 225 231 89 6 222 96 9 217 124 23 143 205 17 148 254 20 237 174 138 66 185 135 64 164 130 195 227 36 126 156 229 225 14 211 115 98 42 190 224 143 8 190 73 78 224 184 170 192 234 144 33 63 116 160 233 11 236 90 235 245 19 234 36 221 233 201 193 98 147 113 17 234 82 154 167 36 85 19 95 240 62 193 209 172 134 203 96 19 86 74 46 167 150 37 190 183 134 35 29 23 222 60 14 78 51 240 72 67 83 114 66 19 95 240 46 193 161 248 8 86 103 14 210 125 29 203 213 26 31 93 29 69 197 143 211 20 108 238 42 124 177 241 115 146 197 23 252 70 176 87 82 232 37 246 96 212 217 205 250 242 199 223 6 219 107 251 179 39 10 249 154 126 72 119 143 148 226 44 92 225 62 252 247 42 73 213 196 23 188 45 56 150 213 225 14 181 224 241 23 48 95 172 246 10 125 45 156 5 115 218 43 245 33 9 78 195 17 104 195 23 29 195 191 73 177 248 130 95 4 187 130 45 4 35 213 157 101 96 35 246 117 154 57 189 243 229 26 45 42 19 220 117 216 188 77 170 197 35 241 5 239 20 28 104 26 237 215 190 245 90 46 175 21 189 8 103 148 248 118 79 165 94 57 139 227 171 6 220 145 1 174 169 76 136 47 248 77 130 155 184 188 46 252 242 130 251 93 13 222 148 135 233 140 190 75 123 108 36 216 234 169 227 146 234 176 248 130 119 8 190 146 186 212 162 201 232 209 134 226 35 53 152 203 3 167 119 172 209 223 80 84 112 120 42 195 118 213 52 4 251 196 23 252 86 176 255 142 94 84 39 50 162 241 6 245 192 230 11 236 233 105 119 13 222 212 222 9 201 237 14 53 248 110 202 248 70 27 14 174 193 226 39 120 143 224 112 74 133 221 83 165 158 54 137 114 109 96 252 251 111 96 161 44 151 175 252 172 207 205 228 246 198 51 36 179 109 28 81 31 108 113 20 96 243 181 197 175 193 251 250 96 73 158 194 123 59 192 161 253 1 199 84 42 10 149 62 180 249 210 168 177 124 221 220 115 106 7 147 25 125 103 29 73 218 78 219 156 25 252 99 149 113 228 170 81 155 166 136 223 69 236 19 124 155 161 57 66 124 12 87 168 13 139 61 67 73 78 35 150 108 162 65 27 143 62 37 181 79 82 57 177 221 129 134 74 99 132 8 237 248 142 207 210 248 70 114 45 206 178 81 127 157 55 61 241 251 224 253 179 8 157 102 192 83 163 22 59 73 242 129 35 135 175 214 4 237 238 104 206 16 40 193 79 45 28 195 247 54 103 22 223 173 41 124 61 201 194 114 94 134 149 218 51 78 175 91 26 136 191 147 251 221 52 77 146 53 154 168 169 240 25 146 187 176 121 106 56 114 22 113 64 99 201 239 246 95 57 56 47 225 240 162 70 191 67 114 253 29 92 70 168 123 184 155 136 63 139 120 127 224 174 25 39 23 215 177 33 117 4 10 206 131 29 156 250 154 56 161 14 193 230 109 24 155 9 238 22 78 232 106 191 110 195 25 52 147 107 200 229 185 176 248 227 202 247 143 140 34 156 228 20 151 139 17 188 209 1 117 6 61 184 40 161 174 27 133 102 191 138 49 212 113 209 160 221 77 159 121 111 135 184 142 171 134 92 241 231 193 159 56 147 147 100 110 221 248 56 136 103 188 42 213 214 9 9 31 83 178 9 74 171 241 28 55 207 232 130 219 199 70 226 11 254 220 169 114 132 68 51 230 33 167 102 156 193 153 135 157 47 247 226 159 201 253 143 199 246 44 248 95 107 90 215 169 141 110 229 117 0 0 0 0 73 69 78 68 174 66 96 130) asByteArray ].
	^ xxxCache at: 1</body>

<body package="ShoreComponents-Libraries" selector="topRightOpenImagePng">topRightOpenImagePng
	| xxxCache |
	xxxCache := #(nil) beMutable.
	(xxxCache at: 1) isNil ifTrue: [
		xxxCache at: 1 put: #(137 80 78 71 13 10 26 10 0 0 0 13 73 72 68 82 0 0 0 88 0 0 0 25 8 6 0 0 0 181 145 233 253 0 0 4 80 73 68 65 84 120 94 229 153 233 82 226 104 20 134 251 194 230 170 230 82 230 30 166 106 186 27 181 27 80 80 68 16 100 143 168 44 134 8 200 38 123 216 147 176 251 206 57 137 148 204 8 173 254 152 154 31 95 170 30 9 148 63 228 169 215 147 243 157 243 69 159 62 67 155 174 161 25 107 76 136 177 110 49 210 94 25 78 214 24 48 227 53 250 68 111 196 172 160 14 45 186 204 96 133 14 209 238 91 180 122 43 52 25 117 133 134 186 52 169 119 151 120 98 58 75 212 218 75 84 153 214 18 21 162 220 124 165 212 88 224 145 169 47 80 36 10 79 11 228 153 154 197 3 161 84 45 114 149 5 228 202 28 114 121 142 123 166 52 71 246 133 204 163 69 186 56 71 138 41 204 113 199 228 103 184 221 240 48 195 13 145 84 44 174 153 220 12 210 22 9 217 34 126 191 97 138 88 214 34 186 77 102 138 200 11 191 255 81 49 17 95 240 127 36 56 146 102 201 101 241 5 239 18 156 48 37 26 136 103 117 68 211 26 137 179 136 164 116 146 106 124 88 112 152 16 95 240 150 96 137 83 74 82 47 227 42 220 129 42 142 207 31 225 56 43 208 107 145 40 224 231 89 30 78 111 9 231 225 22 194 41 150 110 136 47 248 51 130 227 233 9 78 3 53 252 60 205 33 16 41 65 41 116 241 212 28 65 237 235 104 119 53 20 203 61 132 19 21 28 58 50 248 113 90 128 47 78 239 211 186 248 130 63 34 56 150 153 192 125 89 129 221 45 67 126 232 192 152 46 176 235 90 175 159 81 39 233 30 127 30 54 167 140 243 104 151 210 172 147 84 67 124 193 251 4 39 21 3 23 145 38 236 148 92 78 45 75 124 239 26 142 166 56 15 20 112 112 146 131 95 26 90 146 211 134 248 130 119 9 142 166 70 176 123 242 144 238 234 88 174 214 111 100 126 249 237 207 157 146 59 170 134 31 39 89 56 125 85 4 111 198 47 73 22 95 240 27 193 1 73 165 135 216 131 89 103 119 201 221 176 125 61 83 200 215 244 67 186 125 162 20 43 240 198 251 8 221 105 36 213 16 95 240 182 224 27 101 10 95 180 5 127 168 136 249 98 181 83 238 191 239 55 130 57 237 149 250 144 4 223 195 29 110 35 152 28 35 180 73 177 248 130 95 5 123 35 45 68 18 213 189 114 119 125 198 233 157 47 215 104 81 153 224 174 195 25 104 82 45 30 137 47 120 167 224 112 211 108 191 246 93 187 106 240 138 30 132 51 74 124 187 167 81 175 172 192 113 217 128 47 49 192 21 149 9 241 5 191 73 112 19 23 87 197 189 15 184 125 229 65 159 209 119 105 143 205 4 219 253 117 92 80 29 22 95 240 14 193 151 82 151 90 52 25 61 58 80 124 164 6 115 121 224 244 142 13 250 27 30 85 28 158 200 112 94 54 77 193 65 241 5 191 21 28 186 165 7 213 177 140 100 170 65 61 176 149 208 95 213 96 174 189 19 146 219 29 26 8 198 202 248 70 7 14 174 193 226 39 120 143 224 120 86 131 203 95 165 158 54 131 114 109 96 254 251 111 224 180 110 224 247 211 185 149 220 222 120 134 140 210 198 17 245 193 54 119 17 206 96 91 252 26 188 175 15 150 100 29 129 235 1 14 93 15 112 80 169 40 86 250 48 230 75 179 198 242 235 230 158 83 59 152 204 232 59 79 145 161 227 180 211 147 195 95 118 25 71 222 26 181 105 170 248 93 196 62 193 215 57 154 35 164 198 240 70 219 176 185 114 148 228 123 220 100 154 104 208 193 163 79 73 237 147 84 78 108 119 96 160 210 24 33 65 39 62 199 233 61 190 145 92 155 167 108 214 95 79 172 39 126 31 188 127 22 49 165 25 176 110 214 98 15 73 62 112 231 241 213 158 166 211 29 205 25 194 37 132 168 133 99 248 222 233 81 240 221 158 197 215 99 5 182 179 50 236 212 158 113 122 125 210 64 252 147 220 175 166 105 146 108 208 68 77 67 208 148 220 133 211 95 195 145 231 17 7 52 150 252 238 250 39 7 103 37 28 158 215 232 119 72 110 168 131 139 4 117 15 183 19 241 103 17 239 15 220 13 115 115 113 117 51 164 142 64 197 89 164 131 147 96 19 199 212 33 56 3 13 243 48 193 221 194 49 189 186 174 218 240 68 172 228 154 114 121 46 44 254 184 242 253 149 81 130 147 156 229 114 49 66 32 57 160 206 160 7 47 37 212 27 83 105 246 171 154 67 29 47 13 218 125 244 89 224 122 136 171 148 102 202 21 127 30 252 137 157 156 36 115 235 198 235 32 158 241 106 84 91 39 36 124 76 201 38 40 173 230 251 148 181 163 139 108 175 141 196 23 252 185 173 114 130 68 51 214 146 211 48 119 112 214 178 243 245 94 252 157 220 255 184 182 103 193 127 3 126 27 215 152 198 64 136 127 0 0 0 0 73 69 78 68 174 66 96 130) asByteArray ].
	^ xxxCache at: 1</body>
</methods>

<methods>
<class-id>Seaside.ShoreDemo1Spinner</class-id> <category>rendering</category>

<body package="ShoreComponents-Demo1" selector="renderContentOn:">renderContentOn: html

	| id |	

	html heading: self pageTitle.

	id := ShoreId new.

	html paragraph: 'There''s no spinner showed for very fast ajax updates' translated.
	html paragraph: 'Delay on server side:' translated.
	
	html unorderedList with: [
		html listItem with: [
			html anchor onClick: (html updater
				id: id;
				callback: [:h | 
					(Delay forMilliseconds: 10) wait.
					h paragraph: 'updated' shuffled ]);
				with: '10 ms' ].

		html listItem with: [
			html anchor onClick: (html updater
				id: id;
				callback: [:h | 
					(Delay forMilliseconds: 100) wait.
					h paragraph: 'updated' shuffled ]);
				with: '100 ms' ].

		html listItem with: [
			html anchor onClick: (html updater
				id: id;
				callback: [:h | 
					(Delay forMilliseconds: 200) wait.
					h paragraph: 'updated' shuffled ]);
				with: '200 ms' ].

		html listItem with: [
			html anchor onClick: (html updater
				id: id;
				callback: [:h | 
					(Delay forMilliseconds: 400) wait.
					h paragraph: 'updated' shuffled ]);
				with: '400 ms' ].

		html listItem with: [
			html anchor onClick: (html updater
				id: id;
				callback: [:h | 
					(Delay forMilliseconds: 1000) wait.
					h paragraph: 'updated' shuffled ]);
				with: '1000 ms' ].

		html listItem with: [
			html anchor onClick: (html updater
				id: id;
				callback: [:h | 
					(Delay forMilliseconds: 5000) wait.
					h paragraph: 'updated' shuffled ]);
				with: '5000 ms' ]].

	html paragraph id: id.

	</body>
</methods>

<methods>
<class-id>Seaside.ShoreDemo1Spinner</class-id> <category>accessing</category>

<body package="ShoreComponents-Demo1" selector="pageTitle">pageTitle

	^ 'Spinner' translated</body>
</methods>

<methods>
<class-id>Seaside.ShoreDemo1Spinner class</class-id> <category>as yet unclassified</category>

<body package="ShoreComponents-Demo1" selector="menuName">menuName

	^ 'Spinner' translated</body>

<body package="ShoreComponents-Demo1" selector="menuPriority">menuPriority

	^ 35</body>
</methods>

<methods>
<class-id>Seaside.ShoreDemo1Spinner class</class-id> <category>initialization</category>

<body package="ShoreComponents-Demo1" selector="initialize">initialize

	self registerToMenu
</body>
</methods>

<methods>
<class-id>Seaside.ShorePanel</class-id> <category>initialization</category>

<body package="ShoreComponents-Panels" selector="initialize">initialize
	"Initializes the receiver"

	super initialize.

	id := ShoreId new.
	"self session registerObjectForBacktracking: self. "
	
	sections := OrderedCollection new.
</body>
</methods>

<methods>
<class-id>Seaside.ShorePanel</class-id> <category>sections</category>

<body package="ShoreComponents-Panels" selector="addSection:">addSection: aComponent

	aComponent addDecoration: ShorePanelDecoration new.
	sections add: aComponent.
</body>

<body package="ShoreComponents-Panels" selector="addSection:enabled:">addSection: aComponent enabled: aBoolean

	| decor |

	decor := ShorePanelDecoration new.
	decor enabled: aBoolean.

	aComponent addDecoration: decor.
	sections add: aComponent.
</body>
</methods>

<methods>
<class-id>Seaside.ShorePanel</class-id> <category>accessing</category>

<body package="ShoreComponents-Panels" selector="children">children

	^ sections</body>

<body package="ShoreComponents-Panels" selector="id">id
	"Answer the value of id"

	^ id</body>

<body package="ShoreComponents-Panels" selector="sections">sections
	"Answer the value of sections"

	^ sections</body>

<body package="ShoreComponents-Panels" selector="sections:">sections: anObject
	"Set the value of sections"

	sections := anObject</body>
</methods>

<methods>
<class-id>Seaside.ShorePanel</class-id> <category>rendering</category>

<body package="ShoreComponents-Panels" selector="renderContentOn:">renderContentOn: html
	"renders the receivers content on the given html object"

	html div
		id: id;
		class: #shoreDynamicPanel;
		with: [ 
			sections do: [ :section |
				html div with: [ html render: section]] ] . 
</body>

<body package="ShoreComponents-Panels" selector="rendererClass">rendererClass 
	"Returns the receivers default renderer class"

	^ ShoreCanvas</body>

<body package="ShoreComponents-Panels" selector="renderSectionsOn:">renderSectionsOn: html

	 sections do: [ :section |
			 html listItem 
				passenger: section;
				with: [ html render: section name.
					html render: section]] </body>
</methods>

<methods>
<class-id>Seaside.ShoreWebTreeNode</class-id> <category>operations</category>

<body package="ShoreComponents-Webtree" selector="collapse">collapse

	self isExpanded: false</body>

<body package="ShoreComponents-Webtree" selector="expand">expand

	self isExpanded: true</body>
</methods>

<methods>
<class-id>Seaside.ShoreWebTreeNode</class-id> <category>printing</category>

<body package="ShoreComponents-Webtree" selector="printOn:">printOn: aStream
	"prints the receiver on aStream"

	aStream nextPutAll: '##('.
	self wrappedObject printOn: aStream.
	aStream nextPut: $)</body>
</methods>

<methods>
<class-id>Seaside.ShoreWebTreeNode</class-id> <category>initialize-release</category>

<body package="ShoreComponents-Webtree" selector="initialize">initialize

	self collapse</body>
</methods>

<methods>
<class-id>Seaside.ShoreWebTreeNode</class-id> <category>private-accessing</category>

<body package="ShoreComponents-Webtree" selector="isExpanded:">isExpanded: aBoolean
	
	isExpanded := aBoolean</body>
</methods>

<methods>
<class-id>Seaside.ShoreWebTreeNode</class-id> <category>accessing</category>

<body package="ShoreComponents-Webtree" selector="addChild:">addChild: aChildNode
	self subnodes add: aChildNode</body>

<body package="ShoreComponents-Webtree" selector="subnodes">subnodes

	subnodes isNil ifTrue: [subnodes := OrderedCollection new].
	^subnodes</body>

<body package="ShoreComponents-Webtree" selector="wrappedObject">wrappedObject

	^wrappedObject</body>

<body package="ShoreComponents-Webtree" selector="wrappedObject:">wrappedObject: anObject

	wrappedObject := anObject</body>
</methods>

<methods>
<class-id>Seaside.ShoreWebTreeNode</class-id> <category>testing</category>

<body package="ShoreComponents-Webtree" selector="hasSubnodes">hasSubnodes
	"the first test is necessary to avoid the lazy initialization in the getter"

	^subnodes notNil and: [self subnodes isEmpty not]</body>

<body package="ShoreComponents-Webtree" selector="isCollapsed">isCollapsed
	"Returns true if the node is a leaf node or the node is collapsed"

	^self isExpanded not</body>

<body package="ShoreComponents-Webtree" selector="isExpanded">isExpanded
	"Returns true if the node is expanded. Note that leaf node always return false"

	^isExpanded and: [self hasSubnodes]</body>
</methods>

<methods>
<class-id>Seaside.ShoreWebTreeNode class</class-id> <category>examples</category>

<body package="ShoreComponents-Webtree" selector="smalltalkHierarchy">smalltalkHierarchy
	"Returns an instance of the receiver wrapping the smalltalk class 
	hierarchy using Object as root node"
	^ self
		for: Object
		childBlock: [:each | each subclasses]</body>
</methods>

<methods>
<class-id>Seaside.ShoreWebTreeNode class</class-id> <category>instance creation</category>

<body package="ShoreComponents-Webtree" selector="for:">for: anObject

	^self new
		wrappedObject: anObject;
		yourself</body>

<body package="ShoreComponents-Webtree" selector="for:childBlock:">for: rootObject childBlock: aOneArgumentBlock 
	"self for: Object childBlock: [:each | each subclasses]"
	| coll node |
	coll := aOneArgumentBlock value: rootObject.
	node := self for: rootObject.
	coll isEmpty
		ifTrue: [^ node].
	coll
		do: [:child | node
				addChild: (self for: child childBlock: aOneArgumentBlock)].
	^ node</body>

<body package="ShoreComponents-Webtree" selector="new">new

	^ super new initialize</body>
</methods>

<methods>
<class-id>Seaside.ShoreConfirmDialog</class-id> <category>rendering</category>

<body package="ShoreComponents-Dialogs" selector="renderDialogOn:">renderDialogOn: html
	"Renders the receiver as a dialog on the given html object"

	html paragraph: [
		html text: self message. ].

	html buttons: [
		html submitButton callback: [ self answer: true ]; text: 'Yes' translated.
		html space.
		html submitButton callback: [ self answer: false ]; text: 'No' translated. ]</body>
</methods>

<methods>
<class-id>Seaside.ShoreConfirmDialog</class-id> <category>accessing</category>

<body package="ShoreComponents-Dialogs" selector="title">title
	"Returns the receivers title"

	^ 'Confirmation' translated</body>
</methods>

<methods>
<class-id>Seaside.ShoreCanvas</class-id> <category>convenience</category>

<body package="ShoreComponents-Kernel" selector="advanceKey">advanceKey

	"return new element id"

	^ 'id', self context advanceKey</body>

<body package="ShoreComponents-Kernel" selector="assignContextMenuTo:">assignContextMenuTo: elementId

	| script |

	script := 'document.getElementById("{1}").oncontextmenu = ShoreContextMenu.current.shoreContextMenuStart;' format: elementId.

	self script: script.
</body>

<body package="ShoreComponents-Kernel" selector="backgroundImage:">backgroundImage: aUrl 
	"returns style for background image"
	aUrl
		ifNil: [^ String new].
	^ 'background-image: url(' , aUrl asString , ')'</body>

<body package="ShoreComponents-Kernel" selector="buttons:">buttons: aBlock
	"Creates shore buttons using the given block"

	self div class: #shoreButtons; with: aBlock </body>

<body package="ShoreComponents-Kernel" selector="fixDialogSize">fixDialogSize

	self script: 'ShoreModalDialog.current.fixSize()'.</body>

<body package="ShoreComponents-Kernel" selector="form">form

	| wrappingForm result |

	(self document isKindOf: SUDocument)
		ifTrue: [
			| tag |
			tag := ShoreFormTag new.
			tag id: ShoreId new.
			^ self brush: tag. ].

	(wrappingForm := ShoreCurrentForm value)
		ifNil: [ 
			| tag |
			tag := ShoreFormTag new.
			tag id: ShoreId new.
			ShoreCurrentForm use: tag during: [
				result := self brush: tag ] ]
		ifNotNil: [ 
			| tag | 
			tag := ShoreNestedFormTag new.
			tag parentForm: wrappingForm.
			result := self brush: tag. ].
		
	^ result</body>

<body package="ShoreComponents-Kernel" selector="formId">formId

	| wrappingForm |
	
	wrappingForm := ShoreCurrentForm value.
	
	^ wrappingForm
		ifNil: [ 'formId' ]
		ifNotNil: [  (wrappingForm attributes at: 'id') value ]
</body>

<body package="ShoreComponents-Kernel" selector="javascript:">javascript: script

	self script
		attributeAt: #type put: 'text/javascript';
		with: script.</body>

<body package="ShoreComponents-Kernel" selector="registerOnResizeHandlerFor:">registerOnResizeHandlerFor: elementId

	| script |

	script := 'shoreAddOnResizeElement(document.getElementById("', elementId displayString, '"))'.

	self script: script.
</body>

<body package="ShoreComponents-Kernel" selector="separator">separator
	"Outputs a separator"

	self space; text: '|'; space.</body>

<body package="ShoreComponents-Kernel" selector="tableRowWithLabel:column:">tableRowWithLabel: anObject column: aBlock

	self tableRow with: [
		self tableData class: #label; with: anObject.
		self tableData with: aBlock]</body>

<body package="ShoreComponents-Kernel" selector="updater">updater

	^ ShoreProgressUpdater on: self</body>
</methods>

<methods>
<class-id>Seaside.ShoreCanvas</class-id> <category>rectangles</category>

<body package="ShoreComponents-Kernel" selector="rectangle:align:class:">rectangle: rect align: align class: cssClass

	" align: #absolute, #relative, #fixed ..."

	self html: 
	('&lt;div class="{1} style="width: {2}; height: {3}; left: {4}; top: {5}; position: {6};"&gt;&lt;/div&gt;'
	format: (OrderedCollection new 
		add: cssClass displayString;
		add: rect width displayString, 'px';
		add: rect height displayString, 'px';
		add: rect left displayString, 'px';
		add: rect top displayString, 'px';
		add: align displayString;
		yourself))  .


	</body>

<body package="ShoreComponents-Kernel" selector="rectangle:align:color:borderWidth:borderColor:borderStyle:for:">rectangle: rect align: align color: bgColor borderWidth: borderWidth borderColor: borderColor borderStyle: borderStyle for: aBlock

	" align: #absolute, #relative, #fixed ..."

	self html: 
	('&lt;div style="
	width: {1};
	height: {2};
	left: {3}; 
	top: {4}; 
	background-color: {5}; 	
	border-color: {6};
	position: {7};
	border-width: {8};
	border-style: {9};
	font-size: 8pt;
"&gt;'
	format: (OrderedCollection new
		add: rect width displayString, 'px';
		add: rect height displayString, 'px';
		add: rect left displayString, 'px';
		add: rect top displayString, 'px';
		add: (bgColor ifNotNil: [bgColor asHTMLColor displayString] ifNil: ['none']);
		add: borderColor asHTMLColor displayString;
		add: align displayString;
		add: borderWidth displayString, 'px';
		add: borderStyle displayString;
		yourself))  .

	aBlock value.
	
	self html: '&lt;/div&gt;'.

	</body>

<body package="ShoreComponents-Kernel" selector="rectangle:align:color:borderWidth:borderColor:for:">rectangle: rect align: align color: bgColor borderWidth: borderWidth borderColor: borderColor for: aBlock

	^ self rectangle: rect align: align color: bgColor borderWidth: borderWidth borderColor: borderColor borderStyle: 'solid' for: aBlock</body>

<body package="ShoreComponents-Kernel" selector="rectangle:class:">rectangle: rect class: cssClass

	" align: #absolute, #relative, #fixed ..."

	self html: 
	('&lt;div class="{1}" style="width: {2}; height: {3}; left: {4}; top: {5};"&gt;&lt;/div&gt;'
	format: (OrderedCollection new
		add: cssClass displayString;
		add: rect width displayString, 'px';
		add: rect height displayString, 'px';
		add: rect left displayString, 'px';
		add: rect top displayString, 'px';
		yourself))  .


	</body>

<body package="ShoreComponents-Kernel" selector="rectangle:class:color:for:">rectangle: rect class: cssClass color: color for: aBlock

	" align: #absolute, #relative, #fixed ..."

	self html: 
	('&lt;div onClick="submit()" class="{1}" style="width: {2}; height: {3}; left: {4}; top: {5}; background-color: {6}"&gt;'
	format: (OrderedCollection new
		with: cssClass displayString;
		add: rect width displayString, 'px';
		add: rect height displayString, 'px';
		add: rect left displayString, 'px';
		add: rect top displayString, 'px';
		add: (color ifNotNil: [color asHTMLColor displayString] ifNil: ['none'])
		yourself)) .

	aBlock value.
	
	self html: '&lt;/div&gt;'.


	</body>

<body package="ShoreComponents-Kernel" selector="rectangle:class:color:onClick:onMouseOver:onMouseOut:for:">rectangle: rect class: cssClass color: color onClick: script1 onMouseOver: script2 onMouseOut: script3 for: aBlock

	" align: #absolute, #relative, #fixed ..."

	self html: 
	('&lt;div onClick="{1}" onMouseOver="{2}" onMouseOut="{3}" class="{4}" style="width: {5}; height: {6}; left: {7}; top: {8}; background-color: {9}"&gt;'
	format: (OrderedCollection new
		add: script1 displayString;
		add: script2 displayString;
		add: script3 displayString;
		add: cssClass displayString;
		add: rect width displayString, 'px';
		add: rect height displayString, 'px';
		add: rect left displayString, 'px';
		add: rect top displayString, 'px';
		add: (color isString
			ifTrue: [ color ]
			ifFalse: [color ifNotNil: [color asHTMLColor displayString] ifNil: ['none']]);
		yourself)) .

	aBlock value.
	
	self html: '&lt;/div&gt;'.


	</body>

<body package="ShoreComponents-Kernel" selector="rectangle:class:for:">rectangle: rect class: cssClass for: aBlock

	" align: #absolute, #relative, #fixed ..."

	self html: 
	('&lt;div class="{1}" style="width: {2}; height: {3}; left: {4}; top: {5};"&gt;'
	format: (OrderedCollection new
		add: cssClass displayString;
		add: rect width displayString, 'px';
		add: rect height displayString, 'px';
		add: rect left displayString, 'px';
		add: rect top displayString, 'px';
		yourself)) .

	aBlock value.
	
	self html: '&lt;/div&gt;'.


	</body>
</methods>

<methods>
<class-id>Seaside.ShoreCanvas</class-id> <category>overrides</category>

<body package="ShoreComponents-Kernel" selector="text:">text: aString
	"Replace with this ?
	self withLineBreaks: aString
	"
	self html: aString displayString asXHtml</body>
</methods>

<methods>
<class-id>Seaside.ShoreCanvas</class-id> <category>round corners</category>

<body package="ShoreComponents-Kernel" selector="roundedDivColor:top:bottom:with:">roundedDivColor: color top: top bottom: bottom with: aBlock
	
	top ifTrue: [
		self div class: #shoreR1; style: 'border-top-color: ', color displayString. 
		self div class: #shoreR2; style: 'border-color: ', color displayString. 
		self div class: #shoreR3; style: 'border-color: ', color displayString.  ].

	self div with: aBlock.

	bottom ifTrue: [
		self div class: #shoreR3; style: 'border-color: ', color displayString. 
		self div class: #shoreR2; style: 'border-color: ', color displayString. 
		self div class: #shoreR1; style: 'border-color: ', color displayString.  ]

</body>
</methods>

<methods>
<class-id>Seaside.ShoreCanvas</class-id> <category>documentation support</category>

<body package="ShoreComponents-Kernel" selector="documentationRow:label:">documentationRow: row label: label

	self tableRow with: [
		self  tableData 
			class: #shoreDocumentationTableLabel; 
			with: label displayString translated.
		
		self  tableData
			class: #shoreDocumentationTableContent;
			with: row displayString translated. ].</body>
</methods>

<methods>
<class-id>Seaside.ShoreCanvas</class-id> <category>tables</category>

<body package="ShoreComponents-Kernel" selector="rowLayout:">rowLayout: cells

	| cellWidth |
	
	cellWidth := (100 / cells size) displayString, '%'.
	self table attributeAt: 'width' put: '100%';
		with:
			[self tableRow attributeAt: #height put:  '100%';
				with:
					[cells do: [:cell | 
					self tableData attributeAt: 'width' put: cellWidth displayString, '%';
						with: cell ] ] ].</body>
</methods>

<methods>
<class-id>Seaside.ShoreBrowser</class-id> <category>rendering</category>

<body package="ShoreComponents-Demo1" selector="style">style

	^ '

	#contents {width: 50em; height: 20em; font-family: Tahoma, Helvetica, Sans; font-size: 110%}

	.column-choice select {width: 15em; font-size: 90%}

	'</body>
</methods>

<methods>
<class-id>Seaside.ShoreStandardScripts</class-id> <category>accessing</category>

<body package="ShoreComponents-Libraries" selector="globalFileSelectors">globalFileSelectors
	^ #(#standardScriptsJs )</body>

<body package="ShoreComponents-Libraries" selector="individualFileSelectors">individualFileSelectors
	^ #(#debugJs #contextMenuJs #modalDialogJs #onResizeJs 
	#progressJs #tablesJs #utilsJs #xpPanelJs )</body>

<body package="ShoreComponents-Libraries" selector="standardScriptsJs">standardScriptsJs
	^ self globalFileFor: self individualFileSelectors</body>
</methods>

<methods>
<class-id>Seaside.ShoreStandardScripts</class-id> <category>javascripts</category>

<body package="ShoreComponents-Libraries" selector="contextMenuJs">contextMenuJs

^ '

var ShoreContextMenu = Class.create();

ShoreContextMenu.prototype = {

	initialize: function() {	
		isMenu 	= false;
		overpopupmenu = false;
	},

	mouseSelect: function(e)
	{
		if( isMenu )
		{
			if( overpopupmenu == false )
			{
				isMenu = false ;
				overpopupmenu = false;
				document.getElementById(''shoreContextMenu'').className = "hidden" ;
				document.getElementById(''shoreContextMenuContent'').innerHTML = "" ;
				return false ;
			}
			return false ;
		}
		return true;
	},

	shoreContextMenuStart: function(event)
	{
		var scipt;

		if ( document.all) { script = event.srcElement.getAttribute(''rel'')}
		else { script = event.target.getAttribute(''rel'')}

		if (!script) { return true } 

		var arrayPageScroll = getPageScroll();

		document.getElementById(''shoreContextMenu'').style.left = arrayPageScroll[0]+event.clientX+"px";
		document.getElementById(''shoreContextMenu'').style.top = arrayPageScroll[1]+event.clientY+"px";

		document.getElementById(''shoreContextMenu'').className = "shoreControl shoreContextMenu";

		eval(script);

		isMenu = true;
		return false ;
	}
}

function shoreContextMenuStartIE()
{
	return ShoreContextMenu.current.shoreContextMenuStart(event);
}

ShoreContextMenu.current = new ShoreContextMenu();

document.onmousedown 	= ShoreContextMenu.current.mouseSelect;

if ( document.all) 
	{ document.oncontextmenu 	= shoreContextMenuStartIE; }
else 
	{ document.oncontextmenu 	= ShoreContextMenu.current.shoreContextMenuStart; };

'</body>

<body package="ShoreComponents-Libraries" selector="debugJs">debugJs

^ '
function debug(aString)
{
	var newDiv = document.createElement("div");
	newDiv.setAttribute("style","position: relative; top: -1.5em; "
		+ "font-size: 80%; font-family: Verdana; color: blue; "
		+ "width: 100%; background-color: lightyellow");
	var textNode = document.createTextNode(aString);
	newDiv.appendChild(textNode);
	document.body.appendChild(newDiv);
}
'</body>

<body package="ShoreComponents-Libraries" selector="modalDialogJs">modalDialogJs

^ '

var ShoreModalDialog = Class.create();

ShoreModalDialog.prototype = {


	initialize: function(cap, w, h) {	
		caption = cap;
		width = w;
		height = h;
	},

	open: function() {		
		var overlay = document.getElementById(''shoreModalDialogOverlay'');
		var dialog = document.getElementById(''shoreModalDialogBox'');	
		var header = document.getElementById(''shoreModalDialogBoxHeader'');
		var content = document.getElementById(''shoreModalDialog'');

		header.innerHTML = caption;
		content.innerHTML = "";

		this.fixSize();

		document.onmousedown 	= null;


		overlay.className = ''shoreModalDialogOverlay'';
		dialog.className = ''shoreModalDialogBox'';
	},

	close: function() {		
		var dialog = document.getElementById(''shoreModalDialogBox'');	
		var overlay = document.getElementById(''shoreModalDialogOverlay'');

		overlay.className = ''hidden'';
		dialog.className = ''hidden'';	

		document.onmousedown 	= ShoreContextMenu.current.mouseSelect;
	},

	fixSize: function() {		
		var overlay = document.getElementById(''shoreModalDialogOverlay'');
		var content = document.getElementById(''shoreModalDialog'');
		var dialog = document.getElementById(''shoreModalDialogBox'');	
		
		var oh = content.offsetHeight;
		var ow = content.offsetWidth;
		if (!oh) {oh = 0}
		if (!ow) {ow = 0}
		var h = Math.max(oh + 20, height);
		var w = Math.max(ow + 20, width);

		var arrayPageSize = getPageSize();
		overlay.style.height = arrayPageSize[1] +"px";

		var arrayPageSize = getPageSize();
		var arrayPageScroll = getPageScroll();
		var lightboxTop = arrayPageScroll[1] + (arrayPageSize[3] / 2) - (h/2);

		dialog.style.top = Math.max(lightboxTop, 0) +"px";
		dialog.style.width = w +"px";
		dialog.style.height = h +"px";
		dialog.style.left = Math.max(arrayPageSize[0]/2-(w/2),0) +"px";

		overlay.style.height = (Math.max(arrayPageSize[1], h+30)) + "px";
	}

}




'</body>

<body package="ShoreComponents-Libraries" selector="onResizeJs">onResizeJs

	^ '
var shoreOnResizeElements = [];

shoreAddOnResizeElement = function(element) {
	shoreOnResizeElements[shoreOnResizeElements.length] = element; 
};


function shoreResizeHandler(event) {
	for ( var x = 0 ; x &lt; shoreOnResizeElements.length ; x++ ) {
		resizedElement = shoreOnResizeElements[x];
		var script = shoreOnResizeElements[x].getAttribute(''onresize'');
		if (document.all) { 
			script(); }
		else {
			eval(script); }
		resizedElement = null;
	}
	for ( var x = 0 ; x &lt; shoreOnResizeElements.length ; x++ ) {
		resizedElement = shoreOnResizeElements[x];
		var script = shoreOnResizeElements[x].getAttribute(''onresize'');
		if (document.all) { 
			script(); }
		else {
			eval(script); }
		resizedElement = null;
	}
	
}

var lastWidth;
var lastHeight;
var resizedElement;

function shoreResizeHandlerIE() {
	
	if ((document.documentElement.clientWidth == lastWidth) &amp;&amp; (document.documentElement.clientHeight == lastHeight)) {
		return }

	lastWidth = document.documentElement.clientWidth;
	lastHeight = document.documentElement.clientHeight;
	shoreResizeHandler(event);
}

if ( document.all) { 
	window.onresize = shoreResizeHandlerIE
} else {
	window.onresize = shoreResizeHandler
}

'</body>

<body package="ShoreComponents-Libraries" selector="progressJs">progressJs

^ '


var ShoreProgressOverlay = Class.create();

ShoreProgressOverlay.prototype = {
	initialize: function() {
	},

	open: function() {	
		
		timer = setTimeout("ShoreProgressOverlay.prototype.openSpinner()", 150);
	},

	openSpinner: function() {		
		var overlay = document.getElementById(''shoreProgressOverlay'');
		var spinner = document.getElementById(''shoreProgressSpinner'');
	
		this.fixSize();

		overlay.className = ''shoreProgressOverlay'';
		spinner.className = ''shoreProgressSpinner'';
	},


	close: function() {		
		var overlay = document.getElementById(''shoreProgressOverlay'');
		var spinner = document.getElementById(''shoreProgressSpinner'');
		overlay.className = ''hidden'';
		spinner.className = ''hidden'';
		clearTimeout(timer);
	},

	fixSize: function() {		
		var overlay = document.getElementById(''shoreProgressOverlay'');
		var spinner = document.getElementById(''shoreProgressSpinner'');
	
		var arrayPageSize = getPageSize();
		var arrayPageScroll = getPageScroll();
		overlay.style.height = arrayPageSize[1] +"px";

		var top = arrayPageScroll[1] + (arrayPageSize[3] / 2) - 8;
		spinner.style.top = Math.max(top, 0) +"px";
	}

}


Object.extend(Object.extend(Ajax.Updater.prototype, Ajax.Request.prototype), {

  initialize: function(container, url, options) {
    this.container = {
      success: container.success ? $(container.success) : $(container),
      failure: container.failure ? $(container.failure) :
        (container.success ? null : $(container))
    }

    this.transport = Ajax.getTransport();
    this.setOptions(options);

    var onComplete = this.options.onComplete || Prototype.emptyFunction;
    this.options.onComplete = (function(transport, object) {
      this.updateContent();
      onComplete(transport, object);
	 if (ShoreProgressOverlay.current) {ShoreProgressOverlay.current.close() };
    }).bind(this);

    this.request(url);
  }
  })

'</body>

<body package="ShoreComponents-Libraries" selector="tablesJs">tablesJs

^ '

function shoreTableSwapPreview(previewId, switchId, styleClass, updateScript, plus, minus)
{
	var elm = document.getElementById(previewId);
	var switchElm = document.getElementById(switchId);

	if (elm.className=="hidden")  
	{ 
		elm.className=styleClass; 
		switchElm.innerHTML = ("&lt;img src=''"+minus+"''/&gt;"); 
		eval(updateScript) 
	} else { 
		elm.className="hidden"; 
		switchElm.innerHTML =  ("&lt;img src=''"+plus+"''/&gt;"); 
	} 
}

'</body>

<body package="ShoreComponents-Libraries" selector="utilsJs">utilsJs

^ '

getAbsolutePos = function(el) {
	var SL = 0, ST = 0;
	var isDiv = /^div$/i.test(el.tagName);
	if (isDiv &amp;&amp; el.scrollLeft)
		SL = el.scrollLeft;
	if (isDiv &amp;&amp; el.scrollTop)
		ST = el.scrollTop;
		var r = { x: el.offsetLeft - SL, y: el.offsetTop - ST };
	if (el.offsetParent) {
		var tmp = this.getAbsolutePos(el.offsetParent);
		r.x += tmp.x;
		r.y += tmp.y;
	}
	return r;
};


function getPageScroll(){

	var yScroll;

	if (self.pageYOffset) {
		yScroll = self.pageYOffset;
	} else if (document.documentElement &amp;&amp; document.documentElement.scrollTop){	 // Explorer 6 Strict
		yScroll = document.documentElement.scrollTop;
	} else if (document.body) {// all other Explorers
		yScroll = document.body.scrollTop;
	}

	arrayPageScroll = new Array('''',yScroll) 
	return arrayPageScroll;
}


function getPageSize(){
	
	var xScroll, yScroll;
	
	if (window.innerHeight &amp;&amp; window.scrollMaxY) {	
		xScroll = document.body.scrollWidth;
		yScroll = window.innerHeight + window.scrollMaxY;
	} else if (document.body.scrollHeight &gt; document.body.offsetHeight){ // all but Explorer Mac
		xScroll = document.body.scrollWidth;
		yScroll = document.body.scrollHeight;
	} else { // Explorer Mac...would also work in Explorer 6 Strict, Mozilla and Safari
		xScroll = document.body.offsetWidth;
		yScroll = document.body.offsetHeight;
	}
	
	var windowWidth, windowHeight;
	if (self.innerHeight) {	// all except Explorer
		windowWidth = self.innerWidth;
		windowHeight = self.innerHeight;
	} else if (document.documentElement &amp;&amp; document.documentElement.clientHeight) { // Explorer 6 Strict Mode
		windowWidth = document.documentElement.clientWidth;
		windowHeight = document.documentElement.clientHeight;
	} else if (document.body) { // other Explorers
		windowWidth = document.body.clientWidth;
		windowHeight = document.body.clientHeight;
	}	
	
	// for small pages with total height less then height of the viewport
	if(yScroll &lt; windowHeight){
		pageHeight = windowHeight;
	} else { 
		pageHeight = yScroll;
	}

	// for small pages with total width less then width of the viewport
	if(xScroll &lt; windowWidth){	
		pageWidth = windowWidth;
	} else {
		pageWidth = xScroll;
	}


	arrayPageSize = new Array(pageWidth,pageHeight,windowWidth,windowHeight) 
	return arrayPageSize;
}

'</body>

<body package="ShoreComponents-Libraries" selector="xpPanelJs">xpPanelJs
	^'
function xpPanel (aTable) {
	if (aTable.cells[1].className == ''shoreXPPanelTopRightClosed'') {
		aTable.parentNode.rows[1].cells[0].className = ''shoreXPPanelSection'';
		aTable.cells[1].className = ''shoreXPPanelTopRightOpen'';
	} else {
		aTable.parentNode.rows[1].cells[0].className = ''hidden'';
		aTable.cells[1].className = ''shoreXPPanelTopRightClosed'';
	}
}'
</body>
</methods>

<methods>
<class-id>Seaside.ShoreWebTree</class-id> <category>node rendering</category>

<body package="ShoreComponents-Webtree" selector="renderExpansionForInnerNode:on:">renderExpansionForInnerNode: aNode on: html 

	aNode isExpanded ifTrue: 
		[ html tableRow: 
			[ html tableData class: #verticalBar; with: ''.
			html tableData: [ self renderNodes: aNode subnodes on: html ]]]
</body>

<body package="ShoreComponents-Webtree" selector="renderExpansionForLastNode:on:">renderExpansionForLastNode: aNode on: html

	aNode isExpanded ifTrue:
		[ html tableRow:
			[ html 
				tableData: '';
				tableData: [ self renderNodes: aNode subnodes on: html ]]]</body>

<body package="ShoreComponents-Webtree" selector="renderImageCellFor:actionBlock:on:">renderImageCellFor: aFilenameString actionBlock: aBlock on: html 
	html tableData:
		[ html anchor
				callback: aBlock;
				with: [ self renderImageFor: aFilenameString on: html ]]</body>

<body package="ShoreComponents-Webtree" selector="renderImageCellFor:on:">renderImageCellFor: aFilenameString on: html 
	html tableData:
		[  self renderImageFor: aFilenameString on: html ]</body>

<body package="ShoreComponents-Webtree" selector="renderImageFor:on:">renderImageFor: aFilenameString on: html 
	html image
		class: #noBorder;
		url: (self resources addToPath: aFilenameString)</body>

<body package="ShoreComponents-Webtree" selector="renderImageForInnerNode:on:">renderImageForInnerNode: aNode on: html 

	aNode hasSubnodes
		ifFalse: [ ^ self renderImageCellFor: 'branchImageCenter.gif' on: html ].
		
	aNode isExpanded
		ifTrue:
			[ self renderImageCellFor: 'minusImageCenter.gif'
				actionBlock: [ self onCollapseNode: aNode ]
				on: html ]
		ifFalse:
			[ self renderImageCellFor: 'plusImageCenter.gif'
				actionBlock: [ self onExpandNode: aNode ]
				on: html ]</body>

<body package="ShoreComponents-Webtree" selector="renderImageForLastNode:on:">renderImageForLastNode: aNode on: html 

	aNode hasSubnodes
		ifFalse: [ ^ self renderImageCellFor: 'branchImageBottom.gif'on: html ].

	aNode isExpanded
		ifTrue:
			[ self renderImageCellFor: 'minusImageBottom.gif'
				actionBlock: [ self onCollapseNode: aNode ]
				on: html ]
		ifFalse:
			[ self renderImageCellFor: 'plusImageBottom.gif'
				actionBlock: [ self onExpandNode: aNode ]
				on: html ]</body>

<body package="ShoreComponents-Webtree" selector="renderInnerNode:on:">renderInnerNode: aNode on: html 

	html tableRow: [
		self renderImageForInnerNode: aNode on: html.
		html tableData: aNode wrappedObject ].

	self renderExpansionForInnerNode: aNode on: html</body>

<body package="ShoreComponents-Webtree" selector="renderLastNode:on:">renderLastNode: aNode on: html

	html tableRow: [
		self renderImageForLastNode: aNode on: html.
		html tableData: aNode wrappedObject ].

	self renderExpansionForLastNode: aNode on: html</body>
</methods>

<methods>
<class-id>Seaside.ShoreWebTree</class-id> <category>accessing</category>

<body package="ShoreComponents-Webtree" selector="eventHandler">eventHandler

	^eventHandler</body>

<body package="ShoreComponents-Webtree" selector="eventHandler:">eventHandler: anObject
	eventHandler := anObject
	</body>

<body package="ShoreComponents-Webtree" selector="resources">resources
	^ WAUrl new
		addToPath: WADispatcher default basePath;
		addToPath: '/files/ShoreWebTreeLibrary/';
		yourself</body>

<body package="ShoreComponents-Webtree" selector="rootNodes">rootNodes

	rootNodes isNil ifTrue: [rootNodes := OrderedCollection new].
	^rootNodes</body>

<body package="ShoreComponents-Webtree" selector="rootNodes:">rootNodes: aCollection

	rootNodes := aCollection</body>
</methods>

<methods>
<class-id>Seaside.ShoreWebTree</class-id> <category>rendering</category>

<body package="ShoreComponents-Webtree" selector="renderContentOn:">renderContentOn: html	
	
	| nodes |
	
	nodes := self rootNodes.
	self renderNodes: nodes on: html

 </body>

<body package="ShoreComponents-Webtree" selector="rendererClass">rendererClass 
	"Returns the receivers default renderer class"

	^ ShoreCanvas</body>

<body package="ShoreComponents-Webtree" selector="renderNodes:on:">renderNodes: nodes on: html 
	"Renders the given collection of nodes on the renderer.
	Leading nodes have a different appearance than the last node"
	nodes isEmpty
		ifTrue: [^ self].
	html table class: #layout;
		with: [nodes size &gt; 1
				ifTrue: [(1 to: nodes size - 1)
						do: [:index | self
								renderInnerNode: (nodes at: index)
								on: html]].
			self renderLastNode: nodes last on: html]</body>

<body package="ShoreComponents-Webtree" selector="updateRoot:">updateRoot: anHtmlRoot
	super updateRoot: anHtmlRoot.
	ShoreWebTreeLibrary default updateRoot: anHtmlRoot.

</body>
</methods>

<methods>
<class-id>Seaside.ShoreWebTree</class-id> <category>events</category>

<body package="ShoreComponents-Webtree" selector="onCollapseNode:">onCollapseNode: aNode 

	aNode collapse.
	eventHandler notNil
		ifTrue: [eventHandler onCollapseNode: aNode]</body>

<body package="ShoreComponents-Webtree" selector="onExpandNode:">onExpandNode: aNode 

	aNode expand.
	eventHandler notNil
		ifTrue: [eventHandler onExpandNode: aNode]
	 </body>
</methods>

<methods>
<class-id>Seaside.ShoreWebTree</class-id> <category>operations</category>

<body package="ShoreComponents-Webtree" selector="addRootNode:">addRootNode: aTreeNode

	self rootNodes add: aTreeNode</body>
</methods>

<methods>
<class-id>Seaside.ShoreSelectWebTree</class-id> <category>node rendering</category>

<body package="ShoreComponents-Webtree" selector="renderInnerNode:on:">renderInnerNode: aNode on: html 
	html tableRow: 
			[self renderImageForInnerNode: aNode on: html.
			html tableData: 
					[html anchor 
							callback: [self onSelectNode: aNode];
							with: aNode wrappedObject]].

	self renderExpansionForInnerNode: aNode on: html</body>

<body package="ShoreComponents-Webtree" selector="renderLastNode:on:">renderLastNode: aNode on: html 
	html tableRow: 
			[self renderImageForLastNode: aNode on: html.
			html tableData: 
					[html anchor
							callback: [self onSelectNode: aNode];
							with: aNode wrappedObject]].

	self renderExpansionForLastNode: aNode on: html</body>
</methods>

<methods>
<class-id>Seaside.ShoreSelectWebTree</class-id> <category>events</category>

<body package="ShoreComponents-Webtree" selector="onSelectNode:">onSelectNode: aNode
 
	eventHandler notNil
		ifTrue: [eventHandler onSelectNode: aNode]</body>
</methods>

<methods>
<class-id>Seaside.ShoreTabControl2</class-id> <category>rendering</category>

<body package="ShoreComponents-Hierarchy" selector="renderContentOn:">renderContentOn: html

	html div class: 'shoreTabControl2'; with: [
		html div class: 'navigationOptions'; with: [self renderOptionsOn: html].
		html div class: 'navigationContent'; with: [self renderSelectionOn: html].
	]</body>

<body package="ShoreComponents-Hierarchy" selector="updateRoot:">updateRoot: anHtmlRoot
	super updateRoot: anHtmlRoot.
	ShoreSlidingDoors default updateRoot: anHtmlRoot.</body>
</methods>

<methods>
<class-id>Seaside.ShoreDemo1ComponentWithForm</class-id> <category>initialization</category>

<body package="ShoreComponents-Demo1" selector="initialize">initialize

	super initialize.

	name := 'name' translated.
	surname := 'surname' translated.</body>
</methods>

<methods>
<class-id>Seaside.ShoreDemo1ComponentWithForm</class-id> <category>accessing</category>

<body package="ShoreComponents-Demo1" selector="name">name
	^name</body>

<body package="ShoreComponents-Demo1" selector="name:">name: anObject
	name := anObject</body>

<body package="ShoreComponents-Demo1" selector="surname">surname
	^surname</body>

<body package="ShoreComponents-Demo1" selector="surname:">surname: anObject
	surname := anObject</body>
</methods>

<methods>
<class-id>Seaside.ShoreDemo1ComponentWithForm</class-id> <category>style informations</category>

<body package="ShoreComponents-Demo1" selector="style">style

	^ '
.shoreDemo1ComponentWithForm { background: #c6d3f7 }
'</body>
</methods>

<methods>
<class-id>Seaside.ShoreDemo1ComponentWithForm</class-id> <category>rendering</category>

<body package="ShoreComponents-Demo1" selector="renderContentOn:">renderContentOn: html

	html div class: #shoreDemo1ComponentWithForm; with: [
		html form 
			onSubmit: 'debug("onSubmit")';
			with: [
			html table: [
				html tableRowWithLabel: 'Name:' translated 
					column:  [html textInput on: #name of: self].
				html tableRowWithLabel: 'Surname:' translated 
					column:  [html textInput on: #surname of: self] ].
			html buttons: [ html submitButton callback: [self shoreInform: 'Submit button callback one' translated] ] ].
	].

</body>

<body package="ShoreComponents-Demo1" selector="rendererClass">rendererClass 
	"Returns the receivers default renderer class"

	^ ShoreCanvas</body>
</methods>

<methods>
<class-id>Seaside.ShoreProgressUpdater</class-id> <category>printing</category>

<body package="ShoreComponents-Support" selector="displayString">displayString

	^ 'ShoreProgressOverlay.current =  new ShoreProgressOverlay(); ShoreProgressOverlay.current.open();'
		, super displayString.</body>
</methods>

<methods>
<class-id>Seaside.ShoreDemo3</class-id> <category>accessing</category>

<body package="ShoreComponents-Demo3" selector="contents">contents
	^contents</body>

<body package="ShoreComponents-Demo3" selector="contents:">contents: aString
	contents := aString</body>

<body package="ShoreComponents-Demo3" selector="initialize">initialize
	super initialize.
"	self model: Browser new."</body>

<body package="ShoreComponents-Demo3" selector="showClass">showClass
	model indicateClassMessages</body>

<body package="ShoreComponents-Demo3" selector="showHelp">showHelp
	model plusButtonHit</body>

<body package="ShoreComponents-Demo3" selector="showInstance">showInstance
	model indicateInstanceMessages</body>
</methods>

<methods>
<class-id>Seaside.ShoreDemo3</class-id> <category>updating</category>

<body package="ShoreComponents-Demo3" selector="update:">update: aSymbol
	contents := model contents</body>
</methods>

<methods>
<class-id>Seaside.ShoreDemo3</class-id> <category>rendering</category>

<body package="ShoreComponents-Demo3" selector="renderContentOn:">renderContentOn: html

	| script1 script2 script3 id1 id2 id3 id4 id5 |

	id1 := ShoreId new.
	id2 := ShoreId new.
	id3 := ShoreId new.
	id4 := ShoreId new.
	id5 := ShoreId new.

	script1 := '
		if (resizedElement) {
			if (document.all) {
				resizedElement.style.height = document.documentElement.clientWidth+ "px";
				resizedElement.style.height = document.documentElement.clientHeight-2+ "px";
			} else {
				resizedElement.style.width = window.innerWidth-2+ "px";
				resizedElement.style.height = window.innerHeight-2+ "px";
			}
		}'.

	script2 := '
		if (resizedElement) {
			resizedElement.style.width = resizedElement.parentNode.clientWidth-2 + "px";
			resizedElement.style.height = resizedElement.parentNode.clientHeight-2 + "px";
		}'.

	script3 := '
		if (resizedElement) {
			resizedElement.style.width = resizedElement.parentNode.clientWidth + "px";
			resizedElement.style.height = resizedElement.parentNode.clientHeight + "px";
		}
'.

	html div id: id; class: #shoreBrowser; onResize: script1; with: [

		html div class: #shoreBrowserPanel1; with: [
			html div id: id1; class: #shoreBrowserPanelContent; 
			onResize: script2;
			with: [ html render: systemCategories]].
		html div class: #shoreBrowserPanel2; with: [
			html div id: id2; class: #shoreBrowserPanelContent; 
			onResize: script2;
			with: [
				html heading: '2' ]].
		html div class: #shoreBrowserPanel3; with: [
			html div id: id3; class: #shoreBrowserPanelContent; 
			onResize: script2;
			with: [
				html heading: '3' ]].
		html div class: #shoreBrowserPanel4; with: [
			html div id: id4; class: #shoreBrowserPanelContent; 
			onResize: script2;
			with: [
				html heading: '4' ]].
		html div class: #shoreBrowserPanel5; with: [
			html textArea id: id5; class: #shoreBrowserCode;
			onResize: script3].
	].

	html assignContextMenuTo: id5.

	html registerOnResizeHandlerFor: id.
	html registerOnResizeHandlerFor: id1.
	html registerOnResizeHandlerFor: id2.
	html registerOnResizeHandlerFor: id3.
	html registerOnResizeHandlerFor: id4.
	html registerOnResizeHandlerFor: id5.
</body>

<body package="ShoreComponents-Demo3" selector="renderContentPaneOn:">renderContentPaneOn: html
	html form: [
		html textArea on: #contents of: self.
		html break.
		html submitButton on: #accept of: self.
	]</body>

<body package="ShoreComponents-Demo3" selector="style">style

	^ '
.shoreBrowser {
	overflow: hidden;
	background-color: white;
	margin: 0px;
	padding: 0px;
	border: 1px solid gray;
}

.shoreBrowserPanel  {
	background-color: red;
	position: absolute;
	top: 50%;
	width: 50%;
	height: 10%;
	padding: 0px;
	border: 0px solid gray;
}

.shoreBrowserPanel1 {
	overflow: hidden;
	background-color: #444444;
	position: absolute;
	top: 0%;
	left: 0%;
	width: 25%;
	height: 50%;
	padding: 0px;
	margin: 0px;
}

.shoreBrowserPanel2 {
	overflow: hidden;
	background-color: #666666;
	position: absolute;
	top: 0%;
	left: 25%;
	width: 25%;
	height: 50%;
	padding: 0px;
	margin: 0px;
}

.shoreBrowserPanel3 {
	overflow: hidden;
	background-color: #888888;
	position: absolute;
	top: 0px;
	left: 50%;
	width: 25%;
	height: 50%;
	padding: 0px;
	margin: 0px;
}

.shoreBrowserPanel4 {
	overflow: hidden;
	background-color: #aaaaaa;
	position: absolute;
	top: 0px;
	left: 75%;
	width: 25%;
	height: 50%;
	padding:0px;
	margin: 0px;
}

.shoreBrowserPanel5 {
	overflow: hidden;
	background-color: #cccccc;
	position: absolute;
	top: 50%;
	left: 0%;
	width: 100%;
	height: 50%;
	padding: 0px;
	margin: 0px;
}

.shoreBrowserPanelContent {
	left: 6px;
	top: 6px;
	overflow: none;
	margin: 0px;
	border: 1px solid black;
}

.shoreBrowserCode {
	overflow: scroll;
	border-width: 0px;
	padding: 0px;
	margin: 0px;
}

'</body>
</methods>

<methods>
<class-id>Seaside.ShoreDemo3</class-id> <category>hierarchy</category>

<body package="ShoreComponents-Demo3" selector="children">children

	^ Array with: systemCategories</body>
</methods>

<methods>
<class-id>Seaside.ShoreDemo3</class-id> <category>menu messages</category>

<body package="ShoreComponents-Demo3" selector="accept">accept
	|save|
	SeasidePlatformSupport ensureAuthorInitials: [self request: 'Please enter your initials:'].
	message := nil.
	save := contents.
	model contents: contents notifying: self.
	contents := save.
</body>
</methods>

<methods>
<class-id>Seaside.ShoreDemo3 class</class-id> <category>accessing</category>

<body package="ShoreComponents-Demo3" selector="description">description

	^'ShoreComponents demo 3'</body>
</methods>

<methods>
<class-id>Seaside.ShoreDemo3 class</class-id> <category>as yet unclassified</category>

<body package="ShoreComponents-Demo3" selector="appName">appName

	^ self folderName , '/demo3'</body>
</methods>

<methods>
<class-id>Seaside.ShoreDemo3 class</class-id> <category>initialization</category>

<body package="ShoreComponents-Demo3" selector="initialize">initialize

	self initializeApplication.</body>
</methods>

<methods>
<class-id>Seaside.ShoreDemo1Introduction</class-id> <category>rendering</category>

<body package="ShoreComponents-Demo1" selector="renderContentOn:">renderContentOn: html

	html heading: self pageTitle.
	
	html paragraph: 'Welcome to the ShoreComponents demonstration application.' translated.
	
	html paragraph: ShoreCurrentRoot value displayString. 

	</body>
</methods>

<methods>
<class-id>Seaside.ShoreDemo1Introduction</class-id> <category>accessing</category>

<body package="ShoreComponents-Demo1" selector="pageTitle">pageTitle

	^ 'Introduction' translated</body>
</methods>

<methods>
<class-id>Seaside.ShoreDemo1Introduction class</class-id> <category>as yet unclassified</category>

<body package="ShoreComponents-Demo1" selector="menuName">menuName

	^ 'Introduction' translated</body>

<body package="ShoreComponents-Demo1" selector="menuPriority">menuPriority

	^ 1

	</body>
</methods>

<methods>
<class-id>Seaside.ShoreDemo1Introduction class</class-id> <category>initialization</category>

<body package="ShoreComponents-Demo1" selector="initialize">initialize

	self registerToMenu
</body>
</methods>

<methods>
<class-id>Seaside.ShoreDatePickerLibrary</class-id> <category>accessing</category>

<body package="ShoreComponents-Libraries" selector="selectorsToInclude">selectorsToInclude
	^ #( #datePickerCss #datePickerJs )</body>
</methods>

<methods>
<class-id>Seaside.ShoreDatePickerLibrary</class-id> <category>stylesheets</category>

<body package="ShoreComponents-Libraries" selector="datePickerCss">datePickerCss

^ '.shoreDatePicker {
		z-index:999; 
		position:absolute; 
		background-color: #e0e0e7; 
		border: 1px solid black;
		width: 220px;	
}

.shoreDatePickerHidden {
		z-index:999; 
		position:absolute; 
		background-color: #e0e0e7; 
		border: 1px solid black;
		width: 220px;
		display: none;
}

.shoreDatePickerCalendarTable {
	width: 100%;	
	height: 150px;	
	background-color: white;
}

.shoreDatePickerCalendarHeader {
	width: 100%;
	font-size: 80%;
	height: 12px;	
}

.shoreDatePickerCalendarHeader td {
	text-align: center;
}

.shoreDatePickerCalendarTable {
	width: 100%;	
	background-color: white;
}

.shoreDatePicker table {
	width: 100%;	
}

.shoreDatePickerDayName {
	background-color: black;
	padding: 2px;
	color: white;
	border: 1px solid #dedede;
	text-align: center;
	font-size: 7pt;
}

.shoreDatePickerDay {
	border: 1px solid #dedede;
	text-align: center;
	cursor: pointer;
}
.shoreDatePickerAnotherMonth {
	background-color: #dedede;
}
.shoreDatePickerThisMonth {
	background-color: white;
}
.shoreDatePickerToday {
	background-color: yellow;
	border: none;
}

.shoreDatePickerNavigationTable {
	width: 100%;
	background-color: black;
	color: white;
	font-weight: bold;
}

.shoreDatePickerNavigationTable a {
	color: white;
	text-decoration: none;
}

.shoreDatePickerNavigationTableCell {
	width: 25%;
	text-align: center;
}

'</body>
</methods>

<methods>
<class-id>Seaside.ShoreDatePickerLibrary</class-id> <category>images</category>

<body package="ShoreComponents-Libraries" selector="datePickerImageGif">datePickerImageGif
	| xxxCache |
	xxxCache := #(nil) beMutable.
	(xxxCache at: 1) isNil ifTrue: [
		xxxCache at: 1 put: #(71 73 70 56 57 97 17 0 15 0 194 7 0 0 0 0 64 64 64 223 223 223 167 167 167 51 51 153 102 153 204 153 51 51 255 255 255 44 0 0 0 0 17 0 15 0 0 3 66 88 179 220 30 138 200 73 220 130 131 78 59 240 57 194 23 130 226 231 145 232 56 98 66 235 182 70 108 180 167 250 25 183 169 148 40 126 248 172 151 75 54 19 212 120 182 195 49 197 11 10 159 198 29 115 186 76 174 10 129 172 118 203 13 36 0 0 59) asByteArray ].
	^ xxxCache at: 1</body>
</methods>

<methods>
<class-id>Seaside.ShoreDatePickerLibrary</class-id> <category>javascripts</category>

<body package="ShoreComponents-Libraries" selector="datePickerJs">datePickerJs
	^'
function datePickerSetDate(id, date)
{
	document.getElementById(id).value = date;
	document.getElementById(id + ''div'').className = ''shoreDatePickerHidden''; 
}

function datePickerToggle(divId, id)
{
	var calendar = document.getElementById(divId);		
	var editBox = document.getElementById(id);
	var pos = getAbsolutePos(editBox);
	calendar.style.left = (pos.x - 1) + "px";
	calendar.style.top = (pos.y + editBox.offsetHeight + 1) + "px";
	if (calendar.className == ''shoreDatePicker'') {
		calendar.className = ''shoreDatePickerHidden'';
	} else {
		calendar.className = ''shoreDatePicker'';
	}
}
'
</body>
</methods>

<methods>
<class-id>Seaside.ShoreRichEdit</class-id> <category>initialization</category>

<body package="ShoreComponents-Editors" selector="initialize">initialize
	"Initializes the receiver"

	super initialize.
	
	rtid  := ShoreId new.
	valueHolder := ShoreId new.
	
	content = String new.
	
</body>

<body package="ShoreComponents-Editors" selector="states">states
	^ Array with: self</body>
</methods>

<methods>
<class-id>Seaside.ShoreRichEdit</class-id> <category>rendering</category>

<body package="ShoreComponents-Editors" selector="renderButtonOn:image:id:atl:action:">renderButtonOn: html image: img id: aSymbol atl: alt action: action

	html image
		altText: alt;
		url: (img, 'Png') asShoreUrl;
		onClick: 'FormatText(''', rtid, ''', ''', action, ''', '''')'.</body>

<body package="ShoreComponents-Editors" selector="renderButtonsOn:">renderButtonsOn: html

	html div class: #shoreRichEditButtons; with: [
		self renderButtonOn: html image: #boldImage id: #ShoreRichEditBoldImage 
			atl: 'bold' translated action: 'bold'.
		self renderButtonOn: html image: #italicImage id: #ShoreRichEditItalicImage 
			atl: 'italic' translated action: 'italic'.
		self renderButtonOn: html image: #underlineImage id: #ShoreRichEditUnderlineImage 
			atl: 'underline' translated action: 'underline'.
		
		self separatorOn: html.

		self renderButtonOn: html image: #leftJustifyImage id: #ShoreRichEditLeftJustifyImage 
			atl: 'left' translated action: 'justifyleft'.
		self renderButtonOn: html image: #centreJustifyImage id: #ShoreRichEditCentreJustifyImage 
			atl: 'centre' translated action: 'justifycenter'.
		self renderButtonOn: html image: #rightJustifyImage id: #ShoreRichEditRightJustifyImage 
			atl: 'right' translated action: 'justifyright'.
		self renderButtonOn: html image: #fullJustifyImage id: #ShoreRichEditFullJustifyImage 
			atl: 'full' translated action: 'justifyfull'.

		self separatorOn: html.

		self renderButtonOn: html image: #ruleImage id: #ShoreRichEditRulerImage 
			atl: 'horizontal rule' translated action: 'inserthorizontalrule'.

		self separatorOn: html.

		self renderButtonOn: html image: #numberedListImage id: #ShoreRichEditNumberedListImage 
			atl: 'numbered list' translated action: 'insertorderedlist'.
		self renderButtonOn: html image: #listImage id: #ShoreRichEditListImage 
			atl: 'list' translated action: 'insertunorderedlist'.

		self separatorOn: html.

		self renderButtonOn: html image: #outdentImage  id: #ShoreRichEditOutdentImage 
			atl: 'outdent' translated action: 'outdent'.
		self renderButtonOn: html image: #indentImage  id: #ShoreRichEditIndentImage 
			atl: 'indent' translated action: 'indent'.
	]


</body>

<body package="ShoreComponents-Editors" selector="renderContentOn:">renderContentOn: html

	| style |

	html form 
		attributeAt: #onSubmit put: 'updateRTEs();';
		with: [
		html  div class: #shoreRichEdit; with: [
			html hiddenInput
				id: valueHolder;
				value: self content;
				callback: [:val | self content: val].
	
			self renderButtonsOn: html.
			self renderIFrameOn: html.

			style := 	'editorStyle.css' asShoreUrl asString.

			html html: '&lt;script language="JavaScript" type="text/javascript"&gt;
				initRTE("', style, '");
				registerRTE(''', rtid, ''', ''', valueHolder ,''');
				enableDesignMode(''', rtid, ''', false, ''', valueHolder ,''');
				&lt;/script&gt;'.
		].
	].





</body>

<body package="ShoreComponents-Editors" selector="rendererClass">rendererClass 
	"Returns the receivers default renderer class"

	^ ShoreCanvas</body>

<body package="ShoreComponents-Editors" selector="renderIFrameOn:">renderIFrameOn: html

	html div class: #shoreRichEditField; with: [
		html iframe
			class: #shoreRichEditEditor;
			attributeAt: #scrolling put: true;
			attributeAt: #frameBorder put: 0;
			id: rtid;
			name: rtid ].</body>

<body package="ShoreComponents-Editors" selector="separatorOn:">separatorOn: html
	"Renders a separator on the given html object"

	html space; space.</body>
</methods>

<methods>
<class-id>Seaside.ShoreRichEdit</class-id> <category>accessing</category>

<body package="ShoreComponents-Editors" selector="content">content
	
	^content ifNil:['']
</body>

<body package="ShoreComponents-Editors" selector="content:">content: anObject

	content := anObject</body>
</methods>

<methods>
<class-id>Seaside.ShoreRichEdit</class-id> <category>java script</category>

<body package="ShoreComponents-Editors" selector="script">script 

	^ 
'// Cross-Browser Rich Text Editor
// http://www.kevinroth.com/rte/demo.htm
// Written by Kevin Roth (kevin@NOSPAMkevinroth.com - remove NOSPAM)
// Visit the support forums at http://www.kevinroth.com/forums/index.php?c=2

//init variables
var rng;
var currentRTE;
var allRTEs = "";
var allValueHolders = "";

var isGecko;
var isSafari;
var isKonqueror;

var cssFile;


function initRTE(css) {
	//set browser vars
	var ua = navigator.userAgent.toLowerCase();
	isGecko = (ua.indexOf("gecko") != -1);
	isSafari = (ua.indexOf("safari") != -1);
	isKonqueror = (ua.indexOf("konqueror") != -1);
	
	//set paths vars
	cssFile = css;
	
}

function registerRTE(rte, valueHolder) {
		if (allRTEs.length &gt; 0) allRTEs += ";";
		if (allRTEs.length &gt; 0) allValueHolders += ";";
		allRTEs += rte;
		allValueHolders += valueHolder;
}

function enableDesignMode(rte, readOnly, valueHolder) 
{
	var html = document.getElementById(valueHolder).value;
	
		var frameHtml = "&lt;html id=\"" + rte + "\"&gt;\n";
	frameHtml += "&lt;head&gt;\n";
	//to reference your stylesheet, set href property below to your stylesheet path and uncomment
	if (cssFile.length &gt; 0) {
		frameHtml += "&lt;link media=\"all\" type=\"text/css\" href=\"" + cssFile + "\" rel=\"stylesheet\"&gt;\n";
	} else {
		frameHtml += "&lt;style&gt;\n";
		frameHtml += "body {\n";
		frameHtml += "	background: #FFFFFF;\n";
		frameHtml += "	margin: 0px;\n";
		frameHtml += "	padding: 0px;\n";
		frameHtml += "}\n";
		frameHtml += "&lt;/style&gt;\n";
	}
	frameHtml += "&lt;/head&gt;\n";
	frameHtml += "&lt;body class=rte&gt;\n";
	frameHtml +=  html + "\n";
	frameHtml += "&lt;/body&gt;\n";
	frameHtml += "&lt;/html&gt;";
	
	if (document.all) {
		var oRTE = frames[rte].document;
		oRTE.open();
		oRTE.write(frameHtml);
		oRTE.close();
		if (!readOnly) oRTE.designMode = "On";
	} else {
		try {
			if (!readOnly) document.getElementById(rte).contentDocument.designMode = "on";
			try {
				var oRTE = document.getElementById(rte).contentWindow.document;
				oRTE.open();
				oRTE.write(frameHtml);
				oRTE.close();
				if (isGecko &amp;&amp; !readOnly) {
					//attach a keyboard handler for gecko browsers to make keyboard shortcuts work
					oRTE.addEventListener("keypress", kb_handler, true);
				}
			} catch (e) {
				alert("Error preloading content.");
			}
		} catch (e) {
			//gecko may take some time to enable design mode.
			//Keep looping until able to set.
			if (isGecko) {
				var expr = "enableDesignMode(''" + rte + "'', " + readOnly + ", ''" + valueHolder + "'');";
				setTimeout(expr, 10);
			} else {
				return false;
			}
		}
	}
}

function updateRTEs() {
	var vRTEs = allRTEs.split(";");
	var vValueHolders = allValueHolders.split(";");
	for (var i = 0; i &lt; vRTEs.length; i++) {
		updateRTE(vRTEs[i], vValueHolders[i]);
	}
}

function updateRTE(rte, valueHolder) 
{

	//set message value
	var oHdnMessage = document.getElementById(valueHolder);
	var oRTE = document.getElementById(rte);
	var readOnly = false;
	
	//check for readOnly mode
	if (document.all) {
		if (frames[rte].document.designMode != "On") readOnly = true;
	} else {
		if (document.getElementById(rte).contentDocument.designMode != "on") readOnly = true;
	}
	
	//if viewing source, switch back to design view
	
	if (oHdnMessage.value == null) oHdnMessage.value = "";
	if (document.all) {
		oHdnMessage.value = frames[rte].document.body.innerHTML;
	} else {
		oHdnMessage.value = oRTE.contentWindow.document.body.innerHTML;
	}
	
	//if there is no content (other than formatting) set value to nothing
	if (stripHTML(oHdnMessage.value.replace("&amp;nbsp;", " ")) == "" 
		&amp;&amp; oHdnMessage.value.toLowerCase().search("&lt;hr") == -1
		&amp;&amp; oHdnMessage.value.toLowerCase().search("&lt;img") == -1) oHdnMessage.value = "";
	//fix for gecko
	if (escape(oHdnMessage.value) == "%3Cbr%3E%0D%0A%0D%0A%0D%0A") oHdnMessage.value = "";
	
}

//Function to format text in the text box
function FormatText(rte, command, option) {
	var oRTE;
	if (document.all) {
		oRTE = frames[rte];
		
		//get current selected range
		var selection = oRTE.document.selection; 
		if (selection != null) {
			rng = selection.createRange();
		}
	} else {
		oRTE = document.getElementById(rte).contentWindow;
		
		//get currently selected range
		var selection = oRTE.getSelection();
		rng = selection.getRangeAt(selection.rangeCount - 1).cloneRange();
	}
	
	try {
			oRTE.focus();
		  	oRTE.document.execCommand(command, false, option);
			oRTE.focus();
	} catch (e) {
		alert(e);
	}
}

function Select(rte, selectname) {
	var oRTE;
	if (document.all) {
		oRTE = frames[rte];
		
		//get current selected range
		var selection = oRTE.document.selection; 
		if (selection != null) {
			rng = selection.createRange();
		}
	} else {
		oRTE = document.getElementById(rte).contentWindow;
		
		//get currently selected range
		var selection = oRTE.getSelection();
		rng = selection.getRangeAt(selection.rangeCount - 1).cloneRange();
	}
	
	var idx = document.getElementById(selectname).selectedIndex;
	// First one is always a label
	if (idx != 0) {
		var selected = document.getElementById(selectname).options[idx].value;
		var cmd = selectname.replace(''_'' + rte, '''');
		oRTE.focus();
		oRTE.document.execCommand(cmd, false, selected);
		oRTE.focus();
		document.getElementById(selectname).selectedIndex = 0;
	}
}

function Replace(rte, text) {
	var oRTE;
	if (document.all) {
		oRTE = frames[rte];
		
		//get current selected range
		var selection = oRTE.document.selection; 
		if (selection != null) {
			rng = selection.createRange();
		}
	} else {
		oRTE = document.getElementById(rte).contentWindow;
		
		//get currently selected range
		var selection = oRTE.getSelection();
		rng = selection.getRangeAt(selection.rangeCount - 1).cloneRange();
	}
	
	var idx = document.getElementById(selectname).selectedIndex;
	// First one is always a label
	if (idx != 0) {
		var selected = text;
		var cmd = selectname.replace(''_'' + rte, '''');
		oRTE.focus();
		oRTE.document.execCommand(cmd, false, selected);
		oRTE.focus();
		document.getElementById(selectname).selectedIndex = 0;
	}
}

function kb_handler(evt) {
	var rte = evt.target.id;
	
	//contributed by Anti Veeranna (thanks Anti!)
	if (evt.ctrlKey) {
		var key = String.fromCharCode(evt.charCode).toLowerCase();
		var cmd = '''';
		switch (key) {
			case ''b'': cmd = "bold"; break;
			case ''i'': cmd = "italic"; break;
			case ''u'': cmd = "underline"; break;
		};

		if (cmd) {
			FormatText(rte, cmd, true);
			//evt.target.ownerDocument.execCommand(cmd, false, true);
			// stop the event bubble
			evt.preventDefault();
			evt.stopPropagation();
		}
 	}
}


function stripHTML(oldString) {
	var newString = oldString.replace(/(&lt;([^&gt;]+)&gt;)/ig,"");
	
	//replace carriage returns and line feeds
   newString = newString.replace(/\r\n/g," ");
   newString = newString.replace(/\n/g," ");
   newString = newString.replace(/\r/g," ");
	
	//trim string
	newString = trim(newString);
	
	return newString;
}

function trim(inputString) {
   // Removes leading and trailing spaces from the passed string. Also removes
   // consecutive spaces and replaces it with one space. If something besides
   // a string is passed in (null, custom object, etc.) then return the input.
   if (typeof inputString != "string") return inputString;
   var retValue = inputString;
   var ch = retValue.substring(0, 1);
	
   while (ch == " ") { // Check for spaces at the beginning of the string
      retValue = retValue.substring(1, retValue.length);
      ch = retValue.substring(0, 1);
   }
   ch = retValue.substring(retValue.length - 1, retValue.length);
	
   while (ch == " ") { // Check for spaces at the end of the string
      retValue = retValue.substring(0, retValue.length - 1);
      ch = retValue.substring(retValue.length - 1, retValue.length);
   }
	
	// Note that there are two spaces in the string - look for multiple spaces within the string
   while (retValue.indexOf("  ") != -1) {
		// Again, there are two spaces in each of the strings
      retValue = retValue.substring(0, retValue.indexOf("  ")) + retValue.substring(retValue.indexOf("  ") + 1, retValue.length);
   }
   return retValue; // Return the trimmed string back to the user
}

'</body>
</methods>

<methods>
<class-id>Seaside.ShoreDemo1TableDemo4</class-id> <category>initialization</category>

<body package="ShoreComponents-Demo1" selector="initialize">initialize

	| rows columns |
   
	super initialize.
 
	rows := Smalltalk allClasses select: [:class | class name beginsWith: 'Shore' ].
	columns := OrderedCollection new
		add: ((ShoreTableColumn selector: #superclass title: 'superclass' translated)
			sortBlock: [:a :b | 
				a name compare: b name ];
			groupBy: true;
			visible: false;
			yourself);	
		add: ((ShoreTableColumn selector: #yourself title: 'class' translated)
			clickBlock: [:row | self browse: row];
			sortBlock: [:a :b | 
				a name compare: b name ];
			yourself);
		add: ((ShoreTableColumn selector: #hasMethods title: 'has methods' translated)
			sortBlock: [:a :b | 
				a displayString compare: b displayString ];
			yourself);		
	yourself.
	

	table := ShoreLiveTable new.
	table rows: rows; columns: columns.
	table previewBlock: [:html :row | 
		html html: (row definition asXHtml) ].
	
	table actionsBlock: [:html |
		table renderSelectAllAnchorOn: html.
		html separator.
		table renderSelectNoneAnchorOn: html.
		html separator.
		html anchor callback: [ table selection do: [:each | self browse: each]];
			with: 'browse selected' translated. ].
	
	

</body>
</methods>

<methods>
<class-id>Seaside.ShoreDemo1TableDemo4</class-id> <category>style</category>

<body package="ShoreComponents-Demo1" selector="style">style
	^ '

.ShoreDemo1TableDemo2 table { 
	border-left: 1px solid #e7dfce;
	border-top: 1px solid #e7dfce;
}


.ShoreDemo1TableDemo2 th { 
	margin: 0px;
	padding: 2px;
	background-color: #efebde; 
	color: black;
	border-right: 1px solid #a5aa94;
	border-bottom: 3px solid #cec7bd;
 }

.ShoreDemo1TableDemo2 th img { 
	padding-left: 5px;
 }

.shoreLiveTableSelector { 
	margin: 0px;
}

.ShoreDemo1TableDemo2 th:hover { 
	margin: 0px;
	padding: 2px;
	background-color: #f8f5ed; 
	color: black;
	border-right: 1px solid #a5aa94;
	border-bottom: 3px solid #f6cd4f;
 }

.shoreTableColumnSortIndex {
	color: #a5aa94;
	padding-left: 3px;
}

.sortable { 
	cursor: pointer;
 }


.ShoreDemo1TableDemo2 td {
	border-right: 1px solid #e7dfce;
	border-bottom: 1px solid #e7dfce;
	text-align: left;
}
.ShoreDemo1TableDemo2 td.big {color: red; font-weight: bold;}
.ShoreDemo1TableDemo2 tr+tr&gt;th {text-align: right}
.ShoreDemo1TableDemo2 tr.odd { background-color: #fbf8f0}
.ShoreDemo1TableDemo2 tr.even { background-color: white}

.shoreLiveTableOffset {
	background-color: white;
}

.shoreLiveTableGroup {
	font-weight: bold;
}

.shoreLiveTableGroupHeader {
	width: 15px;
}

'</body>
</methods>

<methods>
<class-id>Seaside.ShoreDemo1TableDemo4</class-id> <category>rendering</category>

<body package="ShoreComponents-Demo1" selector="renderContentOn:">renderContentOn: html

	html heading: self pageTitle.
	
	html div class: #ShoreDemo1TableDemo2; with: [
		html render: table ].
</body>
</methods>

<methods>
<class-id>Seaside.ShoreDemo1TableDemo4</class-id> <category>accessing</category>

<body package="ShoreComponents-Demo1" selector="children">children

	^ Array with: table</body>

<body package="ShoreComponents-Demo1" selector="pageTitle">pageTitle

	^ 'Grouping live table demo'.</body>
</methods>

<methods>
<class-id>Seaside.ShoreDemo1TableDemo4</class-id> <category>actions</category>

<body package="ShoreComponents-Demo1" selector="browse:">browse: aClass
	self call: ((WABrowser fullOnClass: aClass) 
					addDecoration: ShoreBrowserDecoration new; 
					yourself).
</body>
</methods>

<methods>
<class-id>Seaside.ShoreDemo1TableDemo4 class</class-id> <category>as yet unclassified</category>

<body package="ShoreComponents-Demo1" selector="menuName">menuName

	^ 'Grouping live table' translated</body>

<body package="ShoreComponents-Demo1" selector="menuPriority">menuPriority

	^ 60</body>
</methods>

<methods>
<class-id>Seaside.ShoreDemo1TableDemo4 class</class-id> <category>initialization</category>

<body package="ShoreComponents-Demo1" selector="initialize">initialize

	self registerToMenu
</body>
</methods>

<methods>
<class-id>Seaside.ShoreList</class-id> <category>accessing</category>

<body package="ShoreComponents-Lists" selector="data">data
	^data</body>

<body package="ShoreComponents-Lists" selector="data:">data: anObject

	data := anObject
	</body>

<body package="ShoreComponents-Lists" selector="filteredData">filteredData
	"This needs to be more generic, since we do not always batch on classes"

	(filterText isEmptyOrNil or: [self showItemBlock isNil]) 
		ifTrue: [^data]
		ifFalse: [^data select: [:e | self showItemBlock value: e value: filterText]]</body>

<body package="ShoreComponents-Lists" selector="itemBlock">itemBlock
	^itemBlock</body>

<body package="ShoreComponents-Lists" selector="itemBlock:">itemBlock: anObject
	itemBlock := anObject</body>

<body package="ShoreComponents-Lists" selector="onClickBlock">onClickBlock
	^onClickBlock</body>

<body package="ShoreComponents-Lists" selector="onClickBlock:">onClickBlock: anObject
	onClickBlock := anObject</body>

<body package="ShoreComponents-Lists" selector="showItemBlock">showItemBlock
	^ showItemBlock</body>

<body package="ShoreComponents-Lists" selector="showItemBlock:">showItemBlock: aBlock
	showItemBlock := aBlock</body>
</methods>

<methods>
<class-id>Seaside.ShoreList</class-id> <category>initialization</category>

<body package="ShoreComponents-Lists" selector="initialize">initialize 

	super initialize. 

	id := ShoreId new.
</body>

<body package="ShoreComponents-Lists" selector="states">states

	^ Array with: self</body>
</methods>

<methods>
<class-id>Seaside.ShoreList</class-id> <category>rendering</category>

<body package="ShoreComponents-Lists" selector="renderComponentOn:">renderComponentOn: html 

	| pageData |
	
	pageData := self filteredData.
	self renderPageData: pageData on: html.
</body>

<body package="ShoreComponents-Lists" selector="renderContentOn:">renderContentOn: html 

	html div class: #shoreComponent;  class: #shoreBatchedList; with: [
		self renderFiltersOn: html. 
		html div id: id; class: #shoreLisData; with: [ self renderComponentOn: html ].
	].

</body>

<body package="ShoreComponents-Lists" selector="rendererClass">rendererClass 
	"Returns the receivers default renderer class"

	^ ShoreCanvas</body>

<body package="ShoreComponents-Lists" selector="renderFiltersOn:">renderFiltersOn: html 

	| script inputId |

	inputId := ShoreId new. 
	script := '
		if (resizedElement &amp;&amp; !document.all) {
			resizedElement.style.width = resizedElement.parentNode.scrollWidth-70 + "px";
		}'.

	showItemBlock ifNotNil: 
		[ html form class: #shoreComponentImportantPart; class: #shoreBatchedListFilter; with: [ 
			html textInput id: inputId; onResize: script; class: #shoreComponentInput; class: #shoreBatchedListFilterInput; callback: [:v |
				filterText := v.
					(filterText beginsWith: '*') 
						ifFalse: [filterText size &gt; 1 ifTrue: [filterText := '*' , filterText]].
					(filterText endsWith: '*') 
						ifFalse: [filterText size &gt; 1 ifTrue: [filterText := filterText , '*']]].
			html submitButton class: #shoreComponentButton; class: #shoreBatchedListFilterButton; text: 'Filter On']].

	html registerOnResizeHandlerFor: inputId.
</body>

<body package="ShoreComponents-Lists" selector="renderPageData:on:">renderPageData: pageData on: html 

	| itemDiv |

	pageData do: [:item | 
		html div: [
			itemDiv := html div class: #shoreBatchedListItem.
			onClickBlock ifNotNil: [
				itemDiv onClickAction: [ onClickBlock value: item ].
				itemDiv style: 'cursor: pointer'].
			itemDiv with: [
				itemBlock 
					ifNil: [html text: item displayString]
					ifNotNil: [itemBlock value: item value: html]]]]

</body>
</methods>

<methods>
<class-id>Seaside.ShoreDemo3FullHeightList</class-id> <category>rendering</category>

<body package="ShoreComponents-Demo3" selector="renderContentOn:">renderContentOn: html 

	| script script2 divId |

	divId := ShoreId new.

	script := '
		if (resizedElement) {
			resizedElement.style.height = resizedElement.parentNode.clientHeight -2 + "px";
		}'.

	script2 := '
		if (resizedElement) {
			resizedElement.style.height = resizedElement.parentNode.clientHeight -24 + "px";
		}'.

	html div id: divId; class: #shoreBatchedList; onResize: script; with: [
		self renderFiltersOn: html. 
		html div id: id; class: #shoreLisData; onResize: script2; with: [ self renderComponentOn: html ].
	].

	html registerOnResizeHandlerFor: divId.
	html registerOnResizeHandlerFor: id.
</body>
</methods>

<methods>
<class-id>Seaside.ShoreDemo1TabControlDemo</class-id> <category>rendering</category>

<body package="ShoreComponents-Demo1" selector="renderContentOn:">renderContentOn: html

	html heading: self pageTitle.
	
	html render: tab.
	html render: tab2.
</body>
</methods>

<methods>
<class-id>Seaside.ShoreDemo1TabControlDemo</class-id> <category>initialization</category>

<body package="ShoreComponents-Demo1" selector="initialize">initialize

	super initialize.

	tab := ShoreTabControl new.

	(Array with: ShoreDemo1Introduction with: ShoreDemo1StandardDialogsDemo with: ShoreDemo1NestedFormsDemo)
	 do: [:demoClass |
		tab add: (demoClass new) label: demoClass menuName ].

	tab select: tab options first.
		
	tab2 := ShoreTabControl2 new.

	(Array with: ShoreDemo1Introduction with: ShoreDemo1StandardDialogsDemo with: ShoreDemo1NestedFormsDemo)
	 do: [:demoClass |
		tab2 add: (demoClass new) label: demoClass menuName ].
	
	tab2 select: tab2 options first.

</body>
</methods>

<methods>
<class-id>Seaside.ShoreDemo1TabControlDemo</class-id> <category>accessing</category>

<body package="ShoreComponents-Demo1" selector="children">children

	^ Array with: tab with: tab2</body>

<body package="ShoreComponents-Demo1" selector="pageTitle">pageTitle

	^ 'Tab control demo'.</body>
</methods>

<methods>
<class-id>Seaside.ShoreDemo1TabControlDemo class</class-id> <category>as yet unclassified</category>

<body package="ShoreComponents-Demo1" selector="menuName">menuName

	^ 'Tab control' translated</body>

<body package="ShoreComponents-Demo1" selector="menuPriority">menuPriority

	^ 45</body>
</methods>

<methods>
<class-id>Seaside.ShoreDemo1TabControlDemo class</class-id> <category>initialization</category>

<body package="ShoreComponents-Demo1" selector="initialize">initialize

	self registerToMenu
</body>
</methods>

<methods>
<class-id>Seaside.ShorePanelDecoration</class-id> <category>initialization</category>

<body package="ShoreComponents-Panels" selector="initialize">initialize

	super initialize.
	
	open := true.
	enabled := true.
	id := ShoreId new.
</body>
</methods>

<methods>
<class-id>Seaside.ShorePanelDecoration</class-id> <category>accessing</category>

<body package="ShoreComponents-Panels" selector="enabled">enabled
	"Answer the value of enabled"

	^ enabled</body>

<body package="ShoreComponents-Panels" selector="enabled:">enabled: anObject
	"Set the value of enabled"

	enabled := anObject</body>

<body package="ShoreComponents-Panels" selector="id">id
	"Answer the value of id"

	^ id</body>

<body package="ShoreComponents-Panels" selector="id:">id: anObject
	"Set the value of id"

	id := anObject</body>

<body package="ShoreComponents-Panels" selector="open">open

	^open</body>

<body package="ShoreComponents-Panels" selector="open:">open: anObject

	open := anObject</body>
</methods>

<methods>
<class-id>Seaside.ShorePanelDecoration</class-id> <category>rendering</category>

<body package="ShoreComponents-Panels" selector="renderContentOn:">renderContentOn: html

	| |

	html roundedDivColor: '#555577' top: true bottom: false with: [
		self renderHeaderOn: html. ].
	
	html div class: #shorePanelSectionContainer; with: [
	html roundedDivColor: 'rgb(214, 223, 247)' top: false bottom: true with: [
		html div class: #shorePanelSection;
			with: [
				html div id: id; class: #shoreDynamicPanelSectionContent; 
					class: #shoreDynamicPanelSectionContent; 
					with: [ self renderOwnerOn: html  ]]]].
			
	open ifFalse: [	
		html script: ('document.getElementById("{1}").style.display = ''none'';' format: (Array with: id)).].</body>

<body package="ShoreComponents-Panels" selector="rendererClass">rendererClass 
	"Returns the receivers default renderer class"

	^ ShoreCanvas</body>

<body package="ShoreComponents-Panels" selector="renderHeaderOn:">renderHeaderOn: html

	| imageUrl headerDiv |

	imageUrl := self enabled
		ifTrue: [ 'enabled.gif' asShoreUrl]
		ifFalse: [ 'disabled.gif' asShoreUrl ].		

	headerDiv := html div class: #shorePanelSectionHeader.
	enabled ifTrue: [
		headerDiv onClick: (html effect id: id; perform: #toggleBlind);
			onClick: (html updater
				asynchronous: true;
				id: id, 'none';
				callback: [:h | open := open not.]) ].
	headerDiv with: [
			html image url: imageUrl.
			html text: self owner name].</body>
</methods>

<methods>
<class-id>Seaside.ShoreFileLibrary</class-id> <category>uploaded</category>

<body package="ShoreComponents-Libraries" selector="boldImagePng">boldImagePng
	| xxxCache |
	xxxCache := #(nil) beMutable.
	(xxxCache at: 1) isNil ifTrue: [
		xxxCache at: 1 put: #(137 80 78 71 13 10 26 10 0 0 0 13 73 72 68 82 0 0 0 25 0 0 0 24 8 6 0 0 0 15 181 86 198 0 0 0 57 73 68 65 84 120 94 99 248 255 159 246 128 225 255 200 183 100 228 91 50 96 150 48 48 48 226 197 84 243 9 54 67 73 177 104 4 91 50 242 227 100 224 45 161 91 62 25 249 101 215 200 183 100 132 91 2 0 79 221 167 5 90 15 66 100 0 0 0 0 73 69 78 68 174 66 96 130) asByteArray ].
	^ xxxCache at: 1</body>

<body package="ShoreComponents-Libraries" selector="centreJustifyImagePng">centreJustifyImagePng
	| xxxCache |
	xxxCache := #(nil) beMutable.
	(xxxCache at: 1) isNil ifTrue: [
		xxxCache at: 1 put: #(137 80 78 71 13 10 26 10 0 0 0 13 73 72 68 82 0 0 0 25 0 0 0 24 8 6 0 0 0 15 181 86 198 0 0 0 53 73 68 65 84 120 94 99 248 255 159 246 128 225 255 200 183 100 228 91 2 23 100 96 36 11 15 222 224 162 212 7 35 63 78 70 126 156 140 252 56 25 10 113 50 242 45 25 249 150 80 5 0 0 148 252 128 57 250 56 59 111 0 0 0 0 73 69 78 68 174 66 96 130) asByteArray ].
	^ xxxCache at: 1</body>

<body package="ShoreComponents-Libraries" selector="disabledGif">disabledGif
	| xxxCache |
	xxxCache := #(nil) beMutable.
	(xxxCache at: 1) isNil ifTrue: [
		xxxCache at: 1 put: #(71 73 70 56 57 97 10 0 11 0 161 1 0 0 0 0 255 255 255 255 255 255 255 255 255 33 249 4 1 10 0 2 0 44 0 0 0 0 10 0 11 0 0 2 20 148 143 18 203 107 0 35 76 84 53 246 100 172 233 98 161 109 220 120 20 0 59) asByteArray ].
	^ xxxCache at: 1</body>

<body package="ShoreComponents-Libraries" selector="downGif">downGif
	| xxxCache |
	xxxCache := #(nil) beMutable.
	(xxxCache at: 1) isNil ifTrue: [
		xxxCache at: 1 put: #(71 73 70 56 57 97 12 0 12 0 194 4 0 165 170 148 173 166 156 173 170 148 173 170 156 255 255 255 255 255 255 255 255 255 255 255 255 33 254 21 67 114 101 97 116 101 100 32 119 105 116 104 32 84 104 101 32 71 73 77 80 0 33 249 4 1 10 0 4 0 44 0 0 0 0 12 0 12 0 0 3 26 72 186 220 254 80 5 33 194 168 35 176 48 57 208 77 246 9 80 23 17 192 169 174 236 147 0 0 59) asByteArray ].
	^ xxxCache at: 1</body>

<body package="ShoreComponents-Libraries" selector="enabledGif">enabledGif
	| xxxCache |
	xxxCache := #(nil) beMutable.
	(xxxCache at: 1) isNil ifTrue: [
		xxxCache at: 1 put: #(71 73 70 56 57 97 10 0 11 0 194 5 0 0 0 0 1 1 1 9 9 9 244 244 244 253 253 253 255 255 255 255 255 255 255 255 255 33 249 4 1 10 0 7 0 44 0 0 0 0 10 0 11 0 0 3 29 120 186 124 213 78 129 183 10 88 130 218 38 200 184 149 18 128 212 196 108 146 6 46 19 218 0 43 212 36 0 59) asByteArray ].
	^ xxxCache at: 1</body>

<body package="ShoreComponents-Libraries" selector="fullJustifyImagePng">fullJustifyImagePng
	| xxxCache |
	xxxCache := #(nil) beMutable.
	(xxxCache at: 1) isNil ifTrue: [
		xxxCache at: 1 put: #(137 80 78 71 13 10 26 10 0 0 0 13 73 72 68 82 0 0 0 25 0 0 0 24 8 6 0 0 0 15 181 86 198 0 0 0 48 73 68 65 84 120 94 99 248 255 159 246 128 225 255 200 183 100 228 91 2 23 100 96 36 11 143 124 159 140 124 159 140 124 159 140 124 159 140 252 82 120 228 91 50 228 45 1 0 181 163 92 105 48 144 153 1 0 0 0 0 73 69 78 68 174 66 96 130) asByteArray ].
	^ xxxCache at: 1</body>

<body package="ShoreComponents-Libraries" selector="indentImagePng">indentImagePng
	| xxxCache |
	xxxCache := #(nil) beMutable.
	(xxxCache at: 1) isNil ifTrue: [
		xxxCache at: 1 put: #(137 80 78 71 13 10 26 10 0 0 0 13 73 72 68 82 0 0 0 25 0 0 0 24 8 6 0 0 0 15 181 86 198 0 0 0 78 73 68 65 84 120 94 99 248 255 159 246 128 225 255 200 183 132 86 150 48 48 48 14 65 159 128 92 141 140 177 137 97 195 131 209 39 13 4 125 71 177 79 64 150 160 91 68 53 75 96 134 35 99 154 6 23 177 62 161 75 156 140 252 124 50 240 62 25 249 165 240 200 175 25 71 152 37 0 212 25 124 186 192 135 207 75 0 0 0 0 73 69 78 68 174 66 96 130) asByteArray ].
	^ xxxCache at: 1</body>

<body package="ShoreComponents-Libraries" selector="italicImagePng">italicImagePng
	| xxxCache |
	xxxCache := #(nil) beMutable.
	(xxxCache at: 1) isNil ifTrue: [
		xxxCache at: 1 put: #(137 80 78 71 13 10 26 10 0 0 0 13 73 72 68 82 0 0 0 25 0 0 0 24 8 6 0 0 0 15 181 86 198 0 0 0 86 73 68 65 84 120 94 229 212 49 10 0 32 12 67 209 120 243 222 188 226 224 164 67 83 9 8 17 92 251 248 138 34 83 191 144 254 136 63 242 13 2 140 99 75 74 246 240 136 208 148 172 193 213 130 231 227 170 86 208 72 167 130 70 58 21 20 210 173 160 144 110 69 9 185 189 11 233 157 248 255 93 254 136 41 50 1 31 168 2 33 170 54 188 133 0 0 0 0 73 69 78 68 174 66 96 130) asByteArray ].
	^ xxxCache at: 1</body>

<body package="ShoreComponents-Libraries" selector="leftJustifyImagePng">leftJustifyImagePng
	| xxxCache |
	xxxCache := #(nil) beMutable.
	(xxxCache at: 1) isNil ifTrue: [
		xxxCache at: 1 put: #(137 80 78 71 13 10 26 10 0 0 0 13 73 72 68 82 0 0 0 25 0 0 0 24 8 6 0 0 0 15 181 86 198 0 0 0 50 73 68 65 84 120 94 99 248 255 159 246 128 225 255 200 183 100 228 91 2 23 100 96 36 11 15 93 159 140 252 56 25 249 113 50 242 227 100 56 196 201 200 183 100 228 91 66 21 0 0 200 143 128 57 23 58 202 123 0 0 0 0 73 69 78 68 174 66 96 130) asByteArray ].
	^ xxxCache at: 1</body>

<body package="ShoreComponents-Libraries" selector="listImagePng">listImagePng
	| xxxCache |
	xxxCache := #(nil) beMutable.
	(xxxCache at: 1) isNil ifTrue: [
		xxxCache at: 1 put: #(137 80 78 71 13 10 26 10 0 0 0 13 73 72 68 82 0 0 0 25 0 0 0 24 8 6 0 0 0 15 181 86 198 0 0 0 55 73 68 65 84 120 94 99 248 255 159 246 128 225 255 200 183 100 228 91 130 34 193 208 0 199 116 181 132 129 129 145 32 30 124 62 25 249 17 63 242 35 126 228 71 252 200 143 248 145 111 201 112 177 4 0 93 107 195 86 21 111 10 251 0 0 0 0 73 69 78 68 174 66 96 130) asByteArray ].
	^ xxxCache at: 1</body>

<body package="ShoreComponents-Libraries" selector="logoSvg">logoSvg
	| xxxCache |
	xxxCache := #(nil) beMutable.
	(xxxCache at: 1) isNil ifTrue: [
		xxxCache at: 1 put: #(60 63 120 109 108 32 118 101 114 115 105 111 110 61 34 49 46 48 34 32 101 110 99 111 100 105 110 103 61 34 85 84 70 45 56 34 32 115 116 97 110 100 97 108 111 110 101 61 34 110 111 34 63 62 10 60 33 45 45 32 67 114 101 97 116 101 100 32 119 105 116 104 32 73 110 107 115 99 97 112 101 32 40 104 116 116 112 58 47 47 119 119 119 46 105 110 107 115 99 97 112 101 46 111 114 103 47 41 32 45 45 62 10 60 115 118 103 10 32 32 32 32 120 109 108 110 115 58 100 99 61 34 104 116 116 112 58 47 47 112 117 114 108 46 111 114 103 47 100 99 47 101 108 101 109 101 110 116 115 47 49 46 49 47 34 10 32 32 32 32 120 109 108 110 115 58 99 99 61 34 104 116 116 112 58 47 47 119 101 98 46 114 101 115 111 117 114 99 101 46 111 114 103 47 99 99 47 34 10 32 32 32 32 120 109 108 110 115 58 114 100 102 61 34 104 116 116 112 58 47 47 119 119 119 46 119 51 46 111 114 103 47 49 57 57 57 47 48 50 47 50 50 45 114 100 102 45 115 121 110 116 97 120 45 110 115 35 34 10 32 32 32 32 120 109 108 110 115 58 115 118 103 61 34 104 116 116 112 58 47 47 119 119 119 46 119 51 46 111 114 103 47 50 48 48 48 47 115 118 103 34 10 32 32 32 32 120 109 108 110 115 61 34 104 116 116 112 58 47 47 119 119 119 46 119 51 46 111 114 103 47 50 48 48 48 47 115 118 103 34 10 32 32 32 32 120 109 108 110 115 58 115 111 100 105 112 111 100 105 61 34 104 116 116 112 58 47 47 105 110 107 115 99 97 112 101 46 115 111 117 114 99 101 102 111 114 103 101 46 110 101 116 47 68 84 68 47 115 111 100 105 112 111 100 105 45 48 46 100 116 100 34 10 32 32 32 32 120 109 108 110 115 58 105 110 107 115 99 97 112 101 61 34 104 116 116 112 58 47 47 119 119 119 46 105 110 107 115 99 97 112 101 46 111 114 103 47 110 97 109 101 115 112 97 99 101 115 47 105 110 107 115 99 97 112 101 34 10 32 32 32 32 105 100 61 34 115 118 103 50 34 10 32 32 32 32 115 111 100 105 112 111 100 105 58 118 101 114 115 105 111 110 61 34 48 46 51 50 34 10 32 32 32 32 105 110 107 115 99 97 112 101 58 118 101 114 115 105 111 110 61 34 48 46 52 51 34 10 32 32 32 32 119 105 100 116 104 61 34 49 48 48 34 10 32 32 32 32 104 101 105 103 104 116 61 34 49 48 48 34 10 32 32 32 32 115 111 100 105 112 111 100 105 58 100 111 99 98 97 115 101 61 34 67 58 92 116 101 109 112 92 54 54 34 10 32 32 32 32 115 111 100 105 112 111 100 105 58 100 111 99 110 97 109 101 61 34 115 104 111 114 101 46 115 118 103 34 10 32 32 32 32 118 101 114 115 105 111 110 61 34 49 46 48 34 62 10 9 10 9 60 100 101 102 115 10 9 32 32 32 32 32 105 100 61 34 100 101 102 115 53 34 32 47 62 10 9 10 9 60 112 97 116 104 10 9 32 32 32 32 32 115 116 121 108 101 61 34 111 112 97 99 105 116 121 58 49 59 102 105 108 108 58 35 51 48 55 97 101 54 59 102 105 108 108 45 111 112 97 99 105 116 121 58 49 59 102 105 108 108 45 114 117 108 101 58 101 118 101 110 111 100 100 59 115 116 114 111 107 101 58 35 48 48 48 48 48 48 59 115 116 114 111 107 101 45 119 105 100 116 104 58 51 46 57 57 57 57 57 57 53 50 59 115 116 114 111 107 101 45 109 105 116 101 114 108 105 109 105 116 58 52 46 51 48 48 48 48 48 49 57 59 115 116 114 111 107 101 45 100 97 115 104 97 114 114 97 121 58 110 111 110 101 59 115 116 114 111 107 101 45 100 97 115 104 111 102 102 115 101 116 58 48 59 115 116 114 111 107 101 45 111 112 97 99 105 116 121 58 49 34 10 9 32 32 32 32 32 100 61 34 77 32 57 48 46 54 56 44 50 46 48 48 48 48 48 48 56 32 76 32 50 46 48 44 50 46 48 32 76 32 50 46 48 44 57 56 46 48 32 76 32 50 46 54 56 57 57 57 57 56 44 57 55 46 57 57 57 57 55 50 32 67 32 51 46 52 55 51 49 53 56 50 44 57 55 46 54 53 51 55 57 54 32 51 46 51 51 56 55 53 56 50 44 57 55 46 54 56 57 52 49 50 32 52 46 49 56 57 57 57 57 56 44 57 55 46 51 48 57 57 50 52 32 67 32 55 46 54 56 53 50 48 54 51 44 57 53 46 55 53 50 48 51 54 32 49 49 46 55 51 48 48 55 44 57 51 46 57 48 50 57 56 32 49 54 46 48 52 44 57 49 46 56 52 57 57 50 52 32 67 32 50 48 46 51 52 57 57 50 57 44 56 57 46 55 57 54 57 54 52 32 50 52 46 57 50 49 49 53 50 44 56 55 46 53 52 50 50 49 50 32 50 57 46 53 49 44 56 53 46 48 57 57 57 55 50 32 67 32 51 52 46 48 57 56 56 52 56 44 56 50 46 54 53 55 54 56 52 32 51 56 46 55 48 56 48 54 55 44 56 48 46 48 50 53 54 53 50 32 52 51 46 48 52 44 55 55 46 51 48 48 48 50 32 67 32 52 53 46 50 48 53 57 55 49 44 55 53 46 57 51 55 49 48 56 32 52 55 46 51 48 56 55 50 54 44 55 52 46 53 52 51 56 54 32 52 57 46 51 49 44 55 51 46 49 50 57 57 55 50 32 67 32 53 49 46 51 49 49 50 55 51 44 55 49 46 55 49 54 49 56 32 53 51 46 50 49 48 51 57 51 44 55 48 46 50 57 49 54 51 54 32 53 52 46 57 56 44 54 56 46 56 52 48 48 50 32 67 32 53 54 46 55 52 57 54 48 54 44 54 55 46 51 56 56 52 48 52 32 53 56 46 51 54 57 48 52 44 54 53 46 57 51 54 49 49 54 32 53 57 46 56 52 44 54 52 46 52 54 48 48 50 32 67 32 54 49 46 51 49 48 57 54 44 54 50 46 57 56 51 56 50 56 32 54 50 46 54 51 52 54 54 53 44 54 49 46 52 55 55 52 57 50 32 54 51 46 55 52 44 53 57 46 57 56 57 57 55 50 32 67 32 54 52 46 56 52 53 51 51 52 44 53 56 46 53 48 50 53 52 56 32 54 53 46 55 51 55 50 54 49 44 53 55 46 48 48 53 53 50 52 32 54 54 46 52 49 44 53 53 46 53 50 48 48 50 32 67 32 54 55 46 48 56 50 55 51 57 44 53 52 46 48 51 52 52 50 32 54 55 46 53 50 54 56 52 53 44 53 50 46 53 56 48 52 48 52 32 54 55 46 55 44 53 49 46 49 48 57 57 55 50 32 67 32 54 55 46 56 48 56 48 55 55 44 53 48 46 49 57 50 51 48 56 32 54 55 46 56 48 53 49 54 56 44 52 57 46 51 48 48 54 55 57 32 54 55 46 55 51 44 52 56 46 52 55 48 48 48 49 32 67 32 54 55 46 54 53 52 56 51 50 44 52 55 46 54 51 57 51 50 50 32 54 55 46 53 49 52 48 50 57 44 52 54 46 56 53 53 48 48 50 32 54 55 46 50 56 44 52 54 46 49 48 48 48 48 49 32 67 32 54 54 46 56 49 49 57 53 50 44 52 52 46 53 56 57 57 57 56 32 54 54 46 48 52 55 49 54 56 44 52 51 46 50 51 53 51 49 51 32 54 53 46 48 57 44 52 49 46 57 54 48 48 48 49 32 67 32 54 52 46 49 51 50 56 51 50 44 52 48 46 54 56 52 54 56 57 32 54 50 46 57 56 49 50 49 54 44 51 57 46 52 57 49 51 52 50 32 54 49 46 55 51 44 51 56 46 51 54 48 48 48 49 32 67 32 54 48 46 52 55 56 55 56 52 44 51 55 46 50 50 56 54 54 32 53 57 46 49 50 48 49 57 50 44 51 54 46 49 51 56 48 57 32 53 55 46 55 55 44 51 53 46 48 54 48 48 48 49 32 67 32 53 54 46 52 49 57 56 48 56 44 51 51 46 57 56 49 57 49 49 32 53 53 46 48 54 52 48 57 54 44 51 50 46 57 48 53 53 53 32 53 51 46 56 49 44 51 49 46 55 57 48 48 48 49 32 67 32 53 50 46 53 53 53 57 48 52 44 51 48 46 54 55 52 52 53 50 32 53 49 46 52 49 50 57 50 56 44 50 57 46 53 50 51 55 50 57 32 53 48 46 52 53 44 50 56 46 50 56 48 48 48 49 32 67 32 52 57 46 52 56 55 48 55 50 44 50 55 46 48 51 54 50 55 51 32 52 56 46 55 48 54 54 55 56 44 50 53 46 55 50 50 54 50 56 32 52 56 46 50 51 44 50 52 46 50 54 48 48 48 49 32 67 32 52 55 46 57 57 49 54 54 49 44 50 51 46 53 50 56 54 57 50 32 52 55 46 56 51 48 50 48 56 44 50 50 46 55 53 51 48 53 32 52 55 46 55 53 44 50 49 46 57 53 48 48 48 49 32 67 32 52 55 46 54 54 57 55 57 50 44 50 49 46 49 52 54 57 53 49 32 52 55 46 54 55 55 54 56 51 44 50 48 46 51 49 54 49 49 57 32 52 55 46 55 56 44 49 57 46 52 51 48 48 48 49 32 67 32 52 55 46 57 48 57 51 53 44 49 56 46 51 48 57 55 55 55 32 52 56 46 50 49 53 48 51 51 44 49 55 46 50 53 56 52 53 50 32 52 56 46 54 56 44 49 54 46 50 56 48 48 48 49 32 67 32 52 57 46 49 52 52 57 54 54 44 49 53 46 51 48 49 53 53 32 52 57 46 55 55 57 51 52 52 44 49 52 46 51 57 55 51 56 51 32 53 48 46 53 52 44 49 51 46 53 53 48 48 48 49 32 67 32 53 49 46 51 48 48 54 53 54 44 49 50 46 55 48 50 54 49 56 32 53 50 46 49 57 51 54 44 49 49 46 57 48 55 48 49 56 32 53 51 46 50 49 44 49 49 46 49 56 48 48 48 49 32 67 32 53 52 46 50 50 54 52 44 49 48 46 52 53 50 57 56 51 32 53 53 46 51 54 55 56 48 49 44 57 46 55 56 55 51 54 55 50 32 53 54 46 54 44 57 46 49 55 48 48 48 48 56 32 67 32 53 57 46 48 54 52 51 57 55 44 55 46 57 51 53 50 55 55 54 32 54 49 46 57 49 50 48 50 53 44 54 46 57 49 48 51 52 51 50 32 54 53 44 54 46 48 53 48 48 48 48 56 32 67 32 54 56 46 48 56 55 57 55 52 44 53 46 49 56 57 54 53 56 52 32 55 49 46 52 49 55 57 53 53 44 52 46 52 57 49 54 48 52 32 55 52 46 56 49 44 51 46 57 50 48 48 48 48 56 32 67 32 55 56 46 50 48 50 48 52 53 44 51 46 51 52 56 51 57 55 54 32 56 49 46 54 54 51 52 49 49 44 50 46 57 48 56 53 49 54 32 56 53 46 48 52 44 50 46 53 52 48 48 48 48 56 32 67 32 56 55 46 48 48 53 50 55 51 44 50 46 51 50 53 53 49 55 54 32 56 56 46 56 48 53 53 55 49 44 50 46 49 54 56 54 52 52 32 57 48 46 54 56 44 50 46 48 48 48 48 48 48 56 32 122 32 34 10 9 32 32 32 32 32 105 100 61 34 112 97 116 104 50 49 57 54 34 32 47 62 10 9 60 112 97 116 104 10 9 32 32 32 32 32 115 116 121 108 101 61 34 111 112 97 99 105 116 121 58 49 59 102 105 108 108 58 35 102 102 102 102 48 48 59 102 105 108 108 45 111 112 97 99 105 116 121 58 49 59 102 105 108 108 45 114 117 108 101 58 101 118 101 110 111 100 100 59 115 116 114 111 107 101 58 35 48 48 48 48 48 48 59 115 116 114 111 107 101 45 119 105 100 116 104 58 51 46 57 57 57 57 57 57 53 50 59 115 116 114 111 107 101 45 109 105 116 101 114 108 105 109 105 116 58 52 46 51 48 48 48 48 48 49 57 59 115 116 114 111 107 101 45 100 97 115 104 97 114 114 97 121 58 110 111 110 101 59 115 116 114 111 107 101 45 100 97 115 104 111 102 102 115 101 116 58 48 59 115 116 114 111 107 101 45 111 112 97 99 105 116 121 58 49 34 10 9 32 32 32 32 32 100 61 34 77 32 57 48 46 54 56 44 50 46 48 48 48 48 48 48 56 32 67 32 56 56 46 56 48 53 53 55 49 44 50 46 49 54 56 54 52 52 32 56 55 46 48 48 53 50 55 51 44 50 46 51 50 53 53 49 55 54 32 56 53 46 48 52 44 50 46 53 52 48 48 48 48 56 32 67 32 56 49 46 54 54 51 52 49 49 44 50 46 57 48 56 53 49 54 32 55 56 46 50 48 50 48 52 53 44 51 46 51 52 56 51 57 55 54 32 55 52 46 56 49 44 51 46 57 50 48 48 48 48 56 32 67 32 55 49 46 52 49 55 57 53 53 44 52 46 52 57 49 54 48 52 32 54 56 46 48 56 55 57 55 52 44 53 46 49 56 57 54 53 56 52 32 54 53 44 54 46 48 53 48 48 48 48 56 32 67 32 54 49 46 57 49 50 48 50 53 44 54 46 57 49 48 51 52 51 50 32 53 57 46 48 54 52 51 57 55 44 55 46 57 51 53 50 55 55 54 32 53 54 46 54 44 57 46 49 55 48 48 48 48 56 32 67 32 53 53 46 51 54 55 56 48 49 44 57 46 55 56 55 51 54 55 50 32 53 52 46 50 50 54 52 44 49 48 46 52 53 50 57 56 51 32 53 51 46 50 49 44 49 49 46 49 56 48 48 48 49 32 67 32 53 50 46 49 57 51 54 44 49 49 46 57 48 55 48 49 56 32 53 49 46 51 48 48 54 53 54 44 49 50 46 55 48 50 54 49 56 32 53 48 46 53 52 44 49 51 46 53 53 48 48 48 49 32 67 32 52 57 46 55 55 57 51 52 52 44 49 52 46 51 57 55 51 56 51 32 52 57 46 49 52 52 57 54 54 44 49 53 46 51 48 49 53 53 32 52 56 46 54 56 44 49 54 46 50 56 48 48 48 49 32 67 32 52 56 46 50 49 53 48 51 51 44 49 55 46 50 53 56 52 53 50 32 52 55 46 57 48 57 51 53 44 49 56 46 51 48 57 55 55 55 32 52 55 46 55 56 44 49 57 46 52 51 48 48 48 49 32 67 32 52 55 46 54 55 55 54 56 51 44 50 48 46 51 49 54 49 49 57 32 52 55 46 54 54 57 55 57 50 44 50 49 46 49 52 54 57 53 49 32 52 55 46 55 53 44 50 49 46 57 53 48 48 48 49 32 67 32 52 55 46 56 51 48 50 48 56 44 50 50 46 55 53 51 48 53 32 52 55 46 57 57 49 54 54 49 44 50 51 46 53 50 56 54 57 50 32 52 56 46 50 51 44 50 52 46 50 54 48 48 48 49 32 67 32 52 56 46 55 48 54 54 55 56 44 50 53 46 55 50 50 54 50 56 32 52 57 46 52 56 55 48 55 50 44 50 55 46 48 51 54 50 55 51 32 53 48 46 52 53 44 50 56 46 50 56 48 48 48 49 32 67 32 53 49 46 52 49 50 57 50 56 44 50 57 46 53 50 51 55 50 57 32 53 50 46 53 53 53 57 48 52 44 51 48 46 54 55 52 52 53 50 32 53 51 46 56 49 44 51 49 46 55 57 48 48 48 49 32 67 32 53 53 46 48 54 52 48 57 54 44 51 50 46 57 48 53 53 53 32 53 54 46 52 49 57 56 48 56 44 51 51 46 57 56 49 57 49 49 32 53 55 46 55 55 44 51 53 46 48 54 48 48 48 49 32 67 32 53 57 46 49 50 48 49 57 50 44 51 54 46 49 51 56 48 57 32 54 48 46 52 55 56 55 56 52 44 51 55 46 50 50 56 54 54 32 54 49 46 55 51 44 51 56 46 51 54 48 48 48 49 32 67 32 54 50 46 57 56 49 50 49 54 44 51 57 46 52 57 49 51 52 50 32 54 52 46 49 51 50 56 51 50 44 52 48 46 54 56 52 54 56 57 32 54 53 46 48 57 44 52 49 46 57 54 48 48 48 49 32 67 32 54 54 46 48 52 55 49 54 56 44 52 51 46 50 51 53 51 49 51 32 54 54 46 56 49 49 57 53 50 44 52 52 46 53 56 57 57 57 56 32 54 55 46 50 56 44 52 54 46 49 48 48 48 48 49 32 67 32 54 55 46 53 49 52 48 50 57 44 52 54 46 56 53 53 48 48 50 32 54 55 46 54 53 52 56 51 50 44 52 55 46 54 51 57 51 50 50 32 54 55 46 55 51 44 52 56 46 52 55 48 48 48 49 32 67 32 54 55 46 56 48 53 49 54 56 44 52 57 46 51 48 48 54 55 57 32 54 55 46 56 48 56 48 55 55 44 53 48 46 49 57 50 51 48 56 32 54 55 46 55 44 53 49 46 49 48 57 57 55 50 32 67 32 54 55 46 53 50 54 56 52 53 44 53 50 46 53 56 48 52 48 52 32 54 55 46 48 56 50 55 51 57 44 53 52 46 48 51 52 52 50 32 54 54 46 52 49 44 53 53 46 53 50 48 48 50 32 67 32 54 53 46 55 51 55 50 54 49 44 53 55 46 48 48 53 53 50 52 32 54 52 46 56 52 53 51 51 52 44 53 56 46 53 48 50 53 52 56 32 54 51 46 55 52 44 53 57 46 57 56 57 57 55 50 32 67 32 54 50 46 54 51 52 54 54 53 44 54 49 46 52 55 55 52 57 50 32 54 49 46 51 49 48 57 54 44 54 50 46 57 56 51 56 50 56 32 53 57 46 56 52 44 54 52 46 52 54 48 48 50 32 67 32 53 56 46 51 54 57 48 52 44 54 53 46 57 51 54 49 49 54 32 53 54 46 55 52 57 54 48 54 44 54 55 46 51 56 56 52 48 52 32 53 52 46 57 56 44 54 56 46 56 52 48 48 50 32 67 32 53 51 46 50 49 48 51 57 51 44 55 48 46 50 57 49 54 51 54 32 53 49 46 51 49 49 50 55 51 44 55 49 46 55 49 54 49 56 32 52 57 46 51 49 44 55 51 46 49 50 57 57 55 50 32 67 32 52 55 46 51 48 56 55 50 54 44 55 52 46 53 52 51 56 54 32 52 53 46 50 48 53 57 55 49 44 55 53 46 57 51 55 49 48 56 32 52 51 46 48 52 44 55 55 46 51 48 48 48 50 32 67 32 51 56 46 55 48 56 48 54 55 44 56 48 46 48 50 53 54 53 50 32 51 52 46 48 57 56 56 52 56 44 56 50 46 54 53 55 54 56 52 32 50 57 46 53 49 44 56 53 46 48 57 57 57 55 50 32 67 32 50 52 46 57 50 49 49 53 50 44 56 55 46 53 52 50 50 49 50 32 50 48 46 51 52 57 57 50 57 44 56 57 46 55 57 54 57 54 52 32 49 54 46 48 52 44 57 49 46 56 52 57 57 50 52 32 67 32 49 49 46 55 51 48 48 55 44 57 51 46 57 48 50 57 56 32 55 46 54 56 53 50 48 54 51 44 57 53 46 55 53 50 48 51 54 32 52 46 49 56 57 57 57 57 56 44 57 55 46 51 48 57 57 50 52 32 67 32 51 46 51 51 56 55 53 56 50 44 57 55 46 54 56 57 52 49 50 32 51 46 52 55 51 49 53 56 50 44 57 55 46 54 53 51 55 57 54 32 50 46 54 56 57 57 57 57 56 44 57 55 46 57 57 57 57 55 50 32 76 32 57 55 46 57 57 57 57 57 44 57 55 46 57 57 57 57 55 50 32 76 32 57 55 46 57 57 57 57 57 44 50 46 48 48 48 48 48 48 56 32 76 32 57 48 46 54 56 44 50 46 48 48 48 48 48 48 56 32 122 32 34 10 9 32 32 32 32 32 105 100 61 34 114 101 99 116 49 51 49 56 34 32 47 62 10 60 47 115 118 103 62 10) asByteArray ].
	^ xxxCache at: 1</body>

<body package="ShoreComponents-Libraries" selector="minusGif">minusGif
	| xxxCache |
	xxxCache := #(nil) beMutable.
	(xxxCache at: 1) isNil ifTrue: [
		xxxCache at: 1 put: #(71 73 70 56 57 97 12 0 12 0 198 90 0 26 26 26 32 32 32 40 40 40 44 44 44 45 45 45 48 48 48 50 50 50 51 51 51 52 52 52 58 58 58 59 59 59 60 60 60 66 66 66 67 67 67 71 71 71 72 72 72 73 73 73 77 77 77 79 79 79 80 80 80 83 83 83 84 84 84 85 85 85 88 88 88 89 89 89 91 91 91 92 92 92 95 95 95 96 96 96 97 97 97 101 101 101 105 105 105 106 106 106 109 109 109 120 120 120 126 126 126 130 130 130 133 133 133 135 135 135 136 136 136 138 138 138 143 143 143 145 145 145 150 150 150 154 154 154 156 156 156 163 163 163 164 164 164 166 166 166 168 168 168 169 169 169 173 173 173 174 174 174 176 176 176 177 177 177 179 179 179 182 182 182 185 185 185 186 186 186 187 187 187 188 188 188 193 193 193 195 195 195 196 196 196 198 198 198 200 200 200 201 201 201 203 203 203 204 204 204 208 208 208 209 209 209 210 210 210 211 211 211 213 213 213 214 214 214 216 216 216 217 217 217 218 218 218 222 222 222 223 223 223 224 224 224 232 232 232 236 236 236 238 238 238 239 239 239 247 247 247 248 248 248 249 249 249 250 250 250 253 253 253 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 33 254 21 67 114 101 97 116 101 100 32 119 105 116 104 32 84 104 101 32 71 73 77 80 0 33 249 4 1 10 0 127 0 44 0 0 0 0 12 0 12 0 0 7 128 128 127 130 127 56 52 46 45 131 131 61 74 80 78 73 64 52 41 131 60 77 83 86 85 82 75 58 42 31 130 68 81 87 89 88 84 74 51 35 25 127 54 71 79 64 72 73 65 52 39 30 21 15 53 70 59 5 20 26 22 16 11 23 18 13 48 65 67 40 47 49 44 37 32 28 14 8 43 55 66 69 77 76 63 47 35 24 9 4 127 43 50 57 62 62 54 37 26 12 217 127 33 34 36 40 42 38 29 8 2 1 131 17 20 19 27 26 14 3 0 137 130 7 10 10 6 137 129 0 59) asByteArray ].
	^ xxxCache at: 1</body>

<body package="ShoreComponents-Libraries" selector="numberedListImagePng">numberedListImagePng
	| xxxCache |
	xxxCache := #(nil) beMutable.
	(xxxCache at: 1) isNil ifTrue: [
		xxxCache at: 1 put: #(137 80 78 71 13 10 26 10 0 0 0 13 73 72 68 82 0 0 0 25 0 0 0 24 8 6 0 0 0 15 181 86 198 0 0 0 76 73 68 65 84 120 94 99 248 255 159 246 128 225 255 200 183 100 72 89 194 192 208 64 91 75 64 22 160 91 194 192 192 72 16 15 94 159 80 195 162 129 141 120 106 249 130 40 159 32 91 52 242 35 126 112 68 60 205 125 66 151 28 79 173 200 31 28 249 100 228 91 50 60 45 1 0 162 34 210 68 146 190 176 39 0 0 0 0 73 69 78 68 174 66 96 130) asByteArray ].
	^ xxxCache at: 1</body>

<body package="ShoreComponents-Libraries" selector="outdentImagePng">outdentImagePng
	| xxxCache |
	xxxCache := #(nil) beMutable.
	(xxxCache at: 1) isNil ifTrue: [
		xxxCache at: 1 put: #(137 80 78 71 13 10 26 10 0 0 0 13 73 72 68 82 0 0 0 25 0 0 0 24 8 6 0 0 0 15 181 86 198 0 0 0 76 73 68 65 84 120 94 99 248 255 159 246 128 225 255 200 183 132 86 150 48 48 48 14 65 159 128 92 141 140 177 137 97 195 131 209 39 13 4 125 71 145 79 64 22 208 212 18 152 5 200 152 38 193 69 170 79 232 18 39 35 63 159 12 188 79 70 126 41 60 242 107 198 17 102 9 0 172 73 124 186 216 240 55 190 0 0 0 0 73 69 78 68 174 66 96 130) asByteArray ].
	^ xxxCache at: 1</body>

<body package="ShoreComponents-Libraries" selector="plusGif">plusGif
	| xxxCache |
	xxxCache := #(nil) beMutable.
	(xxxCache at: 1) isNil ifTrue: [
		xxxCache at: 1 put: #(71 73 70 56 57 97 12 0 12 0 198 93 0 26 26 26 32 32 32 40 40 40 44 44 44 45 45 45 48 48 48 50 50 50 51 51 51 52 52 52 58 58 58 59 59 59 60 60 60 66 66 66 67 67 67 71 71 71 72 72 72 75 75 75 77 77 77 79 79 79 80 80 80 81 81 81 83 83 83 84 84 84 88 88 88 89 89 89 91 91 91 92 92 92 95 95 95 96 96 96 98 98 98 101 101 101 102 102 102 103 103 103 105 105 105 106 106 106 109 109 109 112 112 112 114 114 114 119 119 119 120 120 120 121 121 121 123 123 123 124 124 124 126 126 126 130 130 130 132 132 132 133 133 133 135 135 135 136 136 136 138 138 138 143 143 143 145 145 145 149 149 149 150 150 150 156 156 156 158 158 158 162 162 162 163 163 163 166 166 166 169 169 169 173 173 173 174 174 174 175 175 175 176 176 176 177 177 177 179 179 179 180 180 180 182 182 182 183 183 183 185 185 185 186 186 186 187 187 187 188 188 188 190 190 190 191 191 191 193 193 193 198 198 198 200 200 200 201 201 201 203 203 203 204 204 204 208 208 208 209 209 209 210 210 210 214 214 214 218 218 218 219 219 219 222 222 222 223 223 223 227 227 227 232 232 232 238 238 238 249 249 249 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 33 254 21 67 114 101 97 116 101 100 32 119 105 116 104 32 84 104 101 32 71 73 77 80 0 33 249 4 1 10 0 127 0 44 0 0 0 0 12 0 12 0 0 7 128 128 127 130 127 67 62 57 54 131 131 75 84 86 78 68 73 61 50 131 72 85 91 87 56 29 71 70 51 33 130 80 90 92 89 45 38 74 60 43 25 127 64 83 88 76 74 36 33 55 48 30 22 15 63 82 71 5 16 5 4 12 11 23 18 13 58 77 79 49 52 23 20 40 34 28 14 8 53 65 78 81 76 37 32 52 43 24 9 4 127 53 59 69 66 36 31 41 26 12 217 127 35 39 44 47 46 42 27 8 2 1 131 17 21 19 27 26 14 3 0 137 130 7 10 10 6 137 129 0 59) asByteArray ].
	^ xxxCache at: 1</body>

<body package="ShoreComponents-Libraries" selector="rightJustifyImagePng">rightJustifyImagePng
	| xxxCache |
	xxxCache := #(nil) beMutable.
	(xxxCache at: 1) isNil ifTrue: [
		xxxCache at: 1 put: #(137 80 78 71 13 10 26 10 0 0 0 13 73 72 68 82 0 0 0 25 0 0 0 24 8 6 0 0 0 15 181 86 198 0 0 0 50 73 68 65 84 120 94 99 248 255 159 246 128 225 255 200 183 100 228 91 130 34 193 192 72 22 30 252 193 53 116 125 50 242 227 100 228 199 201 200 143 147 145 111 201 200 183 132 14 0 0 189 22 128 57 37 224 16 167 0 0 0 0 73 69 78 68 174 66 96 130) asByteArray ].
	^ xxxCache at: 1</body>

<body package="ShoreComponents-Libraries" selector="ruleImagePng">ruleImagePng
	| xxxCache |
	xxxCache := #(nil) beMutable.
	(xxxCache at: 1) isNil ifTrue: [
		xxxCache at: 1 put: #(137 80 78 71 13 10 26 10 0 0 0 13 73 72 68 82 0 0 0 25 0 0 0 24 8 6 0 0 0 15 181 86 198 0 0 0 53 73 68 65 84 120 94 99 248 255 159 246 128 225 255 200 183 100 228 91 50 242 45 25 225 150 24 27 27 147 141 137 182 100 230 204 153 100 227 145 31 241 35 223 146 145 111 201 200 183 132 14 0 0 98 114 33 94 46 151 82 73 0 0 0 0 73 69 78 68 174 66 96 130) asByteArray ].
	^ xxxCache at: 1</body>

<body package="ShoreComponents-Libraries" selector="spinnerGif">spinnerGif
	| xxxCache |
	xxxCache := #(nil) beMutable.
	(xxxCache at: 1) isNil ifTrue: [
		xxxCache at: 1 put: #(71 73 70 56 57 97 16 0 16 0 230 0 0 255 255 255 254 254 254 163 163 163 253 253 253 233 233 233 181 181 181 249 249 249 250 250 250 245 245 245 252 252 252 171 171 171 237 237 237 192 192 192 177 177 177 199 199 199 229 229 229 244 244 244 180 180 180 247 247 247 193 193 193 207 207 207 230 230 230 3 3 3 228 228 228 223 223 223 196 196 196 238 238 238 154 154 154 194 194 194 212 212 212 226 226 226 60 60 60 168 168 168 176 176 176 242 242 242 173 173 173 178 178 178 219 219 219 170 170 170 217 217 217 215 215 215 187 187 187 38 38 38 205 205 205 216 216 216 185 185 185 158 158 158 203 203 203 174 174 174 251 251 251 236 236 236 82 82 82 234 234 234 133 133 133 246 246 246 74 74 74 220 220 220 12 12 12 209 209 209 164 164 164 41 41 41 231 231 231 93 93 93 189 189 189 167 167 167 204 204 204 183 183 183 241 241 241 208 208 208 89 89 89 102 102 102 202 202 202 166 166 166 240 240 240 224 224 224 184 184 184 191 191 191 232 232 232 243 243 243 200 200 200 122 122 122 165 165 165 190 190 190 78 78 78 195 195 195 198 198 198 197 197 197 20 20 20 106 106 106 221 221 221 248 248 248 214 214 214 186 186 186 188 188 188 144 144 144 110 110 110 28 28 28 222 222 222 150 150 150 130 130 130 140 140 140 137 137 137 97 97 97 116 116 116 84 84 84 135 135 135 147 147 147 70 70 70 142 142 142 87 87 87 127 127 127 50 50 50 119 119 119 218 218 218 124 124 124 54 54 54 113 113 113 65 65 65 108 108 108 148 148 148 120 120 120 161 161 161 162 162 162 45 45 45 35 35 35 128 128 128 210 210 210 172 172 172 33 255 11 78 69 84 83 67 65 80 69 50 46 48 3 1 0 0 0 33 249 4 4 5 0 0 0 44 0 0 0 0 16 0 16 0 0 7 200 128 0 130 0 3 130 45 104 9 131 138 130 21 95 29 0 27 87 9 7 45 37 139 0 77 111 62 0 106 96 0 20 2 61 138 21 4 0 17 60 63 101 124 43 59 47 0 7 4 1 3 99 69 63 8 62 94 58 5 81 33 54 21 17 32 18 0 24 53 51 112 54 90 130 147 79 2 5 23 138 47 81 133 138 29 44 131 41 59 81 32 30 151 16 14 19 12 71 64 108 94 98 97 151 34 45 36 13 82 131 23 58 1 139 24 207 131 18 25 27 127 49 139 63 2 84 34 0 1 150 8 8 226 173 3 132 33 74 186 32 96 1 196 132 1 0 37 42 0 32 32 224 196 139 2 15 4 108 1 144 228 196 52 0 6 72 68 8 144 97 4 0 43 81 52 92 34 160 224 1 0 14 10 2 32 128 129 226 82 0 97 0 86 164 136 103 32 145 160 64 0 33 249 4 4 5 0 0 0 44 0 0 0 0 13 0 11 0 0 7 111 128 0 130 0 3 130 27 116 133 131 130 23 112 56 0 95 115 3 90 55 76 131 50 62 110 0 103 31 0 119 22 14 0 15 26 0 28 104 28 80 55 39 22 116 132 98 99 65 18 114 46 58 12 32 42 50 21 0 21 2 114 98 18 7 130 7 34 75 2 131 91 92 1 138 0 29 44 65 63 66 5 61 202 0 16 14 19 13 13 5 77 211 34 45 131 11 97 201 138 24 23 0 6 20 72 33 49 202 63 2 129 0 33 249 4 4 5 0 0 0 44 0 0 0 0 16 0 8 0 0 7 100 128 0 130 0 3 130 10 100 133 131 138 0 61 98 15 0 101 102 3 78 62 93 139 0 73 99 46 0 108 70 156 60 84 138 4 78 0 68 80 29 27 88 40 60 53 0 6 89 1 3 17 32 113 6 27 92 24 65 13 107 50 29 69 57 26 0 26 12 2 17 6 49 130 9 16 114 22 111 5 1 131 23 68 208 138 105 119 131 43 12 19 85 11 151 77 27 76 12 71 129 0 33 249 4 4 5 0 0 0 44 3 0 0 0 13 0 10 0 0 7 103 128 0 1 0 0 82 64 3 132 137 0 50 5 4 0 72 105 3 8 99 68 137 8 38 5 0 32 101 0 2 83 58 138 24 122 40 35 100 56 51 46 0 16 24 1 56 7 92 84 23 40 76 118 50 86 83 117 54 2 66 49 9 132 9 8 110 60 51 63 1 23 68 131 138 27 64 137 85 11 138 132 23 105 100 98 48 5 77 208 0 56 31 60 42 83 11 97 201 137 33 93 137 129 0 33 249 4 4 5 0 0 0 44 5 0 0 0 11 0 14 0 0 7 121 128 0 0 58 76 1 130 135 0 11 0 28 38 1 18 46 29 135 41 0 25 64 0 45 80 56 135 2 30 14 121 23 114 5 0 54 30 1 92 20 50 56 65 94 73 20 95 62 54 49 9 130 3 90 98 51 103 65 1 134 136 35 162 136 136 77 99 95 88 100 192 0 30 69 55 107 95 188 135 36 14 135 49 136 1 55 124 121 138 14 29 16 67 44 70 23 119 87 109 90 2 39 47 5 15 122 82 0 91 27 9 17 1 25 35 0 86 81 138 130 129 0 33 249 4 4 5 0 0 0 44 8 0 1 0 8 0 15 0 0 7 98 128 10 1 7 45 37 0 135 35 0 20 2 21 135 0 33 50 59 47 0 90 23 1 15 89 33 78 113 106 99 54 0 3 6 35 80 98 44 142 0 28 79 167 135 11 27 101 53 46 142 61 80 95 118 101 142 5 86 171 1 102 42 103 74 0 23 38 109 4 2 111 111 54 100 75 22 5 0 113 36 3 137 62 124 4 142 130 23 96 205 135 41 1 0 34 9 142 129 0 33 249 4 4 5 0 0 0 44 6 0 2 0 10 0 14 0 0 7 109 128 0 25 35 0 20 2 61 0 137 30 14 33 50 59 47 0 7 4 1 20 50 15 89 33 54 21 17 32 18 9 137 3 7 79 2 33 24 137 167 0 71 144 168 167 26 35 72 59 5 172 50 27 94 94 72 172 28 43 172 137 1 99 51 100 15 0 59 74 113 66 102 4 5 69 102 90 33 95 109 14 42 46 0 30 71 3 3 62 83 0 103 60 40 168 104 83 1 21 107 82 168 80 112 3 0 158 167 129 0 33 249 4 4 5 0 0 0 44 3 0 5 0 13 0 11 0 0 7 114 128 2 66 49 9 0 0 3 7 79 2 5 23 0 23 68 1 134 146 29 44 146 85 11 146 146 16 14 19 12 71 5 77 153 134 26 38 10 33 82 11 44 145 153 68 40 146 72 109 8 153 1 122 80 32 50 0 45 30 70 98 23 24 25 110 26 71 125 53 90 0 19 96 17 99 104 43 51 33 0 4 68 3 26 60 112 3 103 117 0 106 51 97 150 31 56 0 95 115 3 50 70 85 146 3 178 0 94 88 133 90 133 134 129 0 33 249 4 4 5 0 0 0 44 0 0 8 0 16 0 8 0 0 7 101 128 19 13 13 64 40 0 135 136 34 45 36 13 82 136 20 2 3 136 135 24 23 147 67 80 57 123 54 147 0 41 2 84 34 0 9 31 57 27 4 80 27 52 61 29 27 34 40 64 38 6 0 75 89 0 71 42 10 27 103 39 80 28 0 73 39 146 135 67 55 83 3 94 102 0 35 114 21 157 0 29 115 19 0 100 62 1 73 101 47 207 1 16 135 59 99 146 90 9 136 129 0 33 249 4 4 5 0 0 0 44 0 0 6 0 13 0 10 0 0 7 100 128 0 130 86 27 3 130 135 29 44 80 51 51 102 65 135 135 16 14 125 69 109 69 25 144 130 34 45 135 44 36 134 144 24 23 0 67 100 123 117 18 153 63 2 3 70 124 101 61 98 127 11 50 40 93 8 44 0 71 152 29 51 75 33 106 37 121 91 144 16 95 116 1 32 101 0 63 81 26 135 23 70 43 0 72 53 1 34 48 40 135 1 169 0 41 46 134 6 9 129 0 33 249 4 4 5 0 0 0 44 0 0 3 0 11 0 13 0 0 7 114 128 0 79 24 0 58 2 30 14 33 50 59 3 62 87 46 34 88 25 50 15 89 33 0 77 108 124 115 78 49 0 0 3 7 159 0 14 100 3 163 159 94 88 95 112 29 168 159 120 107 55 104 71 175 168 37 12 167 175 16 72 109 70 6 175 3 110 83 46 11 13 12 67 67 74 93 0 20 20 0 24 80 14 76 5 15 2 163 54 94 106 1 63 35 0 86 163 15 53 39 0 19 10 1 8 163 1 18 159 43 41 1 0 129 0 33 249 4 4 5 0 0 0 44 0 0 0 0 8 0 15 0 0 7 97 128 0 130 0 9 130 58 131 56 111 135 28 131 67 124 117 0 25 0 40 30 0 85 22 33 13 3 51 115 10 8 104 80 39 147 88 42 104 8 7 131 0 28 94 3 130 59 101 100 106 37 131 100 88 88 103 40 169 130 23 68 1 131 18 41 110 101 168 0 3 27 80 5 73 25 29 16 0 126 113 0 61 2 39 47 131 6 36 17 1 146 130 4 10 15 170 129 0 59) asByteArray ].
	^ xxxCache at: 1</body>

<body package="ShoreComponents-Libraries" selector="spinnerPng">spinnerPng
	| xxxCache |
	xxxCache := #(nil) beMutable.
	(xxxCache at: 1) isNil ifTrue: [
		xxxCache at: 1 put: #(71 73 70 56 57 97 16 0 16 0 230 0 0 255 255 255 254 254 254 163 163 163 253 253 253 233 233 233 181 181 181 249 249 249 250 250 250 245 245 245 252 252 252 171 171 171 237 237 237 192 192 192 177 177 177 199 199 199 229 229 229 244 244 244 180 180 180 247 247 247 193 193 193 207 207 207 230 230 230 3 3 3 228 228 228 223 223 223 196 196 196 238 238 238 154 154 154 194 194 194 212 212 212 226 226 226 60 60 60 168 168 168 176 176 176 242 242 242 173 173 173 178 178 178 219 219 219 170 170 170 217 217 217 215 215 215 187 187 187 38 38 38 205 205 205 216 216 216 185 185 185 158 158 158 203 203 203 174 174 174 251 251 251 236 236 236 82 82 82 234 234 234 133 133 133 246 246 246 74 74 74 220 220 220 12 12 12 209 209 209 164 164 164 41 41 41 231 231 231 93 93 93 189 189 189 167 167 167 204 204 204 183 183 183 241 241 241 208 208 208 89 89 89 102 102 102 202 202 202 166 166 166 240 240 240 224 224 224 184 184 184 191 191 191 232 232 232 243 243 243 200 200 200 122 122 122 165 165 165 190 190 190 78 78 78 195 195 195 198 198 198 197 197 197 20 20 20 106 106 106 221 221 221 248 248 248 214 214 214 186 186 186 188 188 188 144 144 144 110 110 110 28 28 28 222 222 222 150 150 150 130 130 130 140 140 140 137 137 137 97 97 97 116 116 116 84 84 84 135 135 135 147 147 147 70 70 70 142 142 142 87 87 87 127 127 127 50 50 50 119 119 119 218 218 218 124 124 124 54 54 54 113 113 113 65 65 65 108 108 108 148 148 148 120 120 120 161 161 161 162 162 162 45 45 45 35 35 35 128 128 128 210 210 210 172 172 172 33 255 11 78 69 84 83 67 65 80 69 50 46 48 3 1 0 0 0 33 249 4 4 5 0 0 0 44 0 0 0 0 16 0 16 0 0 7 200 128 0 130 0 3 130 45 104 9 131 138 130 21 95 29 0 27 87 9 7 45 37 139 0 77 111 62 0 106 96 0 20 2 61 138 21 4 0 17 60 63 101 124 43 59 47 0 7 4 1 3 99 69 63 8 62 94 58 5 81 33 54 21 17 32 18 0 24 53 51 112 54 90 130 147 79 2 5 23 138 47 81 133 138 29 44 131 41 59 81 32 30 151 16 14 19 12 71 64 108 94 98 97 151 34 45 36 13 82 131 23 58 1 139 24 207 131 18 25 27 127 49 139 63 2 84 34 0 1 150 8 8 226 173 3 132 33 74 186 32 96 1 196 132 1 0 37 42 0 32 32 224 196 139 2 15 4 108 1 144 228 196 52 0 6 72 68 8 144 97 4 0 43 81 52 92 34 160 224 1 0 14 10 2 32 128 129 226 82 0 97 0 86 164 136 103 32 145 160 64 0 33 249 4 4 5 0 0 0 44 0 0 0 0 13 0 11 0 0 7 111 128 0 130 0 3 130 27 116 133 131 130 23 112 56 0 95 115 3 90 55 76 131 50 62 110 0 103 31 0 119 22 14 0 15 26 0 28 104 28 80 55 39 22 116 132 98 99 65 18 114 46 58 12 32 42 50 21 0 21 2 114 98 18 7 130 7 34 75 2 131 91 92 1 138 0 29 44 65 63 66 5 61 202 0 16 14 19 13 13 5 77 211 34 45 131 11 97 201 138 24 23 0 6 20 72 33 49 202 63 2 129 0 33 249 4 4 5 0 0 0 44 0 0 0 0 16 0 8 0 0 7 100 128 0 130 0 3 130 10 100 133 131 138 0 61 98 15 0 101 102 3 78 62 93 139 0 73 99 46 0 108 70 156 60 84 138 4 78 0 68 80 29 27 88 40 60 53 0 6 89 1 3 17 32 113 6 27 92 24 65 13 107 50 29 69 57 26 0 26 12 2 17 6 49 130 9 16 114 22 111 5 1 131 23 68 208 138 105 119 131 43 12 19 85 11 151 77 27 76 12 71 129 0 33 249 4 4 5 0 0 0 44 3 0 0 0 13 0 10 0 0 7 103 128 0 1 0 0 82 64 3 132 137 0 50 5 4 0 72 105 3 8 99 68 137 8 38 5 0 32 101 0 2 83 58 138 24 122 40 35 100 56 51 46 0 16 24 1 56 7 92 84 23 40 76 118 50 86 83 117 54 2 66 49 9 132 9 8 110 60 51 63 1 23 68 131 138 27 64 137 85 11 138 132 23 105 100 98 48 5 77 208 0 56 31 60 42 83 11 97 201 137 33 93 137 129 0 33 249 4 4 5 0 0 0 44 5 0 0 0 11 0 14 0 0 7 121 128 0 0 58 76 1 130 135 0 11 0 28 38 1 18 46 29 135 41 0 25 64 0 45 80 56 135 2 30 14 121 23 114 5 0 54 30 1 92 20 50 56 65 94 73 20 95 62 54 49 9 130 3 90 98 51 103 65 1 134 136 35 162 136 136 77 99 95 88 100 192 0 30 69 55 107 95 188 135 36 14 135 49 136 1 55 124 121 138 14 29 16 67 44 70 23 119 87 109 90 2 39 47 5 15 122 82 0 91 27 9 17 1 25 35 0 86 81 138 130 129 0 33 249 4 4 5 0 0 0 44 8 0 1 0 8 0 15 0 0 7 98 128 10 1 7 45 37 0 135 35 0 20 2 21 135 0 33 50 59 47 0 90 23 1 15 89 33 78 113 106 99 54 0 3 6 35 80 98 44 142 0 28 79 167 135 11 27 101 53 46 142 61 80 95 118 101 142 5 86 171 1 102 42 103 74 0 23 38 109 4 2 111 111 54 100 75 22 5 0 113 36 3 137 62 124 4 142 130 23 96 205 135 41 1 0 34 9 142 129 0 33 249 4 4 5 0 0 0 44 6 0 2 0 10 0 14 0 0 7 109 128 0 25 35 0 20 2 61 0 137 30 14 33 50 59 47 0 7 4 1 20 50 15 89 33 54 21 17 32 18 9 137 3 7 79 2 33 24 137 167 0 71 144 168 167 26 35 72 59 5 172 50 27 94 94 72 172 28 43 172 137 1 99 51 100 15 0 59 74 113 66 102 4 5 69 102 90 33 95 109 14 42 46 0 30 71 3 3 62 83 0 103 60 40 168 104 83 1 21 107 82 168 80 112 3 0 158 167 129 0 33 249 4 4 5 0 0 0 44 3 0 5 0 13 0 11 0 0 7 114 128 2 66 49 9 0 0 3 7 79 2 5 23 0 23 68 1 134 146 29 44 146 85 11 146 146 16 14 19 12 71 5 77 153 134 26 38 10 33 82 11 44 145 153 68 40 146 72 109 8 153 1 122 80 32 50 0 45 30 70 98 23 24 25 110 26 71 125 53 90 0 19 96 17 99 104 43 51 33 0 4 68 3 26 60 112 3 103 117 0 106 51 97 150 31 56 0 95 115 3 50 70 85 146 3 178 0 94 88 133 90 133 134 129 0 33 249 4 4 5 0 0 0 44 0 0 8 0 16 0 8 0 0 7 101 128 19 13 13 64 40 0 135 136 34 45 36 13 82 136 20 2 3 136 135 24 23 147 67 80 57 123 54 147 0 41 2 84 34 0 9 31 57 27 4 80 27 52 61 29 27 34 40 64 38 6 0 75 89 0 71 42 10 27 103 39 80 28 0 73 39 146 135 67 55 83 3 94 102 0 35 114 21 157 0 29 115 19 0 100 62 1 73 101 47 207 1 16 135 59 99 146 90 9 136 129 0 33 249 4 4 5 0 0 0 44 0 0 6 0 13 0 10 0 0 7 100 128 0 130 86 27 3 130 135 29 44 80 51 51 102 65 135 135 16 14 125 69 109 69 25 144 130 34 45 135 44 36 134 144 24 23 0 67 100 123 117 18 153 63 2 3 70 124 101 61 98 127 11 50 40 93 8 44 0 71 152 29 51 75 33 106 37 121 91 144 16 95 116 1 32 101 0 63 81 26 135 23 70 43 0 72 53 1 34 48 40 135 1 169 0 41 46 134 6 9 129 0 33 249 4 4 5 0 0 0 44 0 0 3 0 11 0 13 0 0 7 114 128 0 79 24 0 58 2 30 14 33 50 59 3 62 87 46 34 88 25 50 15 89 33 0 77 108 124 115 78 49 0 0 3 7 159 0 14 100 3 163 159 94 88 95 112 29 168 159 120 107 55 104 71 175 168 37 12 167 175 16 72 109 70 6 175 3 110 83 46 11 13 12 67 67 74 93 0 20 20 0 24 80 14 76 5 15 2 163 54 94 106 1 63 35 0 86 163 15 53 39 0 19 10 1 8 163 1 18 159 43 41 1 0 129 0 33 249 4 4 5 0 0 0 44 0 0 0 0 8 0 15 0 0 7 97 128 0 130 0 9 130 58 131 56 111 135 28 131 67 124 117 0 25 0 40 30 0 85 22 33 13 3 51 115 10 8 104 80 39 147 88 42 104 8 7 131 0 28 94 3 130 59 101 100 106 37 131 100 88 88 103 40 169 130 23 68 1 131 18 41 110 101 168 0 3 27 80 5 73 25 29 16 0 126 113 0 61 2 39 47 131 6 36 17 1 146 130 4 10 15 170 129 0 59) asByteArray ].
	^ xxxCache at: 1</body>

<body package="ShoreComponents-Libraries" selector="underlineImagePng">underlineImagePng
	| xxxCache |
	xxxCache := #(nil) beMutable.
	(xxxCache at: 1) isNil ifTrue: [
		xxxCache at: 1 put: #(137 80 78 71 13 10 26 10 0 0 0 13 73 72 68 82 0 0 0 25 0 0 0 24 8 6 0 0 0 15 181 86 198 0 0 0 74 73 68 65 84 120 94 99 248 255 159 246 128 225 255 200 183 100 228 91 130 85 1 3 35 10 198 37 70 177 79 176 25 70 172 5 35 223 146 145 111 9 113 150 52 52 52 128 249 32 154 234 150 96 203 27 196 90 48 120 115 60 57 62 26 249 165 240 200 183 100 136 91 2 0 160 218 190 231 161 115 6 101 0 0 0 0 73 69 78 68 174 66 96 130) asByteArray ].
	^ xxxCache at: 1</body>

<body package="ShoreComponents-Libraries" selector="upGif">upGif
	| xxxCache |
	xxxCache := #(nil) beMutable.
	(xxxCache at: 1) isNil ifTrue: [
		xxxCache at: 1 put: #(71 73 70 56 57 97 12 0 12 0 194 4 0 165 170 148 173 166 156 173 170 148 173 170 156 255 255 255 255 255 255 255 255 255 255 255 255 33 254 21 67 114 101 97 116 101 100 32 119 105 116 104 32 84 104 101 32 71 73 77 80 0 33 249 4 1 10 0 4 0 44 0 0 0 0 12 0 12 0 0 3 25 72 186 220 254 208 129 72 130 8 112 4 96 93 176 31 199 88 215 80 98 84 170 174 74 2 0 59) asByteArray ].
	^ xxxCache at: 1</body>
</methods>

<methods>
<class-id>Seaside.ShoreFileLibrary class</class-id> <category>initialization</category>

<body package="ShoreComponents-Libraries" selector="initialize">initialize
	
	self register</body>
</methods>

<methods>
<class-id>Seaside.ShoreFileLibrary class</class-id> <category>initialize-release</category>

<body package="ShoreComponents-Libraries" selector="unload">unload
	
	self unregister</body>
</methods>

<methods>
<class-id>Seaside.ShoreDemo1StandardDialogsDemo</class-id> <category>rendering</category>

<body package="ShoreComponents-Demo1" selector="numberLink:on:">numberLink: number on: html

	html paragraph with: [
		html anchor callback: [ self shoreInform: number ];
			with: number displayString. ]</body>

<body package="ShoreComponents-Demo1" selector="numberLiveLink:on:">numberLiveLink: number on: html

	html paragraph with: [
		html anchor inform: number;
			with: number displayString. ]</body>

<body package="ShoreComponents-Demo1" selector="renderContentOn:">renderContentOn: html 
	html heading: self pageTitle.
	html
		form: [html unorderedList list: (OrderedCollection new
					add: [html anchor
							callback: [self shoreInform: 'Any message' translated];
							 with: 'inform' translated];
					
					add: [html anchor
							callback: [self
									shoreInform: (self shoreConfirm: 'Any message' translated)];
							 with: 'confirm' translated];
					
					add: [html anchor
							callback: [self shoreError: 'Any message' translated];
							 with: 'error' translated];
					
					add: [html anchor
							callback: [self shoreInform: self shoreGetString];
							 with: 'get string' translated];
					
					add: [html anchor
							callback: [self
									shoreInform: (self shoreGetString: 'Seaside' message: 'Your favorite framework' translated)];
							 with: 'get string with a message and initial value' translated];
					 yourself).
			html heading level: 2;
				 with: 'Live dialogs' translated.
			html unorderedList list: (OrderedCollection new
					add: [html anchor inform: 'Any message';
							 with: 'inform' translated];
					
					add: [html div class: #bordered;
							 inform: 'Any message' translated;
							 with: 'click here...'];
					
					add: [html anchor
							confirm: 'Any message' translated
							andDo: [self shoreInform: 'Confirmed' translated];
							 with: 'confirm' translated];
					
					add: [html button
							confirm: 'Any message' translated
							andDo: [self shoreInform: 'Confirmed' translated];
							with: 'confirm button' translated];
					
					add: [html anchor
							showDialog: [:h | 
								h fixDialogSize.
								h paragraph: 'dialog' translated.
								1
									to: 10
									do: [:i | self numberLink: i on: h].
								h
									buttons: [h button closeDialog; with: 'close']]
							caption: 'Custom dialog' translated;
							 with: 'custom dialog' translated];
					
					add: [html anchor
							showDialog: [:h | 
								h fixDialogSize.
								h paragraph: 'dialog' translated.
								1
									to: 100
									do: [:i | self numberLink: i on: h].
								h
									buttons: [h button closeDialog; with: 'close']]
							caption: 'Custom dialog' translated;
							 with: 'long custom dialog' translated];
					
					add: [html anchor
							showDialog: [:h | h
									form: [h fixDialogSize.
										h text: 'Sample input: ' translated.
										h textInput on: #sampleInput of: self.
										1
											to: 5
											do: [:i | self numberLiveLink: i on: h].
										h
											buttons: [h button
													callback: [self shoreInform: self sampleInput];
													with: 'submit'.
												h space.
												h button closeDialog; with: 'close']]]
							caption: 'Custom dialog' translated;
							 with: 'custom form dialog' translated];
					
					add: [html anchor
							getString: 'Seaside'
							message: 'Your favorite framework' translated
							andDo: [:string | self shoreInform: string];
							 with: 'get string with a message and initial value' translated];
					 yourself)]</body>
</methods>

<methods>
<class-id>Seaside.ShoreDemo1StandardDialogsDemo</class-id> <category>accessing</category>

<body package="ShoreComponents-Demo1" selector="pageTitle">pageTitle

	^ 'Standard dialogs demo' translated</body>

<body package="ShoreComponents-Demo1" selector="sampleInput">sampleInput
	"Answer the value of sampleInput"

	^ sampleInput</body>

<body package="ShoreComponents-Demo1" selector="sampleInput:">sampleInput: anObject
	"Set the value of sampleInput"

	sampleInput := anObject</body>
</methods>

<methods>
<class-id>Seaside.ShoreDemo1StandardDialogsDemo class</class-id> <category>as yet unclassified</category>

<body package="ShoreComponents-Demo1" selector="menuName">menuName

	^ 'Standard dialogs' translated</body>

<body package="ShoreComponents-Demo1" selector="menuPriority">menuPriority

	^ 5

	</body>
</methods>

<methods>
<class-id>Seaside.ShoreDemo1StandardDialogsDemo class</class-id> <category>initialization</category>

<body package="ShoreComponents-Demo1" selector="initialize">initialize

	self registerToMenu
</body>
</methods>

<methods>
<class-id>Seaside.ShoreXPPanel</class-id> <category>initialization</category>

<body package="ShoreComponents-Panels" selector="initialize">initialize
	"Initializes the receiver"

	super initialize.
	
	sections := OrderedCollection new.</body>

<body package="ShoreComponents-Panels" selector="states">states
	^ Array with: self</body>
</methods>

<methods>
<class-id>Seaside.ShoreXPPanel</class-id> <category>rendering</category>

<body package="ShoreComponents-Panels" selector="renderContentOn:">renderContentOn: html
	"renders the receivers content on the given html object"

	html div 
		class: #shoreXPPanel;
		with: [
			sections do: [ :section |
				html render: section] ] . 
</body>

<body package="ShoreComponents-Panels" selector="rendererClass">rendererClass 
	"Returns the receivers default renderer class"

	^ ShoreCanvas</body>
</methods>

<methods>
<class-id>Seaside.ShoreXPPanel</class-id> <category>accessing</category>

<body package="ShoreComponents-Panels" selector="children">children

	^ sections</body>
</methods>

<methods>
<class-id>Seaside.ShoreXPPanel</class-id> <category>sections</category>

<body package="ShoreComponents-Panels" selector="addSection:">addSection: aComponent

	aComponent addDecoration: ShoreXPPanelDecoration new.
	sections add: aComponent.
</body>
</methods>

<methods>
<class-id>Seaside.ShoreTableColumn</class-id> <category>accessing</category>

<body package="ShoreComponents-Tables" selector="clickBlock:">clickBlock: aBlock
	clickBlock := aBlock</body>

<body package="ShoreComponents-Tables" selector="columnClickBlock:">columnClickBlock: aBlock
	self clickBlock: [:r | aBlock value: (self valueForRow: r)]</body>

<body package="ShoreComponents-Tables" selector="formatBlock:">formatBlock: anObject
	formatBlock := anObject</body>

<body package="ShoreComponents-Tables" selector="groupBy">groupBy

	^ groupBy</body>

<body package="ShoreComponents-Tables" selector="groupBy:">groupBy: anObject
	groupBy := anObject</body>

<body package="ShoreComponents-Tables" selector="hasTotal:">hasTotal: aBoolean
	hasTotal := aBoolean </body>

<body package="ShoreComponents-Tables" selector="index:">index: aNumber
	valueBlock := [:row | row at: aNumber]</body>

<body package="ShoreComponents-Tables" selector="initialize">initialize
	formatBlock := [:x | x displayString].
	valueBlock := [:row | nil].
	clickBlock := nil.
	title := nil.
	hasTotal := false.
	isReversed := false.
	groupBy := false.
	visible := true.
</body>

<body package="ShoreComponents-Tables" selector="isReversed">isReversed

	^ isReversed</body>

<body package="ShoreComponents-Tables" selector="isReversed:">isReversed: aBoolean
	isReversed := aBoolean </body>

<body package="ShoreComponents-Tables" selector="renderBlock">renderBlock

	^ renderBlock</body>

<body package="ShoreComponents-Tables" selector="renderBlock:">renderBlock: aBlock
	renderBlock := aBlock</body>

<body package="ShoreComponents-Tables" selector="selector:">selector: aSymbol
	valueBlock := [:row | row perform: aSymbol]</body>

<body package="ShoreComponents-Tables" selector="sortBlock">sortBlock

	^ sortBlock</body>

<body package="ShoreComponents-Tables" selector="sortBlock:">sortBlock: anObject
	sortBlock := anObject</body>

<body package="ShoreComponents-Tables" selector="styleBlock">styleBlock

	^ styleBlock</body>

<body package="ShoreComponents-Tables" selector="styleBlock:">styleBlock: aBlock

	styleBlock := aBlock</body>

<body package="ShoreComponents-Tables" selector="title:">title: aString
	title := aString</body>

<body package="ShoreComponents-Tables" selector="valueBlock:">valueBlock: aBlock
	valueBlock := aBlock</body>

<body package="ShoreComponents-Tables" selector="visible">visible

	^ visible</body>

<body package="ShoreComponents-Tables" selector="visible:">visible: aBoolean
	visible := aBoolean </body>
</methods>

<methods>
<class-id>Seaside.ShoreTableColumn</class-id> <category>public</category>

<body package="ShoreComponents-Tables" selector="canChoose">canChoose
	^ clickBlock notNil</body>

<body package="ShoreComponents-Tables" selector="canSort">canSort
	^ sortBlock notNil</body>

<body package="ShoreComponents-Tables" selector="chooseRow:">chooseRow: row
	^ clickBlock value: row</body>

<body package="ShoreComponents-Tables" selector="sortRows2:">sortRows2: anArray
	| assocs res |
	assocs := anArray collect: [:ea | ea -&gt; (self valueForRow: ea)].
	assocs := assocs asSortedCollection: [:a :b | sortBlock value: a value value: b value].
	res := assocs collect: [:ea | ea key].
	self isReversed ifTrue: [ res := res reversed ].

	^ res.</body>

<body package="ShoreComponents-Tables" selector="sortRows:">sortRows: anArray
	|assocs|
	assocs := anArray collect: [:ea | ea -&gt; (self valueForRow: ea)].
	assocs := assocs asSortedCollection: [:a :b | sortBlock value: a value value: b value].
	^ assocs collect: [:ea | ea key]</body>

<body package="ShoreComponents-Tables" selector="textForRow:">textForRow: row
	^ formatBlock value: (self valueForRow: row)</body>

<body package="ShoreComponents-Tables" selector="title">title
	^title</body>

<body package="ShoreComponents-Tables" selector="totalForRows:">totalForRows: aCollection
	^ hasTotal
		ifFalse: ['']
		ifTrue: [formatBlock value: (aCollection detectSum: [:r | self valueForRow: r])]</body>

<body package="ShoreComponents-Tables" selector="valueForRow:">valueForRow: row
	^ valueBlock value: row</body>
</methods>

<methods>
<class-id>Seaside.ShoreTableColumn class</class-id> <category>as yet unclassified</category>

<body package="ShoreComponents-Tables" selector="selector:title:">selector: aSymbol title: aString
	^ self selector: aSymbol title: aString onClick: nil</body>

<body package="ShoreComponents-Tables" selector="selector:title:onClick:">selector: aSymbol title: aString onClick: aBlock
	^ self new
		title: aString;
		selector: aSymbol;
		clickBlock: aBlock</body>
</methods>

<methods>
<class-id>Seaside.ShoreTableColumn class</class-id> <category>instance creation</category>

<body package="ShoreComponents-Tables" selector="new">new
	^ super new initialize</body>
</methods>

<methods>
<class-id>Seaside.ShoreTableColumn class</class-id> <category>accessing</category>

<body package="ShoreComponents-Tables" selector="selector:">selector: aSymbol
	^ self selector: aSymbol title: aSymbol capitalized</body>
</methods>

<methods>
<class-id>Seaside.WASession</class-id> <category>*ShoreComponents</category>

<body package="ShoreComponents-Extensions" selector="download:mimeType:filename:">download: contents mimeType: mimeType filename: fileName

	self respond:
			[:url |
			| response |
			response := Seaside.WAResponse new.
			response contentType: mimeType.
			response headerAt: 'Expires' put: 'Thu, 01 Jan 2095 12:00:00 GMT'.
			response headerAt: 'content-disposition'
				put: ('attachment ; filename=' , fileName).
			response headerAt: 'Content-length' put: contents size printString.
			response contents nextPutAll: contents.
			response]</body>
</methods>

<methods>
<class-id>Core.String</class-id> <category>*ShoreComponents</category>

<body package="ShoreComponents-Extensions" selector="asShoreUrl">asShoreUrl
	^ Seaside.ShoreFileLibrary /self
</body>

<body package="ShoreComponents-Extensions" selector="asXHtml">asXHtml
	^ Seaside.ShoreEncoder encode: self</body>
</methods>

<methods>
<class-id>Seaside.WATagBrush</class-id> <category>*ShoreComponents</category>

<body package="ShoreComponents-Extensions" selector="closeDialog">closeDialog

	self onClick: 'ShoreModalDialog.current.close()'.</body>

<body package="ShoreComponents-Extensions" selector="confirm:andDo:">confirm: aString andDo: aBlock 
	self
		showDialog: [:h | 
			h fixDialogSize.
			h paragraph: aString.
			h
				buttons: [| url | 
					url := h urlForAction: aBlock.
					h button
						onClick: ('window.location.href = "{1}"'
								format: (Array with: url));
						 with: 'Yes' translated.
					h space.
					h button closeDialog; with: 'No' translated]]
		caption: 'Confirmation' translated
		width: 320
		height: 100</body>

<body package="ShoreComponents-Extensions" selector="contextMenu:">contextMenu: aMenuSpec

	self attributeAt: #rel put: (canvas updater id: #shoreContextMenuContent; 
		callback: [:h | 
			aMenuSpec do: [:item |
				self renderContextMenuItem: item key action: item value on: h ] ])</body>

<body package="ShoreComponents-Extensions" selector="getString:message:andDo:">getString: initialValue message: aMessage andDo: aBlock 
	| valueHolder |
	valueHolder := ValueHolder new contents: initialValue.
	self
		showDialog: [:h | h
				form: [h fixDialogSize.
					h
						paragraph: [h text: aMessage.
							h break.
							h textInput class: #shoreFormDialogTextInput;
								 on: #contents of: valueHolder.
							h
								buttons: [h button
										callback: [aBlock value: valueHolder contents];
										 with: 'OK' translated.
									h space.
									h button closeDialog; with: 'Cancel' translated]]]]
		caption: 'Input' translated
		width: 350
		height: 0</body>

<body package="ShoreComponents-Extensions" selector="inform:">inform: aString

	self
		showDialog: [:h | 
			h fixDialogSize.
			h paragraph: aString.
			h buttons: [ h button closeDialog; with: 'OK' translated] ]
		caption: 'Information' translated
		width: 320
		height: 100</body>

<body package="ShoreComponents-Extensions" selector="onClickAction:">onClickAction: aBlock

	self onClick: ('window.location.href = "{1}"' format: (Array with: (canvas urlForAction: aBlock)))</body>

<body package="ShoreComponents-Extensions" selector="renderContextMenuItem:action:on:">renderContextMenuItem: aName action: aBlock on: html

	html div class: #shoreControlItem; class: #shoreContextMenuItem;
		onClickAction: aBlock;
		onMouseOver: 'overpopupmenu=true';
		onMouseOut: 'overpopupmenu=false';
		with: aName.
							</body>

<body package="ShoreComponents-Extensions" selector="showDialog:caption:">showDialog: renderBlock caption: caption 

	self showDialog: renderBlock caption: caption width: 320 height: 150

</body>

<body package="ShoreComponents-Extensions" selector="showDialog:caption:width:height:">showDialog: renderBlock caption: caption width: width height: height

	self onClick: ('ShoreModalDialog.current =  new ShoreModalDialog("{1}", {2}, {3}); ShoreModalDialog.current.open();' format: (Array with: (caption value copyReplaceAll: '"' with: '/"') asXHtml with: width with: height)).

	self onClick: (canvas updater
		id: #shoreModalDialog;
		evalScripts: true;
		callback: renderBlock).
		
</body>
</methods>

<methods>
<class-id>Seaside.WAComponent</class-id> <category>*ShoreComponents</category>

<body package="ShoreComponents-Extensions" selector="pageTitle:">pageTitle: title</body>

<body package="ShoreComponents-Extensions" selector="shoreConfirm:">shoreConfirm: aString
	"Let the user confirm the contents of the given string"

	^ self shoreTarget call: ((Seaside.ShoreConfirmDialog new) message: aString)</body>

<body package="ShoreComponents-Extensions" selector="shoreError:">shoreError: aString
	"Displays the given string as an error"

	self shoreTarget call: ((Seaside.ShoreErrorDialog new) message: aString)
</body>

<body package="ShoreComponents-Extensions" selector="shoreGetString">shoreGetString

	^ self shoreGetString: '' message: 'Please, input a string' translated.</body>

<body package="ShoreComponents-Extensions" selector="shoreGetString:message:">shoreGetString: initialValue message: aMessageString
	"gets simple string from user"

	^ self shoreTarget call: ((Seaside.ShoreGetStringDialog new) 
		message: aMessageString;
		string: initialValue)</body>

<body package="ShoreComponents-Extensions" selector="shoreInform:">shoreInform: aString
	"Inform the user about the contents of the given string"

	self shoreTarget call: ((Seaside.ShoreInformDialog new) message: aString)</body>

<body package="ShoreComponents-Extensions" selector="shoreTarget">shoreTarget

	^ Seaside.ShoreCurrentTarget value ifNil: [ self]</body>
</methods>

<initialize>
<class-id>Seaside.ShoreDemo1NestedFormsDemo</class-id>
</initialize>

<initialize>
<class-id>Seaside.ShoreEncoder</class-id>
</initialize>

<initialize>
<class-id>Seaside.ShoreDemo1ListsDemo</class-id>
</initialize>

<initialize>
<class-id>Seaside.ShoreDemo1ContextMenu</class-id>
</initialize>

<initialize>
<class-id>Seaside.ShoreDemo1DynamicFileDownload</class-id>
</initialize>

<initialize>
<class-id>Seaside.ShoreDemo1TableDemo5</class-id>
</initialize>

<initialize>
<class-id>Seaside.ShoreWidget</class-id>
</initialize>

<initialize>
<class-id>Seaside.ShoreDemo1</class-id>
</initialize>

<initialize>
<class-id>Seaside.ShoreDemo2</class-id>
</initialize>

<initialize>
<class-id>Seaside.ShoreDemo1TableDemo</class-id>
</initialize>

<initialize>
<class-id>Seaside.ShoreDemo1TableDemo2</class-id>
</initialize>

<initialize>
<class-id>Seaside.ShoreDemo1RichEditDemo</class-id>
</initialize>

<initialize>
<class-id>Seaside.ShoreDemo1WebTree</class-id>
</initialize>

<initialize>
<class-id>Seaside.ShoreDemo1DatePicker</class-id>
</initialize>

<initialize>
<class-id>Seaside.ShoreDemo1TableDemo3</class-id>
</initialize>

<initialize>
<class-id>Seaside.ShoreDemo4</class-id>
</initialize>

<initialize>
<class-id>Seaside.ShoreDemo1Spinner</class-id>
</initialize>

<initialize>
<class-id>Seaside.ShoreDemo3</class-id>
</initialize>

<initialize>
<class-id>Seaside.ShoreDemo1Introduction</class-id>
</initialize>

<initialize>
<class-id>Seaside.ShoreDemo1TableDemo4</class-id>
</initialize>

<initialize>
<class-id>Seaside.ShoreDemo1TabControlDemo</class-id>
</initialize>

<initialize>
<class-id>Seaside.ShoreFileLibrary</class-id>
</initialize>

<initialize>
<class-id>Seaside.ShoreDemo1StandardDialogsDemo</class-id>
</initialize>

<do-it>"Imported Classes:"</do-it>

<do-it>self error: 'Attempting to file-in parcel imports.  Choose terminate or close'</do-it>

<class>
<name>Object</name>
<environment>Core</environment>
<super></super>
<private>false</private>
<indexed-type>none</indexed-type>
<inst-vars></inst-vars>
<class-inst-vars></class-inst-vars>
<imports></imports>
<category>Kernel-Objects</category>
<attributes>
<package>Kernel-Objects</package>
</attributes>
</class>

<class>
<name>WADecoration</name>
<environment>Seaside</environment>
<super>Seaside.WAPresenter</super>
<private>false</private>
<indexed-type>none</indexed-type>
<inst-vars>next </inst-vars>
<class-inst-vars></class-inst-vars>
<imports></imports>
<category>Seaside-Component</category>
<attributes>
<package>Seaside-Component</package>
</attributes>
</class>

<class>
<name>WADynamicVariable</name>
<environment>Seaside</environment>
<super>Core.Notification</super>
<private>false</private>
<indexed-type>none</indexed-type>
<inst-vars></inst-vars>
<class-inst-vars></class-inst-vars>
<imports></imports>
<category>Seaside-Utilities</category>
<attributes>
<package>Seaside-Utilities</package>
</attributes>
</class>

<class>
<name>WAFileLibrary</name>
<environment>Seaside</environment>
<super>Seaside.WALibrary</super>
<private>false</private>
<indexed-type>none</indexed-type>
<inst-vars></inst-vars>
<class-inst-vars>default </class-inst-vars>
<imports></imports>
<category>Seaside-Libraries</category>
<attributes>
<package>Seaside-Libraries</package>
</attributes>
</class>

<class>
<name>WARenderCanvas</name>
<environment>Seaside</environment>
<super>Seaside.WAHtmlCanvas</super>
<private>false</private>
<indexed-type>none</indexed-type>
<inst-vars>context callbacks </inst-vars>
<class-inst-vars></class-inst-vars>
<imports></imports>
<category>Seaside-Canvas</category>
<attributes>
<package>Seaside-Canvas</package>
</attributes>
</class>

<class>
<name>WATagBrush</name>
<environment>Seaside</environment>
<super>Seaside.WABrush</super>
<private>false</private>
<indexed-type>none</indexed-type>
<inst-vars>attributes </inst-vars>
<class-inst-vars></class-inst-vars>
<imports></imports>
<category>Seaside-Canvas</category>
<attributes>
<package>Seaside-Canvas</package>
</attributes>
</class>

<class>
<name>WADivTag</name>
<environment>Seaside</environment>
<super>Seaside.WATagBrush</super>
<private>false</private>
<indexed-type>none</indexed-type>
<inst-vars></inst-vars>
<class-inst-vars></class-inst-vars>
<imports></imports>
<category>Seaside-Canvas-Tags</category>
<attributes>
<package>Seaside-Canvas-Tags</package>
</attributes>
</class>

<class>
<name>WAFormTag</name>
<environment>Seaside</environment>
<super>Seaside.WATagBrush</super>
<private>false</private>
<indexed-type>none</indexed-type>
<inst-vars>defaultAction </inst-vars>
<class-inst-vars></class-inst-vars>
<imports></imports>
<category>Seaside-Canvas-Tags</category>
<attributes>
<package>Seaside-Canvas-Tags</package>
</attributes>
</class>

<class>
<name>WASession</name>
<environment>Seaside</environment>
<super>Seaside.WAExpiringHandler</super>
<private>false</private>
<indexed-type>none</indexed-type>
<inst-vars>continuations escapeContinuation monitor state currentRequest scripts jumpTo internalError cookiesEnabled </inst-vars>
<class-inst-vars></class-inst-vars>
<imports></imports>
<category>Seaside-Session</category>
<attributes>
<package>Seaside-Session</package>
</attributes>
</class>

<class>
<name>String</name>
<environment>Core</environment>
<super>Core.CharacterArray</super>
<private>false</private>
<indexed-type>none</indexed-type>
<inst-vars></inst-vars>
<class-inst-vars></class-inst-vars>
<imports></imports>
<category>Collections-Text</category>
<attributes>
<package>Collections-Text</package>
</attributes>
</class>

<class>
<name>WAComponent</name>
<environment>Seaside</environment>
<super>Seaside.WAPresenter</super>
<private>false</private>
<indexed-type>none</indexed-type>
<inst-vars>decoration </inst-vars>
<class-inst-vars></class-inst-vars>
<imports></imports>
<category>Seaside-Component</category>
<attributes>
<package>Seaside-Component</package>
</attributes>
</class>

<class>
<name>WABrowser</name>
<environment>Seaside</environment>
<super>Seaside.WAComponent</super>
<private>false</private>
<indexed-type>none</indexed-type>
<inst-vars>contents model message </inst-vars>
<class-inst-vars></class-inst-vars>
<imports></imports>
<category>Seaside-Components-Tools</category>
<attributes>
<package>Seaside-Components-Tools</package>
</attributes>
</class>

<class>
<name>SUUpdater</name>
<environment>Seaside</environment>
<super>Seaside.SUAjax</super>
<private>false</private>
<indexed-type>none</indexed-type>
<inst-vars>id </inst-vars>
<class-inst-vars></class-inst-vars>
<imports></imports>
<category>Scriptaculous-Ajax</category>
<attributes>
<package>Scriptaculous-Ajax</package>
</attributes>
</class>

</st-source>
