Refactoring and re-plumbing.
[KiwiIRC.git] / client / js / model.js
index 4e01ae3c4f3c17b91f414f02c102d59707433a2b..335fd8809716f94c52fdc55c6118cc9c395250a1 100755 (executable)
@@ -52,6 +52,11 @@ kiwi.model.MemberList = Backbone.Collection.extend({
     },\r
     initialize: function (options) {\r
         this.view = new kiwi.view.MemberList({"model": this, "name": options.name});\r
+    },\r
+    getByNick: function (nick) {\r
+        return this.find(function (m) {\r
+            return nick === m.get("nick");\r
+        });\r
     }\r
 });\r
 \r
@@ -128,36 +133,33 @@ kiwi.model.Member = Backbone.Model.extend({
     }\r
 });\r
 \r
-kiwi.model.ChannelList = Backbone.Collection.extend({\r
-    model: kiwi.model.Channel,\r
+kiwi.model.PanelList = Backbone.Collection.extend({\r
+    model: kiwi.model.Panel,\r
     comparator: function (chan) {\r
         return chan.get("name");\r
+    },\r
+    initialize: function () {\r
+        this.server = new kiwi.model.Server({"name": kiwi.gateway.network_name});\r
+        this.view = new kiwi.view.Tabs({"el": $('#kiwi .windowlist ul')[0], "model": this});\r
+        kiwi.currentPanel = this.server;\r
+    },\r
+    getByName: function (name) {\r
+        return this.find(function (c) {\r
+            return name === c.get("name");\r
+        });\r
     }\r
 });\r
 \r
-// TODO: Channel modes\r
-kiwi.model.Channel = Backbone.Model.extend({\r
+kiwi.model.Panel = Backbone.Model.extend({\r
     initialize: function (attributes) {\r
-        var name = this.get("name") || "",\r
-            members;\r
-        this.view = new kiwi.view.Channel({"model": this, "name": name});\r
+        var name = this.get("name") || "";\r
+        this.view = new kiwi.view.Panel({"model": this, "name": name});\r
         this.set({\r
-            "members": new kiwi.model.MemberList({"name": this.view.htmlsafe_name}),\r
-            "name": name,\r
             "backscroll": [],\r
-            "topic": ""\r
+            "name": name\r
         }, {"silent": true});\r
-        this.addMsg(null, ' ', '--> You have joined ' + name, 'action join', 'color:#009900;');\r
-        members = this.get("members");\r
-        members.bind("add", function (member) {\r
-            this.addMsg(null, ' ', '--> ' + member.get("nick") + ' [' + member.get("ident") + '@' + member.get("hostname") + '] has joined', 'action join', 'color:#009900;');\r
-        }, this);\r
-        members.bind("remove", function (member, options) {\r
-            this.addMsg(null, ' ', '<-- ' + member.get("nick") + ' has left ' + ((options.message) ? '(' + options.message + ')' : ''), 'action join', 'color:#009900;');\r
-        }, this);\r
-        members.bind("quit", function (args) {\r
-            this.addMsg(null, ' ', '<-- ' + args.member.get("nick") + ' has quit ' + ((args.message) ? '(' + args.message + ')' : ''), 'action join', 'color:#009900;');\r
-        }, this);\r
+\r
+        this.isChannel = false;\r
     },\r
     addMsg: function (time, nick, msg, type, style) {\r
         var tmp, bs;\r
@@ -187,4 +189,44 @@ kiwi.model.Channel = Backbone.Model.extend({
         this.set({"backscroll": bs}, {silent:true});\r
         this.trigger("msg", tmp);\r
     }\r
+});\r
+\r
+kiwi.model.Server = kiwi.model.Panel.extend({\r
+    initialize: function (attributes) {\r
+        var name = "Server";\r
+        this.view = new kiwi.view.Panel({"model": this, "name": name});\r
+        this.set({\r
+            "backscroll": [],\r
+            "name": name\r
+        }, {"silent": true});\r
+        this.isChannel = false;\r
+    }\r
+});\r
+\r
+// TODO: Channel modes\r
+kiwi.model.Channel = kiwi.model.Panel.extend({\r
+    initialize: function (attributes) {\r
+        var name = this.get("name") || "",\r
+            members;\r
+        this.view = new kiwi.view.Panel({"model": this, "name": name});\r
+        this.set({\r
+            "members": new kiwi.model.MemberList({"name": this.view.htmlsafe_name}),\r
+            "name": name,\r
+            "backscroll": [],\r
+            "topic": ""\r
+        }, {"silent": true});\r
+        this.addMsg(null, ' ', '--> You have joined ' + name, 'action join', 'color:#009900;');\r
+        members = this.get("members");\r
+        members.bind("add", function (member) {\r
+            this.addMsg(null, ' ', '--> ' + member.get("nick") + ' [' + member.get("ident") + '@' + member.get("hostname") + '] has joined', 'action join', 'color:#009900;');\r
+        }, this);\r
+        members.bind("remove", function (member, options) {\r
+            this.addMsg(null, ' ', '<-- ' + member.get("nick") + ' has left ' + ((options.message) ? '(' + options.message + ')' : ''), 'action join', 'color:#009900;');\r
+        }, this);\r
+        members.bind("quit", function (args) {\r
+            this.addMsg(null, ' ', '<-- ' + args.member.get("nick") + ' has quit ' + ((args.message) ? '(' + args.message + ')' : ''), 'action join', 'color:#009900;');\r
+        }, this);\r
+\r
+        this.isChannel = true;\r
+    }\r
 });
\ No newline at end of file