diff options
-rw-r--r-- | CHANGELOG | 19 | ||||
-rw-r--r-- | config.json | 1 | ||||
-rw-r--r-- | index.html | 7 | ||||
-rw-r--r-- | index.js | 61 | ||||
-rw-r--r-- | package.json | 2 |
5 files changed, 70 insertions, 20 deletions
diff --git a/CHANGELOG b/CHANGELOG new file mode 100644 index 0000000..66cacb3 --- /dev/null +++ b/CHANGELOG @@ -0,0 +1,19 @@ +0.1.0 +----- + - Initial alpha release with basic IRC functionality and commands + - Support /join and /part of channels + - Can send and receive messages in channels + - PMs will be shown and can be replied to in their tab, but no way to initiate PMs + - Can send /whois and channel /list commands + - Interpret join, part, quit, kill, kick, and mode messages + - Display topics and user lists in channels +0.1.1 +----- + - Added ability to send PMs with /msg +0.2.0 +----- + - Added basic connection UI at startup (automatically populated from config.json) +0.2.1 +----- + - Create channel tab when names list is received, to support bouncers + - Added SSL connection option diff --git a/config.json b/config.json index 7f4fb11..0d09a15 100644 --- a/config.json +++ b/config.json @@ -2,6 +2,7 @@ "nick": "wclient", "server": "irc.blatech.net", "port": 6667, + "password": "", "channels": [ "#wtest", "#wtest2" @@ -23,7 +23,12 @@ </div> <div class="ui divider"></div> <div class="ui input" id="password-container"> - <input placeholder="Password" id="password-input" type="text"> + <input placeholder="Password" id="password-input" type="password"> + </div> + <div class="ui divider"></div> + <div class="ui toggle checkbox"> + <input id="ssl-input" type="checkbox"> + <label>Enable SSL</label> </div> <div class="ui divider"></div> <button class="ui button" id="connect">Connect</button> @@ -5,7 +5,7 @@ var config = require('./config.json') var pjson = require('./package.json'); const progName = pjson.name; const version = pjson.version; -const myNick = config.nick; +var myNick = config.nick; $(document).ready(function() { $("#send-message").focus(); @@ -21,31 +21,43 @@ const irc = require('irc'); $("#server-input").val(config.server); $("#port-input").val(config.port); $("#nick-input").val(config.nick); +$("#password-input").val(config.password); var channels = config.channels var txtChannels = ""; config.channels.forEach(function(channel) { - txtChannels += channel + ", " + txtChannels += channel + " " }); -txtChannels = txtChannels.substring(0, txtChannels.length-2) +txtChannels = txtChannels.substring(0, txtChannels.length-1) $("#channel-input").val(txtChannels); -const client = new irc.Client(); +var client; $('#connect').on('click', function() { - client.server = $("#server-input").val(); - client.nick = $("#nick-input").val(config.nick); +console.log($("#channel-input").val()); + channels = $("#channel-input").val().split(" "); + myNick = $("#nick-input").val() + ssl = ($("#ssl-input:checked").val() == "on"); + console.log(ssl); + client = new irc.Client($("#server-input").val(), myNick, { + channels: channels, + userName: myNick, + password: $("#password-input").val(), + port: $("#port-input").val(), + secure: ssl, + selfSigned: true, + certExpired: true +}); + createListeners(client); + + $("#chan-container").show(); $("#message").show(); $("#connect-container").hide(); - client.connect(); }); -// const client = new irc.Client(config.server, myNick, { -// channels: config.channels, -// userName: [myNick] -// }); + @@ -102,7 +114,7 @@ $("#send-message").keypress(function(e) { nick = message.split(" ")[1]; message = message.substring(6+nick.length, message.length); sendPm(message, nick); - } else if (message.indexOf("/" == 0)) { + } else if (message.indexOf("/") == 0) { command = message.split(" ")[0].replace("/",""); commandArgs = message.replace(command + " ", ""); client.send("kick", ["#wtest", "wjoe__", "test"]); @@ -122,7 +134,7 @@ $("#send-message").keypress(function(e) { function sendMsg(message, channel) { client.say(channel, message); var chanTab = $("[data-tab=chan-"+ channel.replace("#","") +"].chat"); - chanTab.append("<p class='chat-line'><" + "wclient" + "> " + message +"</p>"); + chanTab.append("<p class='chat-line'><" + myNick + "> " + message +"</p>"); chanTab.scrollTop(chanTab.prop("scrollHeight")); } @@ -147,8 +159,10 @@ function sendPm(message, nick) { chatTab.scrollTop(chanTab.prop("scrollHeight")); } -function joinChannel(channel) { - client.join(channel); +function joinChannel(channel, sendJoin) { + if (sendJoin) { + client.join(channel); + } channel = channel.replace("#",""); chanId = $(".active.chat").attr("data-id") @@ -219,6 +233,9 @@ function removeChannel(channel, sendPart) { $("[data-id="+(chanId-1)+"]").addClass("active"); } +function createListeners(client) { + + client.addListener('error', function(message) { console.log('error: ', message); }); @@ -238,8 +255,8 @@ client.addListener('motd', function(motd) { client.addListener('raw', function(message) { var statusTab = $("[data-tab=status].chat"); statusCmds = ["NOTICEAUTH", "rpl_welcome, rpl_yourhoust", "rpl_created", "rpl_myinfo", "rpl_isupport", "rpl_luserclient", "rpl_luserop", "rpl_luserme", "rpl_luserchannels", "rpl_localusers", "rpl_globalusers"]; - if (statusCmds.indexOf(message.command) > -1) { - statusTab.append("<p class='chat-line'>"+message.args+"</p>") + if (statusCmds.indexOf(message.command) > -1 || message.command.startsWith("rpl_")) { + statusTab.append("<p class='chat-line'>"+message.command + ": " +message.args+"</p>") statusTab.scrollTop(statusTab.prop("scrollHeight")); } }); @@ -250,9 +267,12 @@ client.addListener('ctcp-version', function(from, to, text, message) { client.addListener('names', function(channel, nicks) { + channel = channel.replace("#","") + if($(".ui.tab[data-tab=chan-"+channel+"]").length == 0) { + joinChannel(channel, false) + } for(nick in nicks) { var mode = nicks[nick]; - channel = channel.replace("#","") if($(".ui.users[data-tab=chan-"+channel+"] [data-nick="+nick+"]").length == 0) { $(".ui.users[data-tab=chan-"+channel+"]").append("<div class=item data-nick="+nick+">"+mode+nick+"</div>") } @@ -335,6 +355,9 @@ client.addListener('kill', function(nick, reason, channels, message) { client.addListener('topic', function(channel, topic, nick, message) { channel = channel.replace("#",""); var chatTab = $("[data-tab=chan-"+ channel +"].chat"); + if($(".ui.tab[data-tab=chan-"+channel+"]").length == 0) { + joinChannel(channel, false) + } chatTab.append("<p class='chat-line'>Topic for #"+channel+" is "+topic+" - set by "+nick+" at "+message.args[3]+"</p>") var topicTab = $("[data-tab=chan-"+ channel +"].topic"); topicTab.html("<p class='topic-line'>"+topic+"</p>") @@ -419,3 +442,5 @@ client.addListener('channellist', function(channelList) { statusTab.scrollTop(statusTab.prop("scrollHeight")); } }); + +} diff --git a/package.json b/package.json index 60e1d96..d635fce 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "blachat", - "version": "0.1.0", + "version": "0.2.1", "description": "A modern IRC client", "license": "GPL-3.0", "repository": "http://www.blatech.co.uk/wjoe/blachat", |