From 51ae0eb834657b6e2ed764d8e87fcef926f8f7a4 Mon Sep 17 00:00:00 2001 From: Darren Date: Sat, 6 Oct 2012 15:52:58 +0100 Subject: [PATCH] Chanlist applet --- client_backbone/dev/applet_chanlist.js | 93 ++++++++++++++++++++++++ client_backbone/dev/build.js | 1 + client_backbone/dev/model_applet.js | 9 ++- client_backbone/dev/model_application.js | 11 +-- client_backbone/dev/model_gateway.js | 2 +- client_backbone/dev/model_panel.js | 2 + client_backbone/dev/utils.js | 74 ------------------- client_backbone/index.html | 27 ++++--- 8 files changed, 126 insertions(+), 93 deletions(-) create mode 100644 client_backbone/dev/applet_chanlist.js diff --git a/client_backbone/dev/applet_chanlist.js b/client_backbone/dev/applet_chanlist.js new file mode 100644 index 0000000..78ac676 --- /dev/null +++ b/client_backbone/dev/applet_chanlist.js @@ -0,0 +1,93 @@ +(function () { + + var View = Backbone.View.extend({ + events: { + }, + + + + initialize: function (options) { + this.$el = $($('#tmpl_channel_list').html()); + + this.channels = []; + + // Sort the table by num. users? + this.ordered = false; + + // Waiting to add the table back into the DOM? + this.waiting = false; + }, + + + render: function () { + var table = $('table', this.$el), + tbody = table.children('tbody:first').detach(); + /*tbody.children().each(function (child) { + var i, chan; + child = $(child); + chan = child.children('td:first').text(); + for (i = 0; i < chanList.length; i++) { + if (chanList[i].channel === chan) { + chanList[i].html = child.detach(); + break; + } + } + });*/ + + if (this.ordered) { + this.channels.sort(function (a, b) { + return b.num_users - a.num_users; + }); + } + + //_.each(this.channels, function (chan) { + // tbody.append(chan.html); + //}); + table.append(tbody); + } + }); + + + + + kiwi.applets.Chanlist = Backbone.Model.extend({ + initialize: function () { + this.set('title', 'Channel List'); + this.view = new View(); + }, + + + addChannel: function (channels) { + var that = this; + + if (!_.isArray(channels)) { + channels = [channels]; + } + _.each(channels, function (chan) { + var html, channel; + html = '' + chan.channel + '' + chan.num_users + '' + formatIRCMsg(chan.topic) + ''; + chan.html = html; + that.view.channels.push(chan); + }); + + if (!that.view.waiting) { + that.view.waiting = true; + _.defer(function () { + that.view.render(); + that.view.waiting = false; + }); + } + }, + + + dispose: function () { + this.view.channels = null; + this.view.unbind(); + this.view.$el.html(''); + this.view.remove(); + this.view = null; + } + }); + + +})(); \ No newline at end of file diff --git a/client_backbone/dev/build.js b/client_backbone/dev/build.js index 58b4c5f..a8270fa 100755 --- a/client_backbone/dev/build.js +++ b/client_backbone/dev/build.js @@ -28,6 +28,7 @@ var src = concat([ __dirname + '/applet_settings.js', __dirname + '/applet_nickserv.js', + __dirname + '/applet_chanlist.js', __dirname + '/utils.js', __dirname + '/view.js' diff --git a/client_backbone/dev/model_applet.js b/client_backbone/dev/model_applet.js index 836c1d1..cf337e6 100755 --- a/client_backbone/dev/model_applet.js +++ b/client_backbone/dev/model_applet.js @@ -3,7 +3,6 @@ kiwi.model.Applet = kiwi.model.Panel.extend({ // differently than others applet: true, - loaded_applet: null, initialize: function (attributes) { // Temporary name @@ -13,6 +12,9 @@ kiwi.model.Applet = kiwi.model.Panel.extend({ this.set({ "name": name }, {"silent": true}); + + // Holds the loaded applet + this.loaded_applet = null; }, // Load an applet within this panel @@ -69,6 +71,11 @@ kiwi.model.Applet = kiwi.model.Panel.extend({ this.view = undefined; + // Call the applets dispose method if it has one + if (this.loaded_applet && this.loaded_applet.dispose) { + this.loaded_applet.dispose(); + } + this.closePanel(); } }); \ No newline at end of file diff --git a/client_backbone/dev/model_application.js b/client_backbone/dev/model_application.js index d54d018..23a0bd2 100755 --- a/client_backbone/dev/model_application.js +++ b/client_backbone/dev/model_application.js @@ -537,29 +537,30 @@ kiwi.model.Application = Backbone.Model.extend(new (function () { gw.on('onlist_start', function (data) { if (kiwi.app.channel_list) { - kiwi.app.channel_list.view.remove(); + kiwi.app.channel_list.close(); delete kiwi.app.channel_list; } var panel = new kiwi.model.Applet(), - list = new ChannelList(); + applet = new kiwi.applets.Chanlist(); - panel.set('title', 'Channel List'); - panel.view.$el.append(list.view); + panel.load(applet); kiwi.app.panels.add(panel); panel.view.show(); - kiwi.app.channel_list = list; + kiwi.app.channel_list = applet; }); gw.on('onlist_channel', function (data) { + // TODO: Put this listener within the applet itself kiwi.app.channel_list.addChannel(data.chans); }); gw.on('onlist_end', function (data) { + // TODO: Put this listener within the applet itself delete kiwi.app.channel_list; }); diff --git a/client_backbone/dev/model_gateway.js b/client_backbone/dev/model_gateway.js index 45b2b24..8cd3e87 100755 --- a/client_backbone/dev/model_gateway.js +++ b/client_backbone/dev/model_gateway.js @@ -152,7 +152,7 @@ kiwi.model.Gateway = function () { * Parses the response from the server */ this.parse = function (command, data) { - console.log('gateway event', command, data); + //console.log('gateway event', command, data); if (command !== undefined) { that.trigger('on' + command, data); diff --git a/client_backbone/dev/model_panel.js b/client_backbone/dev/model_panel.js index d0b598c..a14724b 100755 --- a/client_backbone/dev/model_panel.js +++ b/client_backbone/dev/model_panel.js @@ -56,7 +56,9 @@ kiwi.model.Panel = Backbone.Model.extend({ closePanel: function () { if (this.view) { + this.view.unbind(); this.view.remove(); + this.view = undefined; delete this.view; } diff --git a/client_backbone/dev/utils.js b/client_backbone/dev/utils.js index 5ba669a..de64451 100755 --- a/client_backbone/dev/utils.js +++ b/client_backbone/dev/utils.js @@ -208,80 +208,6 @@ function InputPreProcessor () { - - - - - -function ChannelList () { - /*globals Utilityview */ - var chanList, view, table, obj, renderTable, waiting; - chanList = []; - - view = $($('#tmpl_channel_list').html()); - table = view; //$('table', view); - - waiting = false; - /** - * @inner - */ - renderTable = function () { - var tbody; - tbody = table.children('tbody:first').detach(); - /*tbody.children().each(function (child) { - var i, chan; - child = $(child); - chan = child.children('td:first').text(); - for (i = 0; i < chanList.length; i++) { - if (chanList[i].channel === chan) { - chanList[i].html = child.detach(); - break; - } - } - });*/ - _.each(chanList, function (chan) { - chan.html = $(chan.html).appendTo(tbody); - }); - table = table.append(tbody); - waiting = false; - }; - /** - * @lends ChannelList - */ - return { - /** - * Adds a channel or channels to the list - * @param {Object} channels The channel or Array of channels to add - */ - addChannel: function (channels) { - if (!_.isArray(channels)) { - channels = [channels]; - } - _.each(channels, function (chan) { - var html, channel; - html = $('' + chan.channel + '' + chan.num_users + '' + formatIRCMsg(chan.topic) + ''); - chan.html = html; - chanList.push(chan); - }); - chanList.sort(function (a, b) { - return b.num_users - a.num_users; - }); - if (!waiting) { - waiting = true; - _.defer(renderTable); - } - }, - - view: view - }; -} - - - - - - - /** * Convert HSL to RGB formatted colour */ diff --git a/client_backbone/index.html b/client_backbone/index.html index 2e63bd7..da9da8b 100755 --- a/client_backbone/index.html +++ b/client_backbone/index.html @@ -116,17 +116,19 @@ @@ -180,7 +182,8 @@ [ 'dev/applet_settings.js', - 'dev/applet_nickserv.js' + 'dev/applet_nickserv.js', + 'dev/applet_chanlist.js' ], [ -- 2.25.1