summaryrefslogtreecommitdiff
path: root/public/js/lib/views/room/chat.js
diff options
context:
space:
mode:
Diffstat (limited to 'public/js/lib/views/room/chat.js')
-rw-r--r--public/js/lib/views/room/chat.js62
1 files changed, 62 insertions, 0 deletions
diff --git a/public/js/lib/views/room/chat.js b/public/js/lib/views/room/chat.js
new file mode 100644
index 0000000..0932e47
--- /dev/null
+++ b/public/js/lib/views/room/chat.js
@@ -0,0 +1,62 @@
+var ChatView = View.extend({
+
+ el: "#chat",
+
+ template: $("#message_template").html(),
+
+ events: {
+ "submit form": "send",
+ "scroll #messages": "scroll",
+ },
+
+ initialize: function(socket){
+ var $msg = this.$msg = this.$("#message")
+ this.$messages = this.$("#messages")
+ this.messages = this.$messages.get(0)
+ this.$msg.focus()
+ $(window).focus(function(){ $msg.focus() })
+ },
+
+ seen: {},
+ add: function(msg){
+ var key = msg.date + "_" + msg.nick
+ if (key in this.seen) return
+ this.seen[key] = true
+
+ var $el = $( this.template )
+ $el.find(".nick").html(sanitize(msg.nick))
+ $el.find(".msg").html(sanitizeHTML(msg.msg))
+ this.$messages.append($el)
+ if (! this.scrolled) {
+ this.scrollToBottom()
+ }
+ },
+
+ send: function(e){
+ e && e.preventDefault()
+ var val = this.$msg.sanitize()
+ this.$msg.focus()
+ if (! val) return
+ this.$msg.val("")
+ var msg = {}
+ msg.room = room.name
+ msg.msg = val
+ msg.nick = user.username
+ msg.date = +new Date
+ this.add(msg)
+ app.socket.emit("message", msg)
+ },
+
+ empty: function(){
+ this.$messages.empty()
+ },
+
+ scrolled: false,
+ scroll: function(){
+ this.scrolled = (this.messages.scrollTop > this.messages.scrollHeight - this.$el.height() - 100)
+ },
+ scrollToBottom: function(){
+ this.messages.scrollTop = document.body.scrollHeight
+ }
+
+})