diff --git a/client/index.html b/client/index.html index 217d51d1..5bb815d9 100644 --- a/client/index.html +++ b/client/index.html @@ -53,23 +53,25 @@ - - - - - - + diff --git a/client/js/chat.js b/client/js/chat.js index bb278435..68c54fac 100644 --- a/client/js/chat.js +++ b/client/js/chat.js @@ -30,39 +30,31 @@ $(function() { }); var tpl = []; - function render(id, json, partials) { - tpl[id] = tpl[id] || $(id).html(); - if (!json) { - // If no data is supplied, return the template instead. - // Handy when fetching partials. - return tpl[id]; - } - return Mustache.render( - tpl[id], - json, - partials || {} - ); + function render(id, json) { + tpl[id] = tpl[id] || Handlebars.compile($(id).html()); + return tpl[id](json); } + Handlebars.registerHelper( + "partial", + function(id) { + return new Handlebars.SafeString(render(id, this)); + } + ); + function handleEvent(event, json) { var data = json.data; switch (event) { case "network": var html = ""; - var partials = { - users: render("#users"), - messages: render("#messages"), - }; data.forEach(function(n) { - html += render( - "#windows", {windows: n.channels}, partials - ); + html += render("#windows", {windows: n.channels}); }); chat[0].innerHTML = html; sidebar.find("#list").html( - render("#networks", {networks: data}, {channels: render("#channels")}) + render("#networks", {networks: data}) ).find(".channel") .first() .addClass("active") @@ -104,13 +96,13 @@ $(function() { sidebar.find(".channel").removeClass("active"); $("#network-" + json.target).append( - render("#channels", {channels: data}) + render("#channels", {channels: [data]}) ).find(".channel") .last() .addClass("active"); chat.append( - render("#windows", {windows: data}) + render("#windows", {windows: [data]}) ).find(".window") .last() .find("input") @@ -124,8 +116,8 @@ $(function() { break; case "user": - var target = chat.find("#window-" + json.target).find(".users"); - target.html(render("#users", {users: data})); + var html = render("#users", {users: data}); + var target = chat.find("#window-" + json.target + " .users").html(html); break; case "message": @@ -138,7 +130,7 @@ $(function() { target = target.parent().find(".active"); } - var msg = $(render("#messages", {messages: data})) + var msg = $(render("#messages", {messages: [data]})); target = target.find(".messages"); target.append(msg); @@ -253,13 +245,6 @@ $(function() { $(this).closest(".window").find(".messages").scrollToBottom(); }); - chat.on("mouseover", ".text", function() { - var self = $(this); - if (!self.hasClass("parsed")) { - self.addClass("parsed").html(uri(self.html())); - } - }); - function uri(text) { return URI.withinString(text, function(url) { return "" + url + ""; diff --git a/lib/models.js b/lib/models.js index b6bb874a..d65841f6 100644 --- a/lib/models.js +++ b/lib/models.js @@ -30,7 +30,7 @@ models.Message = Backbone.Model.extend({ defaults: { type: "", time: "", - from: "", + from: "-!-", message: "", }, initialize: function() {