Command history
This commit is contained in:
		
							parent
							
								
									08e4929af2
								
							
						
					
					
						commit
						1cc2223724
					
				
					 1 changed files with 57 additions and 12 deletions
				
			
		| 
						 | 
					@ -13,6 +13,9 @@ define('cryptalk', {
 | 
				
			||||||
		hash,
 | 
							hash,
 | 
				
			||||||
		nick,
 | 
							nick,
 | 
				
			||||||
		mute = false,
 | 
							mute = false,
 | 
				
			||||||
 | 
							history = [],
 | 
				
			||||||
 | 
							history_pos = -1,
 | 
				
			||||||
 | 
							history_keep = 4,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		// Collection of DOM components
 | 
							// Collection of DOM components
 | 
				
			||||||
		components = {
 | 
							components = {
 | 
				
			||||||
| 
						 | 
					@ -49,6 +52,9 @@ define('cryptalk', {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			clear: function () {
 | 
								clear: function () {
 | 
				
			||||||
				components.chat.html('');
 | 
									components.chat.html('');
 | 
				
			||||||
 | 
									
 | 
				
			||||||
 | 
									// Clear command history on clearing buffer
 | 
				
			||||||
 | 
									history = []; history_pos = -1;
 | 
				
			||||||
			},
 | 
								},
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			leave: function () {
 | 
								leave: function () {
 | 
				
			||||||
| 
						 | 
					@ -123,12 +129,21 @@ define('cryptalk', {
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
		},
 | 
							},
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							// Push input buffer to command history
 | 
				
			||||||
 | 
							pushHistory = function (b) {
 | 
				
			||||||
 | 
								history.push(b); 
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
								// Shift oldest buffer if we have more than we should keep
 | 
				
			||||||
 | 
								if( history.length > history_keep ) history.shift();
 | 
				
			||||||
 | 
							},
 | 
				
			||||||
 | 
										
 | 
				
			||||||
		// Handler for the document`s keyDown-event.
 | 
							// Handler for the document`s keyDown-event.
 | 
				
			||||||
		onKeyDown = function (e) {
 | 
							onKeyDown = function (e) {
 | 
				
			||||||
			var buffer,
 | 
								var buffer,
 | 
				
			||||||
				parts,
 | 
									parts,
 | 
				
			||||||
				payload,
 | 
									payload,
 | 
				
			||||||
				command;
 | 
									command,
 | 
				
			||||||
 | 
									save;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			// The Document object is bound to this element.
 | 
								// The Document object is bound to this element.
 | 
				
			||||||
			// If the active element is not the input, focus on it and exit the function.
 | 
								// If the active element is not the input, focus on it and exit the function.
 | 
				
			||||||
| 
						 | 
					@ -136,11 +151,29 @@ define('cryptalk', {
 | 
				
			||||||
				return components.input.focus();
 | 
									return components.input.focus();
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
								// Check for escape key, this does nothing but clear the input buffer and reset history position
 | 
				
			||||||
 | 
								if ( e.keyCode == 27 ) {
 | 
				
			||||||
 | 
									history_pos = -1;
 | 
				
			||||||
 | 
									components.input[0].value = '';
 | 
				
			||||||
 | 
								} 
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
								// Check for up or down-keys, they handle the history position
 | 
				
			||||||
 | 
								if( e.keyCode == 38 || e.keyCode == 40) {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
									if 	(e.keyCode == 38 ) { history_pos = (history_pos > history.length - 2) ? -1 : history_pos = history_pos + 1; } 
 | 
				
			||||||
 | 
									else { history_pos = (history_pos <= 0) ? -1 : history_pos = history_pos - 1; }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
									return components.input[0].value = (history_pos == -1) ? '' : history[history.length-1-history_pos];
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
								
 | 
				
			||||||
			// Return immediatly if the buffer is empty or if the hit key was not <enter>
 | 
								// Return immediatly if the buffer is empty or if the hit key was not <enter>
 | 
				
			||||||
			if (e.keyCode !== 13 || !(buffer = components.input[0].value)) {
 | 
								if (e.keyCode !== 13 || !(buffer = components.input[0].value)) {
 | 
				
			||||||
				return;
 | 
									return;
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
								// Reset current history position to 0 (last command)
 | 
				
			||||||
 | 
								history_pos = -1;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			// Handle command
 | 
								// Handle command
 | 
				
			||||||
			if (buffer[0] === '/') {
 | 
								if (buffer[0] === '/') {
 | 
				
			||||||
				parts = $.ssplit(buffer.slice(1), ' ');
 | 
									parts = $.ssplit(buffer.slice(1), ' ');
 | 
				
			||||||
| 
						 | 
					@ -149,6 +182,7 @@ define('cryptalk', {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
				// Check that there is an handler for this command
 | 
									// Check that there is an handler for this command
 | 
				
			||||||
				if (!commands[command]) {
 | 
									if (!commands[command]) {
 | 
				
			||||||
 | 
										pushHistory(buffer);
 | 
				
			||||||
					return post('error', $.template(templates.messages.unrecognized_command, { commandName: command }));
 | 
										return post('error', $.template(templates.messages.unrecognized_command, { commandName: command }));
 | 
				
			||||||
				}
 | 
									}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -158,18 +192,19 @@ define('cryptalk', {
 | 
				
			||||||
				// Clear input field
 | 
									// Clear input field
 | 
				
			||||||
				components.input[0].value = '';
 | 
									components.input[0].value = '';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			} else /* Handle ordinary message */ {
 | 
									// Save to history
 | 
				
			||||||
 | 
									if(command !== 'key') {
 | 
				
			||||||
				// Make sure that the user has joined a room
 | 
										pushHistory(buffer);
 | 
				
			||||||
				if (!room) {
 | 
					 | 
				
			||||||
					components.input[0].value = '';
 | 
					 | 
				
			||||||
					return post('error', templates.messages.msg_no_room);
 | 
					 | 
				
			||||||
				}
 | 
									}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
				// And that a valid key is set
 | 
								} else /* Handle ordinary message */ {
 | 
				
			||||||
				if (!key) {
 | 
					
 | 
				
			||||||
					components.input[0].value = '';
 | 
									if (!room || !key) {
 | 
				
			||||||
					return post('error', templates.messages.msg_no_key);
 | 
										// Push buffer to history and clear input field
 | 
				
			||||||
 | 
										pushHistory(buffer); components.input[0].value = ''; 
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
										// Make sure that the user has joined a room and the key is set
 | 
				
			||||||
 | 
										return (!room) ? post('error', templates.messages.msg_no_room) : post('error', templates.messages.msg_no_key);
 | 
				
			||||||
				}
 | 
									}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
				// Before sending the message.
 | 
									// Before sending the message.
 | 
				
			||||||
| 
						 | 
					@ -180,9 +215,15 @@ define('cryptalk', {
 | 
				
			||||||
					nick: (nick && nick != undefined) ? $.AES.encrypt(nick, room + key).toString() : false
 | 
										nick: (nick && nick != undefined) ? $.AES.encrypt(nick, room + key).toString() : false
 | 
				
			||||||
				});
 | 
									});
 | 
				
			||||||
 | 
					
 | 
				
			||||||
				// Adn the the buffer
 | 
									// And clear the the buffer
 | 
				
			||||||
				components.input[0].value = '';
 | 
									components.input[0].value = '';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
									// Save to history
 | 
				
			||||||
 | 
									pushHistory(buffer);
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
								
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		};
 | 
							};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	// Connect to server
 | 
						// Connect to server
 | 
				
			||||||
| 
						 | 
					@ -209,6 +250,10 @@ define('cryptalk', {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		.on('room:left', function () {
 | 
							.on('room:left', function () {
 | 
				
			||||||
			post('info', $.template(templates.messages.left_room, { roomName: room }));
 | 
								post('info', $.template(templates.messages.left_room, { roomName: room }));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
								// Clear history on leaving room
 | 
				
			||||||
 | 
								history = []; history_pos = -1;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			room = false;
 | 
								room = false;
 | 
				
			||||||
		})
 | 
							})
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
	Add table
		
		Reference in a new issue