Current section
Files
Jump to
Current section
Files
priv/nitro/src/index.erl
-module(index).
-compile(export_all).
-include_lib("nitro/include/nitro.hrl").
-include_lib("n2o/include/n2o.hrl").
-include_lib("kvs/include/cursors.hrl").
event(init) ->
Room = n2o:session(room),
Key = {topic,Room},
n2o:reg(Key),
n2o:reg(n2o:sid()),
nitro:clear(history),
nitro:update(logout, #button{id=logout, body="Logout " ++ n2o:user(), postback=logout}),
nitro:update(heading, [#h2{id=heading, body=Room}]),
nitro:update(upload, #upload{}),
nitro:update(send, #button{id=send, body= <<"Chat">>, postback=chat, source=[message] }),
[ event(#client{data=E}) || E <- lists:reverse(kvs:feed(Key)) ];
event(logout) ->
n2o:user([]),
nitro:redirect("/app/login.htm");
event(chat) ->
chat(nitro:q(message),nitro);
event(#client{data={'$msg',_,_,_,User,Message}}) ->
HTML = nitro:to_list(Message),
nitro:wire(#jq{target=message,method=[focus,select]}),
nitro:insert_top(history, nitro:render(#message{body=[#author{body=User},nitro:jse(HTML)]}));
event(#ftp{sid=Sid,filename=Filename,status={event,stop}}=Data) ->
Name = hd(lists:reverse(string:tokens(nitro:to_list(Filename),"/"))),
chat(nitro:render(#link{href=iolist_to_binary(["/app/",Sid,"/",Name]),body=Name}),index);
event(Event) ->
ok.
jse(X) -> X.
chat(Message,F) ->
Room = n2o:session(room),
User = n2o:user(),
Msg = {'$msg', kvs:seq([], []), [], [], User, F:jse(Message)},
kvs:append(Msg,{topic,Room}),
n2o:send({topic, Room}, #client{data = Msg}).