Merge pull request #483 from glowing-bear/key-overlays
Show quick access keys on Alt keypress
This commit is contained in:
commit
1dc32fd847
4 changed files with 107 additions and 16 deletions
|
@ -4,11 +4,20 @@
|
|||
var weechat = angular.module('weechat');
|
||||
|
||||
weechat.filter('toArray', function () {
|
||||
return function (obj) {
|
||||
return function (obj, storeIdx) {
|
||||
if (!(obj instanceof Object)) {
|
||||
return obj;
|
||||
}
|
||||
|
||||
if (storeIdx) {
|
||||
return Object.keys(obj).map(function (key, idx) {
|
||||
return Object.defineProperties(obj[key], {
|
||||
'$key' : { value: key },
|
||||
'$idx' : { value: idx, configurable: true }
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
return Object.keys(obj).map(function (key) {
|
||||
return Object.defineProperty(obj[key], '$key', { value: key });
|
||||
});
|
||||
|
@ -95,4 +104,27 @@ weechat.filter('DOMfilter', ['$filter', '$sce', function($filter, $sce) {
|
|||
return $sce.trustAsHtml(el.innerHTML);
|
||||
};
|
||||
}]);
|
||||
|
||||
weechat.filter('getBufferQuickKeys', function () {
|
||||
return function (obj, $scope) {
|
||||
if (!$scope) { return obj; }
|
||||
if (($scope.search !== undefined && $scope.search.length) || $scope.onlyUnread) {
|
||||
obj.forEach(function(buf, idx) {
|
||||
buf.$quickKey = idx < 10 ? (idx + 1) % 10 : '';
|
||||
});
|
||||
} else {
|
||||
_.map(obj, function(buffer, idx) {
|
||||
return [buffer.number, buffer.$idx, idx];
|
||||
}).sort(function(left, right) {
|
||||
// By default, Array.prototype.sort() sorts alphabetically.
|
||||
// Pass an ordering function to sort by first element.
|
||||
return left[0] - right[0] || left[1] - right[1];
|
||||
}).forEach(function(info, keyIdx) {
|
||||
obj[ info[2] ].$quickKey = keyIdx < 10 ? (keyIdx + 1) % 10 : '';
|
||||
});
|
||||
}
|
||||
return obj;
|
||||
};
|
||||
});
|
||||
|
||||
})();
|
||||
|
|
|
@ -148,6 +148,9 @@ weechat.directive('inputBar', function() {
|
|||
// Support different browser quirks
|
||||
var code = $event.keyCode ? $event.keyCode : $event.charCode;
|
||||
|
||||
// reset quick keys display
|
||||
$rootScope.showQuickKeys = false;
|
||||
|
||||
// any other key than Tab resets nick completion iteration
|
||||
var tmpIterCandidate = $scope.iterCandidate;
|
||||
$scope.iterCandidate = null;
|
||||
|
@ -157,19 +160,28 @@ weechat.directive('inputBar', function() {
|
|||
if (code === 48) {
|
||||
code = 58;
|
||||
}
|
||||
|
||||
var bufferNumber = code - 48 - 1 ;
|
||||
// Map the buffers to only their numbers and IDs so we don't have to
|
||||
// copy the entire (possibly very large) buffer object, and then sort
|
||||
// the buffers according to their WeeChat number
|
||||
var sortedBuffers = _.map(models.getBuffers(), function(buffer) {
|
||||
return [buffer.number, buffer.id];
|
||||
}).sort(function(left, right) {
|
||||
// By default, Array.prototype.sort() sorts alphabetically.
|
||||
// Pass an ordering function to sort by first element.
|
||||
return left[0] - right[0];
|
||||
});
|
||||
var activeBufferId = sortedBuffers[bufferNumber];
|
||||
|
||||
var activeBufferId;
|
||||
// quick select filtered entries
|
||||
if (($scope.$parent.search.length || $scope.$parent.onlyUnread) && $scope.$parent.filteredBuffers.length) {
|
||||
var filteredBufferNum = $scope.$parent.filteredBuffers[bufferNumber];
|
||||
if (filteredBufferNum !== undefined) {
|
||||
activeBufferId = [filteredBufferNum.number, filteredBufferNum.id];
|
||||
}
|
||||
} else {
|
||||
// Map the buffers to only their numbers and IDs so we don't have to
|
||||
// copy the entire (possibly very large) buffer object, and then sort
|
||||
// the buffers according to their WeeChat number
|
||||
var sortedBuffers = _.map(models.getBuffers(), function(buffer) {
|
||||
return [buffer.number, buffer.id];
|
||||
}).sort(function(left, right) {
|
||||
// By default, Array.prototype.sort() sorts alphabetically.
|
||||
// Pass an ordering function to sort by first element.
|
||||
return left[0] - right[0];
|
||||
});
|
||||
activeBufferId = sortedBuffers[bufferNumber];
|
||||
}
|
||||
if (activeBufferId) {
|
||||
$scope.$parent.setActiveBuffer(activeBufferId[1]);
|
||||
$event.preventDefault();
|
||||
|
@ -356,6 +368,28 @@ weechat.directive('inputBar', function() {
|
|||
$event.preventDefault();
|
||||
return true;
|
||||
}
|
||||
|
||||
// Alt key down -> display quick key legend
|
||||
if ($event.type === "keydown" && code === 18 && !$event.ctrlKey && !$event.shiftKey) {
|
||||
$rootScope.showQuickKeys = true;
|
||||
}
|
||||
};
|
||||
|
||||
$rootScope.handleKeyRelease = function($event) {
|
||||
// Alt key up -> remove quick key legend
|
||||
if ($event.keyCode === 18) {
|
||||
if ($rootScope.quickKeysTimer !== undefined) {
|
||||
clearTimeout($rootScope.quickKeysTimer);
|
||||
}
|
||||
$rootScope.quickKeysTimer = setTimeout(function() {
|
||||
if ($rootScope.showQuickKeys) {
|
||||
$rootScope.showQuickKeys = false;
|
||||
$rootScope.$apply();
|
||||
}
|
||||
delete $rootScope.quickKeysTimer;
|
||||
}, 1000);
|
||||
return true;
|
||||
}
|
||||
};
|
||||
}]
|
||||
};
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue