mirror of
https://github.com/sinatra/sinatra
synced 2023-03-27 23:18:01 -04:00
bfabbe7861
currently this demo is not working, this is because when $("form") bind "submit" event, the form tag is not in DOM yet. Need to move form before the binding.
61 lines
1.3 KiB
Ruby
Executable file
61 lines
1.3 KiB
Ruby
Executable file
#!/usr/bin/env ruby -I ../lib -I lib
|
|
# coding: utf-8
|
|
require 'sinatra'
|
|
set :server, 'thin'
|
|
connections = []
|
|
|
|
get '/' do
|
|
halt erb(:login) unless params[:user]
|
|
erb :chat, :locals => { :user => params[:user].gsub(/\W/, '') }
|
|
end
|
|
|
|
get '/stream', :provides => 'text/event-stream' do
|
|
stream :keep_open do |out|
|
|
connections << out
|
|
out.callback { connections.delete(out) }
|
|
end
|
|
end
|
|
|
|
post '/' do
|
|
connections.each { |out| out << "data: #{params[:msg]}\n\n" }
|
|
204 # response without entity body
|
|
end
|
|
|
|
__END__
|
|
|
|
@@ layout
|
|
<html>
|
|
<head>
|
|
<title>Super Simple Chat with Sinatra</title>
|
|
<meta charset="utf-8" />
|
|
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js"></script>
|
|
</head>
|
|
<body><%= yield %></body>
|
|
</html>
|
|
|
|
@@ login
|
|
<form action='/'>
|
|
<label for='user'>User Name:</label>
|
|
<input name='user' value='' />
|
|
<input type='submit' value="GO!" />
|
|
</form>
|
|
|
|
@@ chat
|
|
<pre id='chat'></pre>
|
|
<form>
|
|
<input id='msg' placeholder='type message here...' />
|
|
</form>
|
|
|
|
<script>
|
|
// reading
|
|
var es = new EventSource('/stream');
|
|
es.onmessage = function(e) { $('#chat').append(e.data + "\n") };
|
|
|
|
// writing
|
|
$("form").on('submit',function(e) {
|
|
$.post('/', {msg: "<%= user %>: " + $('#msg').val()});
|
|
$('#msg').val(''); $('#msg').focus();
|
|
e.preventDefault();
|
|
});
|
|
</script>
|
|
|