]> jfr.im git - irc/quakenet/qwebirc.git/blame - js/ui/baseui.js
Alt hotkeys should stop the event.
[irc/quakenet/qwebirc.git] / js / ui / baseui.js
CommitLineData
65152b01
CP
1var WINDOW_STATUS = 1;
2var WINDOW_QUERY = 2;
3var WINDOW_CHANNEL = 3;
9e769c12 4
381fddfd 5var BaseUI = new Class({
a59dc700
CP
6 Implements: [Events, Options],
7 options: {
7c633700
CP
8 appTitle: "QuakeNet Web IRC",
9 singleWindow: true
a59dc700
CP
10 },
11 initialize: function(parentElement, windowClass, uiName, options) {
12 this.setOptions(options);
13
9e769c12
CP
14 this.windows = {};
15 this.windowArray = [];
16 this.windowClass = windowClass;
17 this.parentElement = parentElement;
18 this.parentElement.addClass("qwebirc");
19 this.parentElement.addClass("qwebirc-" + uiName);
e8db8558 20 this.firstClient = false;
9b63b053 21 this.commandhistory = new CommandHistory();
9e769c12
CP
22 },
23 newClient: function(client) {
24 this.windows[client] = {}
25 var w = this.newWindow(client, WINDOW_STATUS, "Status");
26 this.selectWindow(w);
e8db8558
CP
27 if(!this.firstClient) {
28 this.firstClient = true;
4094890f
CP
29 w.addLine("", "qwebirc v" + QWEBIRC_VERSION);
30 w.addLine("", "Copyright (C) 2008 Chris Porter. All rights reserved.");
e8db8558 31 w.addLine("", "http://webchat.quakenet.org/");
4094890f 32 w.addLine("", "This is BETA quality software, please report bugs to slug@quakenet.org");
e8db8558 33 }
9e769c12
CP
34 return w;
35 },
36 newWindow: function(client, type, name) {
37 var identifier = name;
38 if(type == WINDOW_STATUS)
39 identifier = "";
40
41 var w = this.windows[client][identifier] = new this.windowClass(this, client, type, name, identifier);
42 this.windowArray.push(w);
43
44 return w;
45 },
46 getActiveWindow: function() {
47 return this.active;
48 },
49 __setActiveWindow: function(window) {
50 this.active = window;
51 },
52 selectWindow: function(window) {
53 if(this.active)
54 this.active.deselect();
55 window.select(); /* calls setActiveWindow */
a59dc700 56 document.title = window.name + " - " + this.options.appTitle;
9e769c12
CP
57 },
58 __closed: function(window) {
59 if(window.active) {
60 this.active = undefined;
61 if(this.windowArray.length == 1) {
62 this.windowArray = [];
63 } else {
64 var index = this.windowArray.indexOf(window);
65 if(index == 0) {
66 this.selectWindow(this.windowArray[1]);
67 } else {
68 this.selectWindow(this.windowArray[index - 1]);
69 }
70
71 this.windowArray = this.windowArray.erase(window);
72 }
73 }
74
75 delete this.windows[window.client][window.identifier];
eb9b087b 76 },
d65fe45f 77 loginBox: function(callback, initialNickname, initialChannels) {
eb9b087b
CP
78 /*
79 this shouldn't be called by overriding classes!
80 some form of user input MUST be received before an
81 IRC connection is made, else users are going to get
82 tricked into getting themselves glined
83 */
84
d65fe45f 85 var nick = prompt("Nickname:", initialNickname);
eb9b087b
CP
86 if(!nick) {
87 alert("Aborted.");
88 return;
89 }
90
d65fe45f 91 var chans = prompt("Channels (seperate by comma):", initialChannels);
4656ff82 92 callback({"nickname": nick, "autojoin": chans});
9e769c12
CP
93 }
94});
381fddfd
CP
95
96var UI = new Class({
97 Extends: BaseUI,
98 initialize: function(parentElement, windowClass, uiName, options) {
99 this.parent(parentElement, windowClass, uiName, options);
381fddfd
CP
100 window.addEvent("keydown", function(x) {
101 if(!x.alt)
102 return;
103
104 if(x.key == "a" || x.key == "A") {
424608ac 105 new Event(x).stop();
381fddfd
CP
106 for(var i=0;i<this.windowArray.length;i++) {
107 if(this.windowArray[i].hilighted) {
108 this.selectWindow(this.windowArray[i]);
109 break;
110 }
111 }
112 } else if(x.key >= '0' && x.key <= '9') {
424608ac
CP
113 new Event(x).stop();
114
381fddfd
CP
115 number = x.key - '0';
116 if(number == 0)
117 number = 10
118
119 number = number - 1;
120
121 if(number >= this.windowArray.length)
122 return;
123
124 this.selectWindow(this.windowArray[number]);
125 }
126 }.bind(this));
127 }
128});