diff --git a/build.sh b/build.sh
index f02b220..36ee2de 100755
--- a/build.sh
+++ b/build.sh
@@ -11,7 +11,7 @@ if ! type handlebars &> /dev/null; then
fi
# Compile the templates
-handlebars -e tpl -f client/js/shout.templates.js client/templates/
+handlebars -e tpl -f client/js/shout.templates.js client/views/
# Uglify the javascript libraries
# See: Gruntfile.js
diff --git a/client/js/shout.templates.js b/client/js/shout.templates.js
index af59749..64d70da 100644
--- a/client/js/shout.templates.js
+++ b/client/js/shout.templates.js
@@ -88,6 +88,7 @@ templates['msg'] = template({"1":function(depth0,helpers,partials,data) {
return " \n";
},"6":function(depth0,helpers,partials,data) {
diff --git a/client/templates/chan.tpl b/client/views/chan.tpl
similarity index 100%
rename from client/templates/chan.tpl
rename to client/views/chan.tpl
diff --git a/client/templates/chat.tpl b/client/views/chat.tpl
similarity index 100%
rename from client/templates/chat.tpl
rename to client/views/chat.tpl
diff --git a/client/templates/msg.tpl b/client/views/msg.tpl
similarity index 84%
rename from client/templates/msg.tpl
rename to client/views/msg.tpl
index f81eb24..fdfe090 100644
--- a/client/templates/msg.tpl
+++ b/client/views/msg.tpl
@@ -5,7 +5,7 @@
{{#if from}}
-
+
{{/if}}
diff --git a/client/templates/network.tpl b/client/views/network.tpl
similarity index 100%
rename from client/templates/network.tpl
rename to client/views/network.tpl
diff --git a/client/templates/toggle.tpl b/client/views/toggle.tpl
similarity index 100%
rename from client/templates/toggle.tpl
rename to client/views/toggle.tpl
diff --git a/client/templates/user.tpl b/client/views/user.tpl
similarity index 100%
rename from client/templates/user.tpl
rename to client/views/user.tpl
diff --git a/src/models/chan.js b/src/models/chan.js
index 55f527f..3664c12 100644
--- a/src/models/chan.js
+++ b/src/models/chan.js
@@ -41,6 +41,15 @@ Chan.prototype.sortUsers = function() {
}, this);
};
+Chan.prototype.getMode = function(name) {
+ var user = _.find(this.users, {name: name});
+ if (user) {
+ return user.mode;
+ } else {
+ return "";
+ }
+};
+
Chan.prototype.toJSON = function() {
var clone = _.clone(this);
clone.messages = clone.messages.slice(-100);
diff --git a/src/plugins/irc-events/kick.js b/src/plugins/irc-events/kick.js
index 0ee6a5e..88e3729 100644
--- a/src/plugins/irc-events/kick.js
+++ b/src/plugins/irc-events/kick.js
@@ -4,26 +4,34 @@ var Msg = require("../../models/msg");
module.exports = function(irc, network) {
var client = this;
irc.on("kick", function(data) {
+ var from = data.nick;
var chan = _.findWhere(network.channels, {name: data.channel});
+ var mode = chan.getMode(from);
+
if (typeof chan === "undefined") {
return;
}
+
if (data.client == irc.me) {
chan.users = [];
} else {
chan.users = _.without(chan.users, _.findWhere(chan.users, {name: data.client}));
}
+
client.emit("users", {
chan: chan.id,
users: chan.users
});
+
var self = false;
if (data.nick.toLowerCase() == irc.me.toLowerCase()) {
self = true;
}
+
var msg = new Msg({
type: Msg.Type.KICK,
- from: data.nick,
+ mode: mode,
+ from: from,
text: data.client,
self: self
});
diff --git a/src/plugins/irc-events/message.js b/src/plugins/irc-events/message.js
index 2c583e1..d1eb789 100644
--- a/src/plugins/irc-events/message.js
+++ b/src/plugins/irc-events/message.js
@@ -48,9 +48,11 @@ module.exports = function(irc, network) {
chan.unread++;
}
+ var name = data.from;
var msg = new Msg({
type: type || Msg.Type.MESSAGE,
- from: data.from,
+ mode: chan.getMode(name),
+ from: name,
text: text,
self: self
});
diff --git a/src/plugins/irc-events/mode.js b/src/plugins/irc-events/mode.js
index 95bf8ea..9664837 100644
--- a/src/plugins/irc-events/mode.js
+++ b/src/plugins/irc-events/mode.js
@@ -9,17 +9,18 @@ module.exports = function(irc, network) {
setTimeout(function() {
irc.write("NAMES " + data.target);
}, 200);
- var nick = data.nick;
- if (nick.indexOf(".") !== -1) {
- nick = data.target;
+ var from = data.nick;
+ if (from.indexOf(".") !== -1) {
+ from = data.target;
}
var self = false;
- if (nick.toLowerCase() == irc.me.toLowerCase()) {
+ if (from.toLowerCase() == irc.me.toLowerCase()) {
self = true;
}
var msg = new Msg({
type: Msg.Type.MODE,
- from: nick,
+ mode: chan.getMode(from),
+ from: from,
text: data.mode + " " + data.client,
self: self
});
diff --git a/src/plugins/irc-events/part.js b/src/plugins/irc-events/part.js
index ceeb199..82bee8b 100644
--- a/src/plugins/irc-events/part.js
+++ b/src/plugins/irc-events/part.js
@@ -8,13 +8,14 @@ module.exports = function(irc, network) {
if (typeof chan === "undefined") {
return;
}
- if (data.nick == irc.me) {
+ var from = data.nick;
+ if (from == irc.me) {
network.channels = _.without(network.channels, chan);
client.emit("part", {
chan: chan.id
});
} else {
- var user = _.findWhere(chan.users, {name: data.nick});
+ var user = _.findWhere(chan.users, {name: from});
chan.users = _.without(chan.users, user);
client.emit("users", {
chan: chan.id,
@@ -22,7 +23,8 @@ module.exports = function(irc, network) {
});
var msg = new Msg({
type: Msg.Type.PART,
- from: data.nick
+ mode: chan.getMode(from),
+ from: from
});
chan.messages.push(msg);
client.emit("msg", {
diff --git a/src/plugins/irc-events/quit.js b/src/plugins/irc-events/quit.js
index f6cb63b..b60d334 100644
--- a/src/plugins/irc-events/quit.js
+++ b/src/plugins/irc-events/quit.js
@@ -5,7 +5,8 @@ module.exports = function(irc, network) {
var client = this;
irc.on("quit", function(data) {
network.channels.forEach(function(chan) {
- var user = _.findWhere(chan.users, {name: data.nick});
+ var from = data.nick;
+ var user = _.findWhere(chan.users, {name: from});
if (typeof user === "undefined") {
return;
}
@@ -16,7 +17,8 @@ module.exports = function(irc, network) {
});
var msg = new Msg({
type: Msg.Type.QUIT,
- from: data.nick
+ mode: chan.getMode(from),
+ from: from
});
chan.messages.push(msg);
client.emit("msg", {
diff --git a/src/plugins/irc-events/topic.js b/src/plugins/irc-events/topic.js
index e13bfaa..c12033f 100644
--- a/src/plugins/irc-events/topic.js
+++ b/src/plugins/irc-events/topic.js
@@ -15,6 +15,7 @@ module.exports = function(irc, network) {
}
var msg = new Msg({
type: Msg.Type.TOPIC,
+ mode: chan.getMode(from),
from: from,
text: data.topic,
self: self