<br>I forgot to send this to the list. This answers also some questions about the idea of server page control. I don´t think in to eliminate the option of client code, not at all. but server control is neccesary to ease interactions that MUST use data in the server. <div>
<br></div><div>In fact, as I suggest here, pottentially, HJScript can be extended to make it run in the server or in the client depending on the requirements, just modifying (i guess) the underlying monad,  because it has many of the common functionalities needed.<br>
<div class="gmail_quote"><br>Hi michael,<div>More or less to solve these concrete problems is a requirement. I think neither using comunications  using algebraic data types, nor JSON neither HTML downloading of pierces. My idea is just to  send javascript sentences from server to client, and then evaluate ( with javascript &quot;eval&quot;) them in the client. </div>

<div><br></div><div>Details below:<br><div><br><div class="gmail_quote"><div class="im">2010/6/22 Michael Snoyman <span dir="ltr">&lt;<a href="mailto:michael@snoyman.com" target="_blank">michael@snoyman.com</a>&gt;</span><br>
</div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<div dir="ltr">I think it would be useful if we spoke in more concrete terms: in particular, let&#39;s figure out some real world problems we want to solve, instead of designing the perfect technology. I&#39;ll start with some simple problems, feel free to add some of your own:<div class="im">
<div>

<br></div><div>1) Form validation. Here&#39;s an example from a project I&#39;m working on now: disable field B if field A has one of a list of values. We clearly need to ensure server-side that field B has no value set if the conditions for A are fulfilled, but we&#39;d like to &quot;gray out&quot; the field client side.</div>


<div><br></div></div></div></blockquote><div>because I have a copy of the HTML tree in the server( the way to maintain synchronization trough event forwarding to the server is not described here) I can check te value of the field A. If A meets the condition I just send to the browser the HTML DOM sentence</div>

<div><br></div><div>&quot;form.B.style.active=Disabled&quot; </div><div><br></div><div>(This is javascript pseudocode the real sentence look similar, but I don´t care now to check the documentation and look for the details)</div>

<div><br></div><div>in the browser the execution of </div><div><br></div><div>eval(&quot;form.B.style.active=Disabled&quot; )</div><div><br></div><div>will disable the field. </div><div><br></div><div>If we develop a  XML DOM library that generate javascript strings, then the haskell code in the server would map 1:1 with the javascript code.For the javascript developer will be muchi like developing javascript in the client. In fact the code would share ,much ideas and code with HJScript because HJScript does also generate javascript strings. I think that  we can extend HJSCript to make it run either in the server or the client, depending on the choices. HJScript uses HTML DOM.</div>

<div><br></div><div>This case does a lot less sense if the control code does not make use of data in the server. For example, if the list of values of a combo box depends on the choice or values in another field in the form.</div>
<div class="im">
<div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr"><div></div><div>2) Ajax loading of pieces of pages. We can obviously make this very simple (&quot;download some HTML from this URL and stick it in this div&quot;) or much more complex (&quot;serialize this Haskell data structure to JSON, transfer it, parse it client side and build up the DOM tree&quot;).</div>


<div><br></div></div></blockquote></div><div>Just forward  and eval the string </div><div><br></div><div>&quot;divName.innerHTML=\&quot;text of th HTML to include\&quot;&quot; </div><div class="im"><div><br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">

<div dir="ltr"><div></div><div>3) Perhaps not what you were thinking about, but easy integration with Javascript widgets. Here&#39;s an example: a photo gallery that has forward-next buttons. When Javascript is disabled, the server generates a new HTML page for each request. With Javascript enabled, it uses something like jquerytools.</div>


<div><br></div></div></blockquote></div><div>This requires the detection of this condition. At the beginning, if the jscript code deoes not respond, ttoug the Ajax channel, then use HTML navigation.</div><div><div></div>
<div class="h5"><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<div dir="ltr"><div></div><div>These are the kinds of problems I was hoping to tackle with widgets. Let me know if this is not at all what you had in mind.</div><div><br></div><div><font color="#888888">Michael</font><div>

