Browse Source

Fixed internal usage of API. Code cleanup.

Nathaniel van Diepen 11 years ago
parent
commit
b147616cec
1 changed files with 72 additions and 41 deletions
  1. 72 41
      app/www/js/omnomirc.js

+ 72 - 41
app/www/js/omnomirc.js

@@ -28,6 +28,16 @@
 			}
 			log('['+type.toUpperCase()+'] '+msg);
 		},
+		emit = window.emit = function(type,data){
+			if($o.chat.connected()){
+				socket.emit.apply(socket,arguments);
+			}else{
+				if(tabs.length > 0){
+					$o.msg('Disconnected, cannot do anything');
+				}
+			}
+		},
+		noop = function(){},
 		log = function(){
 				console.log.apply(console,arguments);
 		},
@@ -68,8 +78,8 @@
 			{ // names
 				cmd: 'names',
 				fn: function(args){
-					socket.emit('names',{
-						name: tabs[selectedTab].name
+					emit('names',{
+						name: $o.ui.tabs.current().name
 					});
 				}
 			},
@@ -81,10 +91,10 @@
 					for(i=1;i<args.length;i++){
 						ret += ' '+args[i];
 					}
-					socket.emit('message',{
+					emit('message',{
 						from: 0,
 						message: properties.nick+' '+ret,
-						room: tabs[selectedTab].name
+						room: $o.ui.tabs.current().name
 					});
 				}
 			},
@@ -139,7 +149,7 @@
 			{ // clear
 				cmd: 'clear',
 				fn: function(args){
-					tabs[selectedTab].clear();
+					$o.ui.tabs.current().clear();
 				}
 			},
 			{ // close
@@ -176,8 +186,8 @@
 					$(users).each(function(i,v){
 						if(v != null){
 							if(tab.users.indexOf(v.trim()) == -1){
-								socket.emit('echo',{
-									room: tabs[selectedTab].name,
+								emit('echo',{
+									room: $o.ui.tabs.current().name,
 									message: v+' left the room',
 									from: 0
 								});
@@ -191,7 +201,7 @@
 				fn: function(data){
 					properties.nick = data.nick;
 					for(var i in settings.autojoin){
-						socket.emit('join',{
+						emit('join',{
 							name: settings.autojoin[i]
 						});
 					}
@@ -212,9 +222,10 @@
 				on: 'reconnect',
 				fn: function(data){
 					event('reconnected');
+					properties.connected = true;
 					$o.chat.auth();
-					socket.emit('echo',{
-						room: tabs[selectedTab].name,
+					emit('echo',{
+						room: $o.ui.tabs.current().name,
 						from: 0,
 						message: 'reconnected'
 					});
@@ -224,9 +235,10 @@
 				on: 'connect',
 				fn: function(data){
 					event('connected');
+					properties.connected = true;
 					$o.chat.auth();
-					socket.emit('echo',{
-						room: tabs[selectedTab].name,
+					emit('echo',{
+						room: $o.ui.tabs.current().name,
 						from: 0,
 						message: 'connected'
 					});
@@ -236,7 +248,8 @@
 				on: 'disconnect',
 				fn: function(data){
 					event('disconnected');
-					tabs[selectedTab].send('* disconnected');
+					properties.connected = false;
+					$o.msg('* disconnected');
 				}
 			},
 			{ // message
@@ -442,7 +455,7 @@
 					event('Rendering userlist');
 					var $ul = $('#user-list').html(''),
 						i,
-						names = tabs[selectedTab].users;
+						names = $o.ui.tabs.current().users;
 					for(i in names){
 						$ul.append(
 							$('<li>').text(names[i])
@@ -450,7 +463,7 @@
 					}
 				},
 				tab: function(){
-					$cl.html($(tabs[selectedTab].body).clone());
+					$cl.html($($o.ui.tabs.current().body).clone());
 				},
 				tablist: function(){
 					$tl.html('');
@@ -511,15 +524,15 @@
 							body: frag,
 							date: new Date(),
 							send: function(msg){
-								$o.chat.send(msg,tabs[id].name);
+								$o.chat.send(msg,$o.ui.tabs.tab(id).name);
 							},
 							close: function(){
 								$o.ui.tabs.remove(id);
 							},
 							users: [],
 							names: function(){
-								socket.emit('names',{
-									name: tabs[id].name
+								emit('names',{
+									name: $o.ui.tabs.tab(id).name
 								});
 							},
 							select: function(){
@@ -527,9 +540,9 @@
 							},
 							clear: function(){
 								$cl.html('');
-								tabs[id].body = document.createDocumentFragment();
-								socket.emit('echo',{
-									room: tabs[id].name,
+								$o.ui.tabs.tab(id).body = document.createDocumentFragment();
+								emit('echo',{
+									room: $o.ui.tabs.tab(id).name,
 									message: 'messages cleared',
 									from: 0
 								});
@@ -547,10 +560,10 @@
 						name = tabs[name].name;
 					}
 					for(var id=0;id<tabs.length;id++){
-						if(tabs[id].name == name){
-							event('Tab removed: '+tabs[id].name);
-							socket.emit('part',{
-								name: tabs[id].name
+						if($o.ui.tabs.tab(id).name == name){
+							event('Tab removed: '+$o.ui.tabs.tab(id).name);
+							emit('part',{
+								name: $o.ui.tabs.tab(id).name
 							});
 							tabs.splice(id,1);
 							if(selectedTab==id&&selectedTab>0){
@@ -560,7 +573,7 @@
 						}
 					}
 					$o.ui.render.tablist();
-					$cl.html(tabs[selectedTab].body);
+					$cl.html($o.ui.tabs.current().body);
 					$o.ui.render.users();
 				},
 				selected: function(){
@@ -584,7 +597,7 @@
 					if(typeof id !== 'undefined'){
 						return $('<div>')
 							.addClass('tab')
-							.text(tabs[id].name)
+							.text($o.ui.tabs.tab(id).name)
 							.mouseup(function(e){
 								switch(e.which){
 									case 1:	// RMB
@@ -623,15 +636,15 @@
 					}
 				},
 				select: function(id){
-					event(id+' '+tabs[id].name,'tab_select');
+					event(id+' '+$o.ui.tabs.tab(id).name,'tab_select');
 					if(id<tabs.length&&id>=0){
 						selectedTab=id;
 					}
 					$tl.children('.clicked').removeClass('clicked');
 					$($tl.children().get(id)).addClass('clicked');
-					$('#title').text(tabs[id].name);
-					$('#topic').text(tabs[id].topic);
-					$cl.html($(tabs[id].body).clone());
+					$('#title').text($o.ui.tabs.tab(id).name);
+					$('#topic').text($o.ui.tabs.tab(id).topic);
+					$cl.html($($o.ui.tabs.tab(id).body).clone());
 					abbrDate('abbr.date');
 					$o.ui.render.users();
 					setTimeout(function scrollContent(){
@@ -642,8 +655,25 @@
 							event('scrolling stopped');
 						}
 					},settings.scrollspeed);
+				},
+				current: function(){
+					if(tabs.length > 0 && tabs.length > selectedTab){
+						return tabs[selectedTab];
+					}else{
+						return {
+							name: '',
+							body: document.createDocumentFragment(),
+							date: new Date(),
+							send: noop,
+							close: noop,
+							users: [],
+							names: noop,
+							select: noop,
+							clear: noop
+						}
+					}
 				}
-			}
+			},
 		},
 		chat: {
 			connect: function(server){
@@ -653,7 +683,7 @@
 				if(typeof server == 'undefined'){
 					server = settings.server;
 				}
-				socket = io.connect(server);
+				socket = window.socket =  io.connect(server);
 				for(var i in handles){
 					socket.on(handles[i].on,handles[i].fn);
 				}
@@ -662,15 +692,14 @@
 			disconnect: function(){
 				if($o.chat.connected()){
 					socket.disconnect();
-					socket = undefined;
 				}
 			},
 			connected: function(){
-				return typeof socket != 'undefined';
+				return typeof socket == 'undefined'?false:properties.connected;
 			},
 			send: function(msg,room){
 				if(typeof room == 'undefined'){
-					room = tabs[selectedTab].name;
+					room = $o.ui.tabs.current().name;
 				}
 				if(msg !== ''){
 					if(msg[0] == '/' && msg[1] != '/'){
@@ -687,7 +716,7 @@
 						$o.msg(cmd+' is not a valid command.');
 					}else{
 						event(msg,'send');
-						socket.emit('message',{
+						emit('message',{
 							message: msg,
 							room: room,
 							from: properties.nick
@@ -700,7 +729,7 @@
 					$o.set('nick','User');
 					return;
 				}
-				socket.emit('auth',{
+				emit('auth',{
 					nick: settings.nick
 					// TODO - send authorization info
 				});				
@@ -764,7 +793,7 @@
 		},
 		msg: function(msg,tabName){
 			var frag;
-			if(typeof tabName == 'undefined' || tabName == tabs[selectedTab].name){
+			if(typeof tabName == 'undefined' || tabName == $o.ui.tabs.current().name){
 				frag = document.createDocumentFragment();
 			}else{
 				frag = tabs[$o.ui.tabs.idForName(tabName)].body;
@@ -781,7 +810,9 @@
 					}
 					break;
 			}
-			$(tabs[$o.ui.tabs.idForName(tabName) || selectedTab].body).append(frag);
+			if(tabs.length > 0){
+				$(tabs[$o.ui.tabs.idForName(tabName) || selectedTab].body).append(frag);
+			}
 			var scroll = [],i,html;
 			for(i in tabs){
 				html = '';
@@ -795,7 +826,7 @@
 				});
 			}
 			$.localStorage('tabs',scroll);
-			if(typeof tabName == 'undefined' || tabName == tabs[selectedTab].name){
+			if(typeof tabName == 'undefined' || tabName == $o.ui.tabs.current().name){
 				$o.ui.tabs.select(selectedTab);
 			}
 		},