<br><br><div class="gmail_quote">On Thu, Dec 13, 2012 at 11:45 AM, Loïc Hoguin <span dir="ltr"><<a href="mailto:essen@ninenines.eu" target="_blank">essen@ninenines.eu</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<div class="im">On 12/13/2012 11:17 AM, Joe Armstrong wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
ezwebframe<br>
==========<br>
<br>
<a href="https://github.com/joearms/ezwebframe" target="_blank">https://github.com/joearms/<u></u>ezwebframe</a><br>
<br>
Pronounced "Easy web frame."<br>
<br>
About<br>
=====<br>
<br>
Ezwebframe attempts to make web programming just a little bit easier.<br>
<br>
 From Erlang point of view the browser *is* an Erlang process.<br>
<br>
Assume we have a web page populated with divs. For example:<br>
<br>
     <div id="a"><br>
       ...<br>
     </div><br>
<br>
     <div id="b"><br>
       ...<br>
     </div><br>
<br>
Erlang thinks the browser is a process. To fill div a with HTML an<br>
Erlang process evaluates the command:<br>
<br>
      Browser ! [{cmd, fill_div}, {id, a}, {txt, B}]<br>
<br>
Where B is a binary containing HTML.<br>
</blockquote>
<br></div>
Why not implement this for the modifications instead, though? It's well defined and works very well: <a href="http://taconite.sourceforge.net/" target="_blank">http://taconite.sourceforge.<u></u>net/</a><br></blockquote>
<div><br>I don't understand ...<br><br>What actually happens is this ...<br><br>     Browser ! [{cmd, fill_div}, {id, X}, {txt, Y}]<br><br>gets converted to the JS function call<br><br>    fill_div(o)<br><br>where o = {cmd:'fill_div', id:X, txt:Y}<br>
<br>and I have pre-defined<br><br>fill_div as<br><br>function fill_div(o){<br>     $("#" + <a href="http://o.id">o.id</a>).html(o.txt);<br>}<br><br>(assumes jQuery)<br><br>If you want to extend the system you say<br>
<br>     Browser ! [{cmd,new_cmd},{x,...},{y,...}]<br><br>and supply a new js function new_cmd(o) which will be called with<br>o = {cmd:'new_cmd'},{x,...},...}<br><br>This provides an extensible abstract interface between the browser and Erlang.<br>
<br>Websockets + JSON + a tiny bit of glue = good stuff<br><br>/Joe<br><br><br><br> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<br>
Don't need to be XML of course, but the actions defined are a good start of what frontend people usually want.<span class="HOEnZb"><font color="#888888"><br></font></span></blockquote><div><br><br>So if you want an action kick_ball I'd write<br>
<br>     Browser ! [{cmd,kick_ball}, {velocity, 23}, ...]<br><br>in Erlang, and provide some JS to do the kicking<br><br>    function kick_ball(o){<br>         ...<br>     }<br><br>which would be called with o = {cmd:'kick_ball', velocity:23, ...}<br>
<br>/Joe<br><br><br> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><span class="HOEnZb"><font color="#888888">
<br>
-- <br>
Loďc Hoguin<br>
Erlang Cowboy<br>
Nine Nines<br>
<a href="http://ninenines.eu" target="_blank">http://ninenines.eu</a><br>
</font></span></blockquote></div><br>