<div></div><div><br><div><div><br><div class="gmail_quote">On Tue, Jun 22, 2010 at 6:27 PM, Alberto G. Corona <span dir="ltr">&lt;<a href="mailto:agocorona@gmail.com" target="_blank">agocorona@gmail.com</a>&gt;</span> wrote:<br>


<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">I forgot to cc this to the list. sorry<div><div></div><div><br><br><div class="gmail_quote">---------- Forwarded message ----------<br>


From: <b class="gmail_sendername">Alberto G. Corona</b> <span dir="ltr">&lt;<a href="mailto:agocorona@gmail.com" target="_blank">agocorona@gmail.com</a>&gt;</span><br>
Date: 2010/6/22<br>Subject: Re: [web-devel] missing web component needed: server-side page control<br>To: Michael Snoyman &lt;<a href="mailto:michael@snoyman.com" target="_blank">michael@snoyman.com</a>&gt;<br><br><br>Hi Michael,<div>


Great to know that you are interested!.</div>
<div><br></div><div>Good to know that you are working on widgets. I´m thinking about the same idea, but I ephasize the dynamic nature, that is , not only the widgets could be populated from haskell data structures, but will use the server side control to make them dynamic, so they can  interact with haskell server code without refreshing the whole page.</div>




<div><br></div><div>I tough on the need of an HTML DOM, because in my view,  we need a 1:1 mapping between the browser and the server in  XML manipulation primitives. Because Javascript uses HTML DOM. Much of HTML DOM methods are a single call to the corresponding XML DOM in HXT. But some other, like style manipulation are different. </div>




<div><br></div><div>My idea is to have in the server a copy of the HTML tree. Any modification on the server will be forwarded to the client.  For example, the innerHTML method should be executed in the server as such:</div>




<div><br></div><div>setInnerHTML element text= </div><div>       modify the local XML element with XML DOM</div><div>       if does not exist, exception raised</div><div>       if success, add &quot;element.innerHTML= text&quot; to the Ajax queue (the javascript listener will eval(uate) it in the client</div>




<div><br></div><div>having a local XML tree copy permits not only checking for errors in the server but also to query for document properties. referential transparency permits to share the unmodified XML branches for many client sessions. But I don´t went deep on thinking about it. neither I know the technology used in <a href="http://ASPX.NET" target="_blank">ASPX.NET</a> of JavaServer Faces to do server control. It is really difficult to guess it doe to the confusing documentation. I can only guess  from the functionalities.  </div>




<div><br></div><div>Maybe we have to do a research on the best way to communicating client and server for server control, the methods to be used etc...</div><div><br></div><div><br></div><div><br></div><div><div class="gmail_quote">




2010/6/22 Michael Snoyman <span dir="ltr">&lt;<a href="mailto:michael@snoyman.com" target="_blank">michael@snoyman.com</a>&gt;</span><div><div></div><div><br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">




<div dir="ltr">Sounds interesting. I just released Yesod 0.3.0, and had in mind that 0.4.0 will focus on a concept I was calling widgets. It sounds very similar to what you&#39;re talking about here, so I would definitely be interested in collaborating with you.<div>





<br></div><div>I&#39;m not sure if writing DOM manipulation code ourselves is necessarily the right approach. It might make more sense to simply leverage an existing Javascript library (my personal preference being jQuery).</div>





<div><br></div><div>I have to get back to &quot;real work&quot; for the rest of the day, but I&#39;d like to hear any other thoughts you have on the subject.</div><div><br></div><div>Michael<br><br><div class="gmail_quote">




<div><div></div><div>
On Tue, Jun 22, 2010 at 2:23 PM, Alberto G. Corona <span dir="ltr">&lt;<a href="mailto:agocorona@gmail.com" target="_blank">agocorona@gmail.com</a>&gt;</span> wrote:<br></div></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">




<div><div></div><div>
Hi web haskellers.<br>
A few days ago I mention the need to have  server-side page control<br>
available in Haskell. <a href="http://ASP.NET" target="_blank">ASP.NET</a> and JavaServer Faces have it.<br>
I would like to collaborate with anyone of you interested. I have not<br>
much time now but this can change in the coming weeks so I want to<br>
know the interest on the subject in advance. I also want to receive<br>
comments to the development plan.<br>
<br>
The main advantages are:<br>
  -No Javascript, no Ajax needed when developing dynamic HTML pages<br>
(All code becomes pure haskell in the server!!)<br>
<br>
  -No errors in advanced dynamic HTML code: all is statically typed<br>
haskell (someone bets more?)<br>
<br>
  -Clear separation of HTML presentation from page control code<br>
<br>
  -Extensibility: makes possible to create custom controls, like HTML<br>
tables automatically generated from haskell containers etc<br>
<br>
All this will unleash the full power of haskell in the Web!!!<br>
<br>
It is compatible and orthogonal with page templating and all other web<br>
stuff. I think that it is a  two month work.<br>
<br>
basically what we have to do is the following:<br>
<br>
  0 develop a Haskell HTML DOM library. Just 31 objects to manage HTML trees<br>
     See the HTML DOM Objects Reference at<br>
<a href="http://www.w3schools.com/jsref/default.asp" target="_blank">http://www.w3schools.com/jsref/default.asp</a><br>
      I suppose that this is not yet done<br>
      Can make use of the XML structure defined in HXT<br>
<a href="http://hackage.haskell.org/package/hxt-8.5.2" target="_blank">http://hackage.haskell.org/package/hxt-8.5.2</a>. HXT has namespace<br>
      support. This is needed for defining custom attributes and tags (4 and 5).<br>
<br>
     each HTML DOM method will do two basic things:<br>
          a) update a copy of the HTML page tree in the SERVER<br>
