]> jfr.im git - irc/quakenet/qwebirc.git/blame - js/ui/baseui.js
Add resize scroll position saving.
[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") {
105 for(var i=0;i<this.windowArray.length;i++) {
106 if(this.windowArray[i].hilighted) {
107 this.selectWindow(this.windowArray[i]);
108 break;
109 }
110 }
111 } else if(x.key >= '0' && x.key <= '9') {
112 number = x.key - '0';
113 if(number == 0)
114 number = 10
115
116 number = number - 1;
117
118 if(number >= this.windowArray.length)
119 return;
120
121 this.selectWindow(this.windowArray[number]);
122 }
123 }.bind(this));
124 }
125});