]> jfr.im git - irc/quakenet/qwebirc.git/blob - js/ui/baseui.js
Add version number to first window.
[irc/quakenet/qwebirc.git] / js / ui / baseui.js
1 var WINDOW_STATUS = 1;
2 var WINDOW_QUERY = 2;
3 var WINDOW_CHANNEL = 3;
4
5 var UIWindow = new Class({
6 Implements: [Events],
7 initialize: function(parentObject, client, type, name, identifier) {
8 this.parentObject = parentObject;
9 this.type = type;
10 this.name = name;
11 this.active = false;
12 this.client = client;
13 this.identifier = identifier;
14 },
15 updateNickList: function(nicks) {
16 },
17 updateTopic: function(topic) {
18 },
19 close: function() {
20 this.parentObject.__closed(this);
21 this.fireEvent("close", this);
22 },
23 select: function() {
24 this.active = true;
25 this.parentObject.__setActiveWindow(this);
26 },
27 deselect: function() {
28 this.active = false;
29 },
30 addLine: function(type, line, colour) {
31 },
32 errorMessage: function(message) {
33 this.addLine("", message, "red");
34 }
35 });
36
37 var UI = new Class({
38 initialize: function(parentElement, windowClass, uiName) {
39 this.windows = {};
40 this.windowArray = [];
41 this.windowClass = windowClass;
42 this.parentElement = parentElement;
43 this.parentElement.addClass("qwebirc");
44 this.parentElement.addClass("qwebirc-" + uiName);
45 this.firstClient = false;
46 },
47 newClient: function(client) {
48 this.windows[client] = {}
49 var w = this.newWindow(client, WINDOW_STATUS, "Status");
50 this.selectWindow(w);
51 if(!this.firstClient) {
52 this.firstClient = true;
53 w.addLine("", "qwebirc v" + QWEBIRC_VERSION + " -- Copyright (C) 2008 Chris Porter. All rights reserved.");
54 w.addLine("", "http://webchat.quakenet.org/");
55 }
56 return w;
57 },
58 newWindow: function(client, type, name) {
59 var identifier = name;
60 if(type == WINDOW_STATUS)
61 identifier = "";
62
63 var w = this.windows[client][identifier] = new this.windowClass(this, client, type, name, identifier);
64 this.windowArray.push(w);
65
66 return w;
67 },
68 getActiveWindow: function() {
69 return this.active;
70 },
71 __setActiveWindow: function(window) {
72 this.active = window;
73 },
74 selectWindow: function(window) {
75 if(this.active)
76 this.active.deselect();
77 window.select(); /* calls setActiveWindow */
78 },
79 __closed: function(window) {
80 if(window.active) {
81 this.active = undefined;
82 if(this.windowArray.length == 1) {
83 this.windowArray = [];
84 } else {
85 var index = this.windowArray.indexOf(window);
86 if(index == 0) {
87 this.selectWindow(this.windowArray[1]);
88 } else {
89 this.selectWindow(this.windowArray[index - 1]);
90 }
91
92 this.windowArray = this.windowArray.erase(window);
93 }
94 }
95
96 delete this.windows[window.client][window.identifier];
97 },
98 loginBox: function(callback) {
99 /*
100 this shouldn't be called by overriding classes!
101 some form of user input MUST be received before an
102 IRC connection is made, else users are going to get
103 tricked into getting themselves glined
104 */
105
106 var nick = prompt("Nickname:");
107 if(!nick) {
108 alert("Aborted.");
109 return;
110 }
111
112 var chans = prompt("Channels (seperate by comma):", "#quakenetX");
113 callback({"nickname": nick, "autojoin": chans});
114 }
115 });