Second rev. es-la
[KiwiIRC.git] / client / assets / src / models / panel.js
CommitLineData
eaaf73b0 1_kiwi.model.Panel = Backbone.Model.extend({\r
9df70c63
D
2 initialize: function (attributes) {\r
3 var name = this.get("name") || "";\r
eaaf73b0 4 this.view = new _kiwi.view.Panel({"model": this, "name": name});\r
9df70c63
D
5 this.set({\r
6 "scrollback": [],\r
7 "name": name\r
8 }, {"silent": true});\r
9 },\r
10\r
11 addMsg: function (nick, msg, type, opts) {\r
f0999cef
D
12 var message_obj, bs, d,\r
13 scrollback = (parseInt(_kiwi.global.settings.get('scrollback'), 10) || 250);\r
9df70c63
D
14\r
15 opts = opts || {};\r
16\r
17 // Time defaults to now\r
18 if (!opts || typeof opts.time === 'undefined') {\r
f34d4d0f 19 d = opts.date = new Date();\r
9df70c63
D
20 opts.time = d.getHours().toString().lpad(2, "0") + ":" + d.getMinutes().toString().lpad(2, "0") + ":" + d.getSeconds().toString().lpad(2, "0");\r
21 }\r
22\r
23 // CSS style defaults to empty string\r
24 if (!opts || typeof opts.style === 'undefined') {\r
25 opts.style = '';\r
26 }\r
27\r
9df70c63 28 // Run through the plugins\r
f34d4d0f 29 message_obj = {"msg": msg, "date": opts.date, "time": opts.time, "nick": nick, "chan": this.get("name"), "type": type, "style": opts.style};\r
eaaf73b0 30 //tmp = _kiwi.plugs.run('addmsg', message_obj);\r
9df70c63
D
31 if (!message_obj) {\r
32 return;\r
33 }\r
34\r
35 // The CSS class (action, topic, notice, etc)\r
36 if (typeof message_obj.type !== "string") {\r
37 message_obj.type = '';\r
38 }\r
39\r
40 // Make sure we don't have NaN or something\r
41 if (typeof message_obj.msg !== "string") {\r
42 message_obj.msg = '';\r
43 }\r
44\r
9df70c63
D
45 // Update the scrollback\r
46 bs = this.get("scrollback");\r
b00b7b82
D
47 if (bs) {\r
48 bs.push(message_obj);\r
9df70c63 49\r
b00b7b82
D
50 // Keep the scrolback limited\r
51 if (bs.length > scrollback) {\r
52 bs.splice(scrollback);\r
53 }\r
54 this.set({"scrollback": bs}, {silent: true});\r
9df70c63 55 }\r
9df70c63
D
56\r
57 this.trigger("msg", message_obj);\r
58 },\r
59\r
648e2c01
D
60\r
61 clearMessages: function () {\r
62 this.set({'scrollback': []}, {silent: true});\r
63 this.addMsg('', 'Window cleared');\r
64\r
65 this.view.render();\r
66 },\r
67\r
ea033d12
D
68 closePanel: function () {\r
69 if (this.view) {\r
51ae0eb8 70 this.view.unbind();\r
ea033d12 71 this.view.remove();\r
51ae0eb8 72 this.view = undefined;\r
ea033d12
D
73 delete this.view;\r
74 }\r
9df70c63
D
75\r
76 var members = this.get('members');\r
77 if (members) {\r
78 members.reset([]);\r
79 this.unset('members');\r
80 }\r
81\r
6d5faa6e 82 this.get('panel_list').remove(this);\r
f5f8cee8 83\r
ea033d12 84 this.unbind();\r
9df70c63
D
85 this.destroy();\r
86\r
87 // If closing the active panel, switch to the server panel\r
48d8935c
D
88 if (this === _kiwi.app.panels().active) {\r
89 _kiwi.app.connections.active_connection.panels.server.view.show();\r
9df70c63
D
90 }\r
91 },\r
92\r
ea033d12
D
93 // Alias to closePanel() for child objects to override\r
94 close: function () {\r
95 return this.closePanel();\r
96 },\r
97\r
9df70c63 98 isChannel: function () {\r
eaaf73b0 99 var channel_prefix = _kiwi.gateway.get('channel_prefix'),\r
9df70c63
D
100 this_name = this.get('name');\r
101\r
19cc6364 102 if (this.isApplet() || !this_name) return false;\r
9df70c63 103 return (channel_prefix.indexOf(this_name[0]) > -1);\r
df7b7bf8
D
104 },\r
105\r
4d4145aa
D
106 isQuery: function () {\r
107 if (!this.isChannel() && !this.isApplet() && !this.isServer()) {\r
108 return true;\r
109 }\r
110\r
111 return false;\r
112 },\r
113\r
19cc6364
D
114 isApplet: function () {\r
115 return this.applet ? true : false;\r
72371b1a
D
116 },\r
117\r
118 isServer: function () {\r
119 return this.server ? true : false;\r
145389ff
D
120 },\r
121\r
122 isActive: function () {\r
6d5faa6e 123 return (_kiwi.app.panels().active === this);\r
9df70c63
D
124 }\r
125});