forked from MirrorHub/synapse
SYWEB-7: Up & down keys let user step through the history as per readline or xchat
This commit is contained in:
parent
f9bb000ccf
commit
d9a9a47075
2 changed files with 72 additions and 3 deletions
|
@ -404,12 +404,15 @@ angular.module('RoomController', ['ngSanitize', 'matrixFilter', 'mFileInput'])
|
||||||
};
|
};
|
||||||
|
|
||||||
$scope.send = function() {
|
$scope.send = function() {
|
||||||
if ($scope.textInput === "") {
|
if (undefined === $scope.textInput || $scope.textInput === "") {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
scrollToBottom(true);
|
scrollToBottom(true);
|
||||||
|
|
||||||
|
// Store the command in the history
|
||||||
|
history.push($scope.textInput);
|
||||||
|
|
||||||
var promise;
|
var promise;
|
||||||
var cmd;
|
var cmd;
|
||||||
var args;
|
var args;
|
||||||
|
@ -847,4 +850,69 @@ angular.module('RoomController', ['ngSanitize', 'matrixFilter', 'mFileInput'])
|
||||||
$rootScope.currentCall = call;
|
$rootScope.currentCall = call;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
// Manage history of typed messages
|
||||||
|
var history = {
|
||||||
|
// The list of typed messages. Index 0 is the more recents
|
||||||
|
data: [],
|
||||||
|
|
||||||
|
// The position in the history currently displayed
|
||||||
|
position: -1,
|
||||||
|
|
||||||
|
// The message the user has started to type before going into the history
|
||||||
|
typingMessage: undefined,
|
||||||
|
|
||||||
|
// Store a message in the history
|
||||||
|
push: function(message) {
|
||||||
|
this.data.unshift(message);
|
||||||
|
|
||||||
|
// Reset history position
|
||||||
|
this.position = -1;
|
||||||
|
this.typingMessage = undefined;
|
||||||
|
},
|
||||||
|
|
||||||
|
// Move in the history
|
||||||
|
go: function(offset) {
|
||||||
|
|
||||||
|
if (-1 === this.position) {
|
||||||
|
// User starts to go to into the history, save the current line
|
||||||
|
this.typingMessage = $scope.textInput;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
// If the user modified this line in history, keep the change
|
||||||
|
this.data[this.position] = $scope.textInput;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Bounds the new position to valid data
|
||||||
|
var newPosition = this.position + offset;
|
||||||
|
newPosition = Math.max(-1, newPosition);
|
||||||
|
newPosition = Math.min(newPosition, this.data.length - 1);
|
||||||
|
this.position = newPosition;
|
||||||
|
|
||||||
|
if (-1 !== this.position) {
|
||||||
|
// Show the message from the history
|
||||||
|
$scope.textInput = this.data[this.position];
|
||||||
|
}
|
||||||
|
else if (undefined !== this.typingMessage) {
|
||||||
|
// Go back to the message the user started to type
|
||||||
|
$scope.textInput = this.typingMessage;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
// Make history singleton methods available from HTML
|
||||||
|
$scope.history = {
|
||||||
|
goUp: function($event) {
|
||||||
|
if ($scope.room_id) {
|
||||||
|
history.go(1);
|
||||||
|
}
|
||||||
|
$event.preventDefault();
|
||||||
|
},
|
||||||
|
goDown: function($event) {
|
||||||
|
if ($scope.room_id) {
|
||||||
|
history.go(-1);
|
||||||
|
}
|
||||||
|
$event.preventDefault();
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
}]);
|
}]);
|
||||||
|
|
|
@ -156,7 +156,8 @@
|
||||||
<td width="*">
|
<td width="*">
|
||||||
<textarea id="mainInput" rows="1" ng-model="textInput" ng-enter="send()"
|
<textarea id="mainInput" rows="1" ng-model="textInput" ng-enter="send()"
|
||||||
ng-disabled="state.permission_denied"
|
ng-disabled="state.permission_denied"
|
||||||
ng-focus="true" autocomplete="off" tab-complete/>
|
ng-keydown="(38 === $event.which) ? history.goUp($event) : ((40 === $event.which) ? history.goDown($event) : 0)"
|
||||||
|
ng-focus="true" autocomplete="off" tab-complete/>
|
||||||
</td>
|
</td>
|
||||||
<td id="buttonsCell">
|
<td id="buttonsCell">
|
||||||
<button ng-click="send()" ng-disabled="state.permission_denied">Send</button>
|
<button ng-click="send()" ng-disabled="state.permission_denied">Send</button>
|
||||||
|
|
Loading…
Reference in a new issue