Re: script: [...] value parameter
Johan Brichau <[email protected]> Thu, 27 Oct 2022 19:25:58 +0200
| Newsgroups | gmane.comp.lang.smalltalk.squeak.seaside |
|---|---|
| Message-ID | <[email protected]> |
--===============2558218463557300266==
Content-Type: multipart/alternative;
boundary="Apple-Mail=_E3876D6F-33CF-4D74-B777-46A0A650F036"
--Apple-Mail=_E3876D6F-33CF-4D74-B777-46A0A650F036
Content-Transfer-Encoding: quoted-printable
Content-Type: text/plain;
charset=utf-8
Hi Bob,
Good to hear it works out.
Just a note: the order in which you send the `script:` and =
`callback:value:` (or `callback:passenger:`) blocks to the JQAjax =
instance does not matter. Seaside will always invoke the `script:` block =
last since it is the primary callback that generates a response.
The following message orders are equivalent:
| value |
html button
passenger: self;
onClick: (html jQuery ajax=20
script: [ :s | ...value is the passenger, which in this case is =
self=E2=80=A6 ];
callback: [ :v | value :=3D v ] passenger: (html jQuery this)
| value |
html button
passenger: self;
onClick: (html jQuery ajax=20
callback: [ :v | value :=3D v ] passenger: (html jQuery this);
script: [ :s | ...value is the passenger, which in this case is =
self=E2=80=A6 ]
> On 26 Oct 2022, at 13:26, Bob Nemec <[email protected]> wrote:
>=20
> For those that don't follow Discord, Johan provided a solution with an =
example that works for me.
> What I needed to position the script: block after the callback:value: =
block, and have the callback:value: set state that the script: block =
could use.=20
> Seems obvious now...=20
>=20
> The "script:value:" you are looking for is really the combination of a =
"callback:value:" with a "script:" on the same ajax request. You can =
pass the 'closest div passenger' to the script block using temporary =
variables that get assigned in the callback:value: or =
callback:passenger: block and then use those in the script: block. If =
you want to see some example combinations with event delegation you are =
referring to, you can check out the Todo example: =
https://github.com/SeasideSt/Seaside/blob/master/repository/Seaside-Exampl=
es.package/WATodo.class/instance/renderTodosOn..st =
<https://github.com/SeasideSt/Seaside/blob/master/repository/Seaside-Examp=
les.package/WATodo.class/instance/renderTodosOn..st>
> On Monday, October 24, 2022 at 08:50:43 a.m. EDT, Bob Nemec =
<[email protected]> wrote:
>=20
>=20
> (Also posted on Discord) ... Thanks: we already use the secondary =
callbacks & passenger patters. In this case, we have a large calendar =
component for which we're trying to avoid rendering too much cell =
specific code (html content gets crazy big).
> =20
> Ideally, I'd have one script for the calendar that uses =
JQueryInstance>>closest: to get the div id / passenger, pass that to a =
script: [...] block, and then have the browser run the script block =
result.=20
>=20
> That works (and we're using it) for static onMouseOver: js script =
content, but having new content on each mouseover provided by a script: =
[...] block is where I'm stuck... using the closest: pattern removes the =
need for cell div specific scripts (with a noticeable render speed =
improvement), but I can't pass along the closest div to the script: =
[...] block to build cell specific content. =20
>=20
> Feels like it a...=20
> script: [:script :value | ...] value: (js script)
> ...pattern should work with a closest: div parameter. Great =
opportunity for me to learn more Seaside internal :-) =20
>=20
> Bob
> On Monday, October 24, 2022 at 03:08:24 a.m. EDT, Johan Brichau =
<[email protected]> wrote:
>=20
>=20
> I copy/paste my response on the Discord channel:
>=20
> An ajax request with Seaside JQuery can combine multiple secondary =
callbacks and a single primary callback. You can find out which are =
which in the method comments on JQAjax. In short: a primary callback is =
a response-generating callback, while secondary callbacks are callbacks =
that pass values from the client to the server. As such, you can =
construct what you want already as follows:
> | value |
> html jQuery ajax=20
> callback: [ :v | value :=3D v ] value: (html jQuery this =
propertyAt: 'id');
> script: [ :s | ...use value in the generation of the script... ]
> [9:40 AM]
> Also, take a look at passengers if you want to store objects and =
retrieve them by id. Seaside has this mechanism built-in for you:
> | value |
> html button
> passenger: self;
> onClick: (html jQuery ajax=20
> callback: [ :v | value :=3D v ] passenger: (html jQuery this);
>=20
>=20
>> On 21 Oct 2022, at 19:48, Bob Nemec <[email protected] =
<mailto:[email protected]>> wrote:
>>=20
>> Cross posted from Seaside Discord channel...
>>=20
>> I would like to have an 'html ajax script: [...]' method that has a =
callback:value: pattern.=20
>>=20
>> Something like...=20
>> html ajax script: [:script :value | ...] value: (html jQuery this =
propertyAt: 'id')=20
>>=20
>> Then in the script block 'value' would get the id of 'this', which in =
an ajax callback is undefined.=20
>> This would allow server code to use browser information to build the =
script.=20
>>=20
>> Anyone done this?
>>=20
>>=20
>> Bob Nemec
>>=20
>> _______________________________________________
>> seaside mailing list
>> [email protected] =
<mailto:[email protected]>
>> http://lists.squeakfoundation.org/cgi-bin/mailman/listinfo/seaside
>=20
> _______________________________________________
> seaside mailing list
> [email protected] =
<mailto:[email protected]>
> http://lists.squeakfoundation.org/cgi-bin/mailman/listinfo/seaside =
<http://lists.squeakfoundation.org/cgi-bin/mailman/listinfo/seaside>
> _______________________________________________
> seaside mailing list
> [email protected] =
<mailto:[email protected]>
> http://lists.squeakfoundation.org/cgi-bin/mailman/listinfo/seaside =
<http://lists.squeakfoundation.org/cgi-bin/mailman/listinfo/seaside>
> _______________________________________________
> seaside mailing list
> [email protected]
> http://lists.squeakfoundation.org/cgi-bin/mailman/listinfo/seaside
--Apple-Mail=_E3876D6F-33CF-4D74-B777-46A0A650F036
Content-Transfer-Encoding: quoted-printable
Content-Type: text/html;
charset=utf-8
<html><head><meta http-equiv=3D"Content-Type" content=3D"text/html; =
charset=3Dutf-8"></head><body style=3D"word-wrap: break-word; =
-webkit-nbsp-mode: space; line-break: after-white-space;" class=3D"">Hi =
Bob,<div class=3D""><br class=3D""></div><div class=3D"">Good to hear it =
works out.</div><div class=3D"">Just a note: the order in which you send =
the `script:` and `callback:value:` (or `callback:passenger:`) blocks to =
the JQAjax instance does not matter. Seaside will always invoke the =
`script:` block last since it is the primary callback that generates a =
response.</div><div class=3D"">The following message orders are =
equivalent:</div><div class=3D""><br class=3D""></div><div class=3D""><div=
class=3D"">| value |</div><div class=3D"">html button</div><div =
class=3D""> passenger: self;</div><div class=3D""> =
onClick: (html jQuery ajax </div><div class=3D""> =
script: [ :s | ...value is the passenger, which in =
this case is self=E2=80=A6 ];</div></div><div class=3D""> =
callback: [ :v | value :=3D v ] passenger: (html jQuery =
this)</div><div class=3D""><br class=3D""></div><div class=3D""><br =
class=3D""></div><div class=3D""><div class=3D"">| value |</div><div =
class=3D"">html button</div><div class=3D""> passenger: =
self;</div><div class=3D""> onClick: (html jQuery =
ajax </div><div class=3D""> callback: [ =
:v | value :=3D v ] passenger: (html jQuery this);</div><div =
class=3D""> script: [ :s | ...value is the =
passenger, which in this case is self=E2=80=A6 ]</div></div><div =
class=3D""><br class=3D""></div><div class=3D""><br class=3D""><div><br =
class=3D""><blockquote type=3D"cite" class=3D""><div class=3D"">On 26 =
Oct 2022, at 13:26, Bob Nemec <<a href=3D"mailto:[email protected]" =
class=3D"">[email protected]</a>> wrote:</div><br =
class=3D"Apple-interchange-newline"><div class=3D""><div class=3D""><div =
class=3D"ydpe16e7e8fyahoo-style-wrap" style=3D"font-family:lucida =
console, sans-serif;font-size:13px;"><div class=3D""></div>
<div dir=3D"ltr" data-setdir=3D"false" class=3D"">For those that =
don't follow Discord, Johan provided a solution with an example that =
works for me.<br class=3D"">What I needed to position the script: block =
after the callback:value: block, and have the callback:value: set state =
that the script: block could use. <br class=3D"">Seems obvious =
now... </div><div dir=3D"ltr" data-setdir=3D"false" class=3D""><br =
class=3D""><span class=3D"">The "script:value:" you are looking for is =
really the combination of a "callback:value:" with a "script:" on the =
same ajax request. You can pass the 'closest div passenger' to the =
script block using temporary variables that get assigned in the =
callback:value: or callback:passenger: block and then use those in the =
script: block. If you want to see some example combinations with event =
delegation you are referring to, you can check out the Todo =
example: </span><a =
href=3D"https://github.com/SeasideSt/Seaside/blob/master/repository/Seasid=
e-Examples.package/WATodo.class/instance/renderTodosOn..st" =
rel=3D"nofollow" target=3D"_blank" =
class=3D"">https://github.com/SeasideSt/Seaside/blob/master/repository/Sea=
side-Examples.package/WATodo.class/instance/renderTodosOn..st</a><br =
class=3D""></div>
=20
</div><div id=3D"yahoo_quoted_7027919161" class=3D"yahoo_quoted">
<div style=3D"font-family:'Helvetica Neue', Helvetica, =
Arial, sans-serif;font-size:13px;color:#26282a;" class=3D"">
=20
<div class=3D"">
On Monday, October 24, 2022 at 08:50:43 a.m. EDT, =
Bob Nemec <<a href=3D"mailto:[email protected]" =
class=3D"">[email protected]</a>> wrote:
</div>
<div class=3D""><br class=3D""></div>
<div class=3D""><br class=3D""></div>
<div class=3D""><div id=3D"yiv6882413904" class=3D""><div =
class=3D""><div style=3D"font-family:lucida console, =
sans-serif;font-size:13px;" =
class=3D"yiv6882413904ydp463fbbe9yahoo-style-wrap"><div class=3D""></div>
<div dir=3D"ltr" class=3D""><div class=3D""><div dir=3D"ltr" =
class=3D"">(Also posted on Discord) ... Thanks: we already use the =
secondary callbacks & passenger patters. In this case, we have a =
large calendar component for which we're trying to avoid rendering too =
much cell specific code (html content gets crazy big).</div><div =
class=3D""> </div><div class=3D"">Ideally, I'd have one =
script for the calendar that uses JQueryInstance>>closest: to get =
the div id / passenger, pass that to a script: [...] block, and then =
have the browser run the script block result. </div><div =
class=3D""><br clear=3D"none" class=3D""></div><div class=3D"">That =
works (and we're using it) for static onMouseOver: js script content, =
but having new content on each mouseover provided by a script: [...] =
block is where I'm stuck... using the closest: pattern removes the need =
for cell div specific scripts (with a noticeable render speed =
improvement), but I can't pass along the closest div to the script: =
[...] block to build cell specific content. </div><div =
class=3D""><br clear=3D"none" class=3D""></div><div class=3D"">Feels =
like it a... </div><div class=3D"">script: [:script :value | ...] =
value: (js script)</div><div class=3D"">...pattern should work with a =
closest: div parameter. Great opportunity for me to learn more Seaside =
internal :-) </div></div><br clear=3D"none" =
class=3D""></div><div dir=3D"ltr" class=3D"">Bob</div>
=20
</div><div id=3D"yiv6882413904yahoo_quoted_7101938615" =
class=3D"yiv6882413904yahoo_quoted">
<div style=3D"font-family:'Helvetica Neue', Helvetica, =
Arial, sans-serif;font-size:13px;color:#26282a;" class=3D"">
=20
<div id=3D"yiv6882413904yqt78631" =
class=3D"yiv6882413904yqt9599951790"><div class=3D"">
On Monday, October 24, 2022 at 03:08:24 a.m. EDT, =
Johan Brichau <<a href=3D"mailto:[email protected]" =
class=3D"">[email protected]</a>> wrote:
</div>
<div class=3D""><br clear=3D"none" class=3D""></div>
<div class=3D""><br clear=3D"none" class=3D""></div>
<div class=3D""><div id=3D"yiv6882413904" class=3D""><div =
class=3D"">I copy/paste my response on the Discord channel:<div =
class=3D"yiv6882413904"><br clear=3D"none" =
class=3D"yiv6882413904"></div><div class=3D"yiv6882413904"><ol =
style=3D"margin:0px;padding:0px;border:0px;font-family:Whitney, =
Helvetica, Arial, =
sans-serif;font-size:16px;vertical-align:baseline;list-style:none;min-heig=
ht:0px;orphans:2;widows:2;background-color:rgb(255, 255, 255);" =
class=3D"yiv6882413904scrollerInner-2PPAp2"><li =
id=3D"yiv6882413904chat-messages-1033645149160480829" =
style=3D"margin:0px;padding:0px;border:0px;font-style:inherit;font-family:=
inherit;vertical-align:baseline;outline:none;" =
class=3D"yiv6882413904messageListItem-ZZ7v6g"><div style=3D"margin:0px =
0px;padding-left:72px;border:0px;font-style:inherit;font-family:inherit;ve=
rtical-align:baseline;outline:0px;position:relative;padding-right:48px =
!important;" class=3D"yiv6882413904groupStart-3Mlgv1 =
yiv6882413904hasReply-2Cr4KE yiv6882413904message-2CShn3 =
yiv6882413904wrapper-30-Nkg yiv6882413904zalgo-26OfGz =
yiv6882413904cozyMessage-1DWF9U yiv6882413904cozy-VmLDNB"><div =
style=3D"margin:0px;padding:0px;border:0px;font-style:inherit;font-family:=
inherit;vertical-align:baseline;outline:0px;" =
class=3D"yiv6882413904contents-2MsGLg"><div =
id=3D"yiv6882413904message-content-1033645149160480829" =
style=3D"margin:0px 0px 0px;padding:0px 0px 0px =
72px;border:0px;font-style:inherit;font-family:inherit;vertical-align:base=
line;outline:0px;position:relative;overflow:hidden;" =
class=3D"yiv6882413904messageContent-2t3eCI =
yiv6882413904markup-eYLPri">An ajax request with Seaside JQuery can =
combine multiple secondary callbacks and a single primary callback. You =
can find out which are which in the method comments on JQAjax. In short: =
a primary callback is a response-generating callback, while secondary =
callbacks are callbacks that pass values from the client to the server.=20=
As such, you can construct what you want already as follows:
<pre =
style=3D"margin-top:6px;margin-bottom:0px;padding:0px;border:0px;font-styl=
e:inherit;font-family:Consolas, Mono Sans Sans Vera Sans Mono Monaco, =
Courier, =
monospace;vertical-align:baseline;border-radius:4px;white-space:pre-wrap;m=
ax-width:90%;" class=3D"yiv6882413904"><code =
style=3D"margin:0px;padding:0.5em;border:1px =
solid;font-style:inherit;font-family:Consolas, Mono Sans Sans Vera Sans =
Mono Monaco, Courier, =
monospace;vertical-align:baseline;display:block;border-radius:4px;" =
class=3D"yiv6882413904hljs yiv6882413904scrollbarGhostHairline-2LpzZ9 =
yiv6882413904scrollbar-3vVt8d">| value |
html jQuery ajax=20
callback: [ :v | value :=3D v ] value: (html jQuery this propertyAt: =
'id');
script: [ :s | ...use value in the generation of the script... =
]</code></pre></div></div><div =
style=3D"margin:0px;padding:0px;border:0px;font-style:inherit;font-family:=
inherit;vertical-align:baseline;outline:0px;" =
class=3D"yiv6882413904buttonContainer-1502pf"><div =
style=3D"margin:0px;padding:0px 14px 0px =
32px;border:0px;font-style:inherit;font-family:inherit;vertical-align:base=
line;outline:0px;z-index:1;" class=3D"yiv6882413904container-2gUZhU =
yiv6882413904buttons-3dF5Kd yiv6882413904isHeader-2bbX-L"><div =
style=3D"margin:0px;padding:0px;border:0px;font-style:inherit;font-family:=
inherit;vertical-align:baseline;outline:0px;display:grid;min-height:32px;b=
order-radius:4px;transition:0.1s ease-out 0s, 0.1s ease-out =
0s;position:relative;overflow:hidden;" =
class=3D"yiv6882413904wrapper-2vIMkT"><div =
style=3D"margin:0px;padding:4px;border:0px;font-style:inherit;font-family:=
inherit;vertical-align:baseline;outline:0px;display:flex;min-height:24px;m=
in-width:24px;cursor:pointer;position:relative;" =
class=3D"yiv6882413904button-3bklZh"></div><div =
style=3D"margin:0px;padding:4px;border:0px;font-style:inherit;font-family:=
inherit;vertical-align:baseline;outline:0px;display:flex;min-height:24px;m=
in-width:24px;cursor:pointer;position:relative;" =
class=3D"yiv6882413904button-3bklZh"></div><div =
style=3D"margin:0px;padding:4px;border:0px;font-style:inherit;font-family:=
inherit;vertical-align:baseline;outline:0px;display:flex;min-height:24px;m=
in-width:24px;cursor:pointer;position:relative;" =
class=3D"yiv6882413904button-3bklZh"></div><div =
style=3D"margin:0px;padding:4px;border:0px;font-style:inherit;font-family:=
inherit;vertical-align:baseline;outline:0px;display:flex;min-height:24px;m=
in-width:24px;cursor:pointer;position:relative;" =
class=3D"yiv6882413904button-3bklZh"></div></div></div></div></div></li><l=
i id=3D"yiv6882413904chat-messages-1033646070099623978" =
style=3D"margin:0px;padding:0px;border:0px;font-style:inherit;font-family:=
inherit;vertical-align:baseline;outline:none;" =
class=3D"yiv6882413904messageListItem-ZZ7v6g"><div =
style=3D"margin:0px;padding-left:72px;border:0px;font-style:inherit;font-f=
amily:inherit;vertical-align:baseline;outline:0px;position:relative;paddin=
g-right:48px !important;" class=3D"yiv6882413904zalgo-26OfGz =
yiv6882413904cozyMessage-1DWF9U yiv6882413904cozy-VmLDNB =
yiv6882413904message-2CShn3 yiv6882413904wrapper-30-Nkg"><div =
style=3D"margin:0px;padding:0px;border:0px;font-style:inherit;font-family:=
inherit;vertical-align:baseline;outline:0px;" =
class=3D"yiv6882413904contents-2MsGLg"><span style=3D"margin:0px 0px =
0px;padding:0px;border:0px;font-style:inherit;font-family:inherit;vertical=
-align:baseline;outline:0px;display:inline-block;cursor:default;width:56px=
;text-align:right;z-index:1;" =
class=3D"yiv6882413904timestampVisibleOnHover-9PEuZS =
yiv6882413904timestamp-p1Df1m =
yiv6882413904latin24CompactTimeStamp-2pXUBq =
yiv6882413904alt-1dvXnH"><span style=3D"width:0px;display:inline-block;" =
class=3D"yiv6882413904separator-AebOhG">[</span>9:40 AM<span =
style=3D"width:0px;display:inline-block;" =
class=3D"yiv6882413904separator-AebOhG">]</span></span><div =
id=3D"yiv6882413904message-content-1033646070099623978" =
style=3D"margin:0px 0px 0px;padding:0px 0px 0px =
72px;border:0px;font-style:inherit;font-family:inherit;vertical-align:base=
line;outline:0px;position:relative;overflow:hidden;" =
class=3D"yiv6882413904messageContent-2t3eCI =
yiv6882413904markup-eYLPri">Also, take a look at passengers if you want =
to store objects and retrieve them by id. Seaside has this mechanism =
built-in for you:
<pre =
style=3D"margin-top:6px;margin-bottom:0px;padding:0px;border:0px;font-styl=
e:inherit;font-family:Consolas, Mono Sans Sans Vera Sans Mono Monaco, =
Courier, =
monospace;vertical-align:baseline;border-radius:4px;white-space:pre-wrap;m=
ax-width:90%;" class=3D"yiv6882413904"><code =
style=3D"margin:0px;padding:0.5em;border:1px =
solid;font-style:inherit;font-family:Consolas, Mono Sans Sans Vera Sans =
Mono Monaco, Courier, =
monospace;vertical-align:baseline;display:block;border-radius:4px;" =
class=3D"yiv6882413904hljs yiv6882413904scrollbarGhostHairline-2LpzZ9 =
yiv6882413904scrollbar-3vVt8d">| value |
html button
passenger: self;
onClick: (html jQuery ajax=20
callback: [ :v | value :=3D v ] passenger: (html jQuery =
this);</code></pre></div></div></div></li></ol><div =
class=3D"yiv6882413904"><br clear=3D"none" =
class=3D"yiv6882413904"></div><div class=3D""><br clear=3D"none" =
class=3D"yiv6882413904"><blockquote type=3D"cite" =
class=3D"yiv6882413904"><div id=3D"yiv6882413904yqt33596" =
class=3D"yiv6882413904yqt7058150919"><div class=3D"yiv6882413904">On 21 =
Oct 2022, at 19:48, Bob Nemec <<a rel=3D"nofollow noopener =
noreferrer" shape=3D"rect" ymailto=3D"mailto:[email protected]" =
target=3D"_blank" href=3D"mailto:[email protected]" =
class=3D"yiv6882413904">[email protected]</a>> wrote:</div><br =
clear=3D"none" class=3D"yiv6882413904Apple-interchange-newline"><div =
class=3D"yiv6882413904"><div class=3D"yiv6882413904"><div =
style=3D"font-family:lucida console, sans-serif;font-size:13px;" =
class=3D"yiv6882413904yahoo-style-wrap"><div dir=3D"ltr" =
class=3D"yiv6882413904">Cross posted from Seaside Discord =
channel...</div><div dir=3D"ltr" class=3D"yiv6882413904"><br =
clear=3D"none" class=3D"yiv6882413904"></div><div dir=3D"ltr" =
class=3D"yiv6882413904"><div class=3D"yiv6882413904"><div =
class=3D"yiv6882413904">I would like to have an 'html ajax script: =
[...]' method that has a callback:value: pattern. </div><div =
class=3D"yiv6882413904"><br clear=3D"none" =
class=3D"yiv6882413904"></div><div class=3D"yiv6882413904">Something =
like... </div><div =
class=3D"yiv6882413904"> html ajax script: =
[:script :value | ...] value: (html jQuery this propertyAt: =
'id') </div><div class=3D"yiv6882413904"><br clear=3D"none" =
class=3D"yiv6882413904"></div><div class=3D"yiv6882413904">Then in the =
script block 'value' would get the id of 'this', which in an ajax =
callback is undefined. </div><div dir=3D"ltr" =
class=3D"yiv6882413904">This would allow server code to use browser =
information to build the script. </div><div =
class=3D"yiv6882413904"><br clear=3D"none" =
class=3D"yiv6882413904"></div><div class=3D"yiv6882413904">Anyone done =
this?</div></div><br clear=3D"none" class=3D"yiv6882413904"></div><div =
dir=3D"ltr" class=3D"yiv6882413904"><br clear=3D"none" =
class=3D"yiv6882413904"></div><div dir=3D"ltr" class=3D"yiv6882413904">Bob=
Nemec</div><div dir=3D"ltr" class=3D"yiv6882413904"><br clear=3D"none" =
class=3D"yiv6882413904"></div></div></div>________________________________=
_______________<br clear=3D"none" class=3D"yiv6882413904">seaside =
mailing list<br clear=3D"none" class=3D"yiv6882413904"><a rel=3D"nofollow =
noopener noreferrer" shape=3D"rect" =
ymailto=3D"mailto:[email protected]" target=3D"_blank" =
href=3D"mailto:[email protected]" =
class=3D"yiv6882413904">[email protected]</a><br =
clear=3D"none" class=3D"yiv6882413904"><a =
href=3D"http://lists.squeakfoundation.org/cgi-bin/mailman/listinfo/seaside=
" =
class=3D"">http://lists.squeakfoundation.org/cgi-bin/mailman/listinfo/seas=
ide</a><br clear=3D"none" =
class=3D"yiv6882413904"></div></div></blockquote></div><br clear=3D"none" =
class=3D"yiv6882413904"></div></div></div><div =
id=3D"yiv6882413904yqt37085" =
class=3D"yiv6882413904yqt7058150919">_____________________________________=
__________<br clear=3D"none" class=3D"">seaside mailing list<br =
clear=3D"none" class=3D""><a rel=3D"nofollow noopener noreferrer" =
shape=3D"rect" ymailto=3D"mailto:[email protected]" =
target=3D"_blank" href=3D"mailto:[email protected]" =
class=3D"">[email protected]</a><br clear=3D"none" =
class=3D""><a rel=3D"nofollow noopener noreferrer" shape=3D"rect" =
target=3D"_blank" =
href=3D"http://lists.squeakfoundation.org/cgi-bin/mailman/listinfo/seaside=
" =
class=3D"">http://lists.squeakfoundation.org/cgi-bin/mailman/listinfo/seas=
ide</a><br clear=3D"none" class=3D""></div></div></div>
</div>
</div></div></div><div class=3D"yqt9599951790" =
id=3D"yqt14635">_______________________________________________<br =
clear=3D"none" class=3D"">seaside mailing list<br clear=3D"none" =
class=3D""><a shape=3D"rect" =
ymailto=3D"mailto:[email protected]" =
href=3D"mailto:[email protected]" =
class=3D"">[email protected]</a><br clear=3D"none" =
class=3D""><a shape=3D"rect" =
href=3D"http://lists.squeakfoundation.org/cgi-bin/mailman/listinfo/seaside=
" target=3D"_blank" =
class=3D"">http://lists.squeakfoundation.org/cgi-bin/mailman/listinfo/seas=
ide</a><br clear=3D"none" class=3D""></div></div>
</div>
</div></div>_______________________________________________<br =
class=3D"">seaside mailing list<br class=3D""><a =
href=3D"mailto:[email protected]" =
class=3D"">[email protected]</a><br =
class=3D"">http://lists.squeakfoundation.org/cgi-bin/mailman/listinfo/seas=
ide<br class=3D""></div></blockquote></div><br =
class=3D""></div></body></html>=
--Apple-Mail=_E3876D6F-33CF-4D74-B777-46A0A650F036--
--===============2558218463557300266==
Content-Type: text/plain; charset="utf-8"
MIME-Version: 1.0
Content-Transfer-Encoding: base64
Content-Disposition: inline
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18Kc2Vhc2lkZSBt
YWlsaW5nIGxpc3QKc2Vhc2lkZUBsaXN0cy5zcXVlYWtmb3VuZGF0aW9uLm9yZwpodHRwOi8vbGlz
dHMuc3F1ZWFrZm91bmRhdGlvbi5vcmcvY2dpLWJpbi9tYWlsbWFuL2xpc3RpbmZvL3NlYXNpZGUK
--===============2558218463557300266==--