[web-devel] missing web component needed: server-side page control

Jeremy Shaw jeremy at n-heptane.com
Tue Jun 22 15:44:25 EDT 2010


This solution sounds like it has the server making a lot of the  
choices about how to modify the DOM. But it seems like that pushes a  
lot of work onto the server instead of spreading it out to the  
clients. Aside from driving up your server bandwidth/CPU usage, it  
seems like it would also incur more latency than doing the working on  
the client side?

That said, HSX can be parameterized to turn the literal XML into  
output in different ways by using different monads. So, if you write:

fragment :: (XMLGenerator m) => m (HSX.XML m)
fragment = <p>hello, world</p>

If you use the HSP monad, it will construct a value of type:

data XML = Element Name Attrs [Element] | CDATA Bool String

But if you use it with the HJScript monad, it will actually generate  
javascript code which creates the XML on the client.

So, that might be a start..

- jeremy

On Jun 22, 2010, at 10:27 AM, Alberto G. Corona wrote:

> I forgot to cc this to the list. sorry
> ---------- Forwarded message ----------
> From: Alberto G. Corona <agocorona at gmail.com>
> Date: 2010/6/22
> Subject: Re: [web-devel] missing web component needed: server-side  
> page control
> To: Michael Snoyman <michael at snoyman.com>
> Hi Michael,
> Great to know that you are interested!.
> 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.
> 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.
> 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:
> setInnerHTML element text=
>        modify the local XML element with XML DOM
>        if does not exist, exception raised
>        if success, add "element.innerHTML= text" to the Ajax queue  
> (the javascript listener will eval(uate) it in the client
> 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 ASPX.NET 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.
> 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...
> 2010/6/22 Michael Snoyman <michael at snoyman.com>
> 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're talking about here, so I would  
> definitely be interested in collaborating with you.
> I'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).
> I have to get back to "real work" for the rest of the day, but I'd  
> like to hear any other thoughts you have on the subject.
> Michael
> On Tue, Jun 22, 2010 at 2:23 PM, Alberto G. Corona <agocorona at gmail.com 
> > wrote:
> Hi web haskellers.
> A few days ago I mention the need to have  server-side page control
> available in Haskell. ASP.NET and JavaServer Faces have it.
> I would like to collaborate with anyone of you interested. I have not
> much time now but this can change in the coming weeks so I want to
> know the interest on the subject in advance. I also want to receive
> comments to the development plan.
> The main advantages are:
>   -No Javascript, no Ajax needed when developing dynamic HTML pages
> (All code becomes pure haskell in the server!!)
>  -No errors in advanced dynamic HTML code: all is statically typed
> haskell (someone bets more?)
>   -Clear separation of HTML presentation from page control code
>   -Extensibility: makes possible to create custom controls, like HTML
> tables automatically generated from haskell containers etc
> All this will unleash the full power of haskell in the Web!!!
> It is compatible and orthogonal with page templating and all other web
> stuff. I think that it is a  two month work.
> basically what we have to do is the following:
>   0 develop a Haskell HTML DOM library. Just 31 objects to manage  
> HTML trees
>      See the HTML DOM Objects Reference at
> http://www.w3schools.com/jsref/default.asp
>       I suppose that this is not yet done
>      Can make use of the XML structure defined in HXT
> http://hackage.haskell.org/package/hxt-8.5.2. HXT has namespace
>      support. This is needed for defining custom attributes and tags  
> (4 and 5).
>     each HTML DOM method will do two basic things:
>           a) update a copy of the HTML page tree in the SERVER
>           b) send trough an Ajax channel the equivalent javascript
> method, that will be executed in the web browser
>    3 create a minimum javascript module that:
>         read Ajax responses and execute them in the web browser, for
> the above functionality
>         listen for events and forward them to the server trough Ajax.
>    4 define additional XML attributes to be interspersed in the HTML  
> tree for
>        specifying url' s in the server where the server events will be
> forwarded  (for 3)
>           <button server:onclick="http://server/path...">
>    5 a mechanism for defining custom XML tags for extensibility: with
> the name, the parameters and the library code that handle it
>      example of custom tag inserted in the HTML: <t:table
> t:source="#{hasjkelldata} param1=......>
>   6 some templating that read 5 and produces a HTML tree and Haskell  
> code.
> So, people, feel free to question anything. This is just the starting
> point to put ideas in the table and discuss all of this
> _______________________________________________
> web-devel mailing list
> web-devel at haskell.org
> http://www.haskell.org/mailman/listinfo/web-devel
> _______________________________________________
> web-devel mailing list
> web-devel at haskell.org
> http://www.haskell.org/mailman/listinfo/web-devel

-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://www.haskell.org/pipermail/web-devel/attachments/20100622/5ecdafe4/attachment-0001.html

More information about the web-devel mailing list