<br>
          b) send trough an Ajax channel the equivalent javascript<br>
method, that will be executed in the web browser<br>
<br>
   3 create a minimum javascript module that:<br>
        read Ajax responses and execute them in the web browser, for<br>
the above functionality<br>
        listen for events and forward them to the server trough Ajax.<br>
<br>
   4 define additional XML attributes to be interspersed in the HTML tree for<br>
       specifying url&#39; s in the server where the server events will be<br>
forwarded  (for 3)<br>
           &lt;button server:onclick=&quot;<a href="http://server/path.." target="_blank">http://server/path..</a>.&quot;&gt;<br>
<br>
   5 a mechanism for defining custom XML tags for extensibility: with<br>
the name, the parameters and the library code that handle it<br>
      example of custom tag inserted in the HTML: &lt;t:table<br>
t:source=&quot;#{hasjkelldata} param1=......&gt;<br>
<br>
   6 some templating that read 5 and produces a HTML tree and Haskell code.<br>
<br>
<br>
So, people, feel free to question anything. This is just the starting<br>
point to put ideas in the table and discuss all of this<br></div></div>
_______________________________________________<br>
web-devel mailing list<br>
<a href="mailto:web-devel@haskell.org" target="_blank">web-devel@haskell.org</a><br>
<a href="http://www.haskell.org/mailman/listinfo/web-devel" target="_blank">http://www.haskell.org/mailman/listinfo/web-devel</a><br>
</blockquote></div><br></div></div>
</blockquote></div></div></div><br></div>
</div><br>
</div></div><br>_______________________________________________<br>
web-devel mailing list<br>
<a href="mailto:web-devel@haskell.org" target="_blank">web-devel@haskell.org</a><br>
<a href="http://www.haskell.org/mailman/listinfo/web-devel" target="_blank">http://www.haskell.org/mailman/listinfo/web-devel</a><br>
<br></blockquote></div><br></div></div></div></div></div></div>
</blockquote></div></div></div><br></div></div>
</div><br></div>