From b313f9ede3a3d72b26dcbb639cfa5fed3ad8009b Mon Sep 17 00:00:00 2001 From: Darren Date: Sat, 23 Jun 2012 21:51:51 +0100 Subject: [PATCH] Start of gateway integration, panel panes --- client/js/model.js | 113 +++++++++++++++++++++++++++++++++++++++++++++ client/js/view.js | 22 +++++++-- 2 files changed, 132 insertions(+), 3 deletions(-) diff --git a/client/js/model.js b/client/js/model.js index 4e01ae3..b64ea7f 100755 --- a/client/js/model.js +++ b/client/js/model.js @@ -2,6 +2,8 @@ /*global kiwi */ kiwi.model = {}; + + kiwi.model.MemberList = Backbone.Collection.extend({ model: kiwi.model.Member, comparator: function (a, b) { @@ -52,9 +54,17 @@ kiwi.model.MemberList = Backbone.Collection.extend({ }, initialize: function (options) { this.view = new kiwi.view.MemberList({"model": this, "name": options.name}); + }, + getByNick: function (nick) { + return this.find(function (m) { + return nick === m.get("nick"); + }); } }); + + + kiwi.model.Member = Backbone.Model.extend({ sortModes: function (modes) { return modes.sort(function (a, b) { @@ -128,6 +138,14 @@ kiwi.model.Member = Backbone.Model.extend({ } }); + + + + + + + + kiwi.model.ChannelList = Backbone.Collection.extend({ model: kiwi.model.Channel, comparator: function (chan) { @@ -135,6 +153,8 @@ kiwi.model.ChannelList = Backbone.Collection.extend({ } }); + + // TODO: Channel modes kiwi.model.Channel = Backbone.Model.extend({ initialize: function (attributes) { @@ -187,4 +207,97 @@ kiwi.model.Channel = Backbone.Model.extend({ this.set({"backscroll": bs}, {silent:true}); this.trigger("msg", tmp); } +}); + + + + + + + + + + + + + + + + + + + +kiwi.model.PanelList = Backbone.Collection.extend({ + model: kiwi.model.Panel, + comparator: function (chan) { + return chan.get("name"); + }, + initialize: function () { + this.server = new kiwi.model.Server({"name": kiwi.gateway.network_name}); + this.view = new kiwi.view.Tabs({"el": $('#toolbar .panellist')[0], "model": this}); + + kiwi.currentPanel = this.server; + }, + getByName: function (name) { + return this.find(function (c) { + return name === c.get("name"); + }); + } +}); + + + + +kiwi.model.Panel = Backbone.Model.extend({ + initialize: function (attributes) { + var name = this.get("name") || ""; + this.view = new kiwi.view.Panel({"model": this, "name": name}); + this.set({ + "backscroll": [], + "name": name + }, {"silent": true}); + + this.isChannel = false; + }, + + addMsg: function (nick, msg, type, opts) { + var message_obj, bs, d; + + opts = opts || {}; + + // Time defaults to now + if (!opts || typeof opts.time === 'undefined') { + d = new Date(); + opts.time = d.getHours().toString().lpad(2, "0") + ":" + d.getMinutes().toString().lpad(2, "0") + ":" + d.getSeconds().toString().lpad(2, "0"); + } + + // CSS style defaults to empty string + if (!opts || typeof opts.style === 'undefined') { + opts.style = ''; + } + + // Run through the plugins + message_obj = {"msg": msg, "time": opts.time, "nick": nick, "chan": this.get("name"), "style": opts.style}; + //tmp = kiwi.plugs.run('addmsg', message_obj); + if (!message_obj) { + return; + } + + // The CSS class (action, topic, notice, etc) + if (typeof message_obj.type !== "string") { + message_obj.type = ''; + } + + // Make sure we don't have NaN or something + if (typeof message_obj.msg !== "string") { + message_obj.msg = ''; + } + + // Update the scrollback + bs = this.get("backscroll"); + bs.push(message_obj) + this.set({"backscroll": bs}, {silent:true}); + + this.trigger("msg", message_obj); + } }); \ No newline at end of file diff --git a/client/js/view.js b/client/js/view.js index 34a9b21..e5cab82 100755 --- a/client/js/view.js +++ b/client/js/view.js @@ -3,6 +3,8 @@ kiwi.view = {}; + + kiwi.view.MemberList = Backbone.View.extend({ tagName: "ul", events: { @@ -29,6 +31,12 @@ kiwi.view.MemberList = Backbone.View.extend({ } }); + + + + + + kiwi.view.Channel = Backbone.View.extend({ tagName: "div", className: "messages", @@ -89,6 +97,12 @@ kiwi.view.Channel = Backbone.View.extend({ } }); + + + + + + kiwi.view.Tabs = Backbone.View.extend({ events: { "click li": "tabClick" @@ -97,25 +111,27 @@ kiwi.view.Tabs = Backbone.View.extend({ this.model.bind("add", this.addTab, this); this.model.bind("remove", this.removeTab, this); this.model.bind("reset", this.render, this); + this.model.server.bind("change", this.render, this); }, render: function () { $this = $(this.el); $this.empty(); + $('
  • ' + kiwi.gateway.network_name + '
  • ').data('pane', this.model.server).appendTo($this); this.model.forEach(function (tab) { var tabname = $(tab.get("view").el).attr("id"); - $('
  • ' + tab.get("name") + '
  • ').data('chan', tab).appendTo($this) + $('
  • ' + tab.get("name") + '
  • ').data('pane', tab).appendTo($this); }); }, addTab: function (tab) { var tabname = $(tab.get("view").el).attr("id"), $this = $(this.el); - $('
  • ' + tab.get("name") + '
  • ').data('chan', tab).appendTo($this) + $('
  • ' + tab.get("name") + '
  • ').data('pane', tab).appendTo($this); }, removeTab: function (tab) { $('#tab_' + $(tab.get("view").el).attr("id")).remove(); }, tabClick: function (e) { - $(e.currentTarget).data('chan').view.show(); + $(e.currentTarget).data('pane').view.show(); } }); -- 2.25.1