| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071 | <!doctype html><html><head>    <script src="//cdn.jsdelivr.net/jquery/2.1.4/jquery.min.js"></script>    <script src="//cdn.jsdelivr.net/sockjs/1.0.1/sockjs.min.js"></script>    <style>      .box {          width: 300px;          float: left;          margin: 0 20px 0 20px;      }      .box div, .box input {          border: 1px solid;          -moz-border-radius: 4px;          border-radius: 4px;          width: 100%;          padding: 0px;          margin: 5px;      }      .box div {          border-color: grey;          height: 300px;          overflow: auto;      }      .box input {          height: 30px;      }      h1 {          margin-left: 30px;      }      body {          background-color: #F0F0F0;          font-family: "Arial";      }    </style></head><body lang="en">    <h1>SockJS Express example</h1>    <div id="first" class="box">      <div></div>      <form><input autocomplete="off" value="Type here..."></input></form>    </div>    <script>        var sockjs_url = '/echo';        var sockjs = new SockJS(sockjs_url);        $('#first input').focus();        var div  = $('#first div');        var inp  = $('#first input');        var form = $('#first form');        var print = function(m, p) {            p = (p === undefined) ? '' : JSON.stringify(p);            div.append($("<code>").text(m + ' ' + p));            div.append($("<br>"));            div.scrollTop(div.scrollTop()+10000);        };        sockjs.onopen    = function()  {print('[*] open', sockjs.protocol);};        sockjs.onmessage = function(e) {print('[.] message', e.data);};        sockjs.onclose   = function()  {print('[*] close');};        form.submit(function() {            print('[ ] sending', inp.val());            sockjs.send(inp.val());            inp.val('');            return false;        });    </script></body></html>
 |