Support narrowing buffer selection with Alt+0-9 after using Alt+g or when onlyUnread is enabled, and show numeric overlays for Alt+0-9 keys on the buffers
This commit is contained in:
parent
10dde0e7d9
commit
9827710736
4 changed files with 106 additions and 16 deletions
|
@ -326,6 +326,28 @@ table.notimestampseconds td.time span.seconds {
|
||||||
display: none !important;
|
display: none !important;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#sidebar .showquickkeys .buffer .buffer-quick-key {
|
||||||
|
transition:all linear 1s;
|
||||||
|
-webkit-transition:all ease-out 1s;
|
||||||
|
opacity: 0.7;
|
||||||
|
}
|
||||||
|
#sidebar .buffer .buffer-quick-key {
|
||||||
|
margin-left: -0.8em;
|
||||||
|
margin-right: -0.2em;
|
||||||
|
font-size: smaller;
|
||||||
|
transition:all linear 2s;
|
||||||
|
-webkit-transition:all ease-in 2s;
|
||||||
|
opacity: 0;
|
||||||
|
text-shadow: -1px 0px 4px rgba(255, 255, 255, 0.4),
|
||||||
|
0px -1px 4px rgba(255, 255, 255, 0.4),
|
||||||
|
1px 0px 4px rgba(255, 255, 255, 0.4),
|
||||||
|
0px 1px 4px rgba(255, 255, 255, 0.4);
|
||||||
|
vertical-align: baseline;
|
||||||
|
display: inline-block;
|
||||||
|
width: 1em;
|
||||||
|
align: right;
|
||||||
|
}
|
||||||
|
|
||||||
.gb-modal {
|
.gb-modal {
|
||||||
z-index: 1000;
|
z-index: 1000;
|
||||||
height: 100%;
|
height: 100%;
|
||||||
|
|
|
@ -35,7 +35,7 @@
|
||||||
<script type="text/javascript" src="js/plugins.js"></script>
|
<script type="text/javascript" src="js/plugins.js"></script>
|
||||||
<script type="text/javascript" src="3rdparty/favico-0.3.5.min.js"></script>
|
<script type="text/javascript" src="3rdparty/favico-0.3.5.min.js"></script>
|
||||||
</head>
|
</head>
|
||||||
<body ng-controller="WeechatCtrl" ng-keydown="handleKeyPress($event)" ng-keypress="handleKeyPress($event)" ng-class="{'no-overflow': connected}" lang="en-US">
|
<body ng-controller="WeechatCtrl" ng-keydown="handleKeyPress($event)" ng-keyup="handleKeyRelease($event)" ng-keypress="handleKeyPress($event)" ng-class="{'no-overflow': connected}" lang="en-US">
|
||||||
<link ng-href="css/themes/{{theme}}.css" rel="stylesheet" media="screen" />
|
<link ng-href="css/themes/{{theme}}.css" rel="stylesheet" media="screen" />
|
||||||
<div ng-hide="connected" class="container">
|
<div ng-hide="connected" class="container">
|
||||||
<h2>
|
<h2>
|
||||||
|
@ -228,15 +228,16 @@ $ openssl req -nodes -newkey rsa:4096 -keyout relay.pem -x509 -days 365 -out rel
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div id="sidebar" data-state="visible" ng-swipe-left="hideSidebar()" class="vertical-line">
|
<div id="sidebar" data-state="visible" ng-swipe-left="hideSidebar()" class="vertical-line">
|
||||||
<ul class="nav nav-pills nav-stacked" ng-class="{'indented': (predicate === 'serverSortKey')}">
|
<ul class="nav nav-pills nav-stacked" ng-class="{'indented': (predicate === 'serverSortKey'), 'showquickkeys': showQuickKeys}">
|
||||||
<li class="bufferfilter">
|
<li class="bufferfilter">
|
||||||
<form role="form">
|
<form role="form">
|
||||||
<input class="form-control favorite-font" type="text" id="bufferFilter" ng-model="search" ng-keydown="handleSearchBoxKey($event)" placeholder="Search">
|
<input class="form-control favorite-font" type="text" id="bufferFilter" ng-model="search" ng-keydown="handleSearchBoxKey($event)" placeholder="Search">
|
||||||
</form>
|
</form>
|
||||||
</li>
|
</li>
|
||||||
<li class="buffer" ng-class="{'active': buffer.active, 'indent': buffer.indent, 'channel': buffer.type === 'channel', 'private': buffer.type === 'private'}" ng-repeat="(key, buffer) in (filteredBuffers = (getBuffers() | toArray | filter:{fullName:search} | filter:hasUnread | orderBy:predicate))">
|
<li class="buffer" ng-class="{'active': buffer.active, 'indent': buffer.indent, 'channel': buffer.type === 'channel', 'private': buffer.type === 'private'}" ng-repeat="(key, buffer) in (filteredBuffers = (getBuffers() | toArray:'withidx' | filter:{fullName:search} | filter:hasUnread | orderBy:predicate | getBufferQuickKeys:this))">
|
||||||
<a href="#" ng-click="setActiveBuffer(buffer.id)" title="{{ buffer.fullName }}">
|
<a href="#" ng-click="setActiveBuffer(buffer.id)" title="{{ buffer.fullName }}">
|
||||||
<span class="badge pull-right" ng-class="{'danger': buffer.notification}" ng-if="buffer.notification || buffer.unread" ng-bind="buffer.notification || buffer.unread"></span>
|
<span class="badge pull-right" ng-class="{'danger': buffer.notification}" ng-if="buffer.notification || buffer.unread" ng-bind="buffer.notification || buffer.unread"></span>
|
||||||
|
<span class="buffer-quick-key">{{ buffer.$quickKey }}</span>
|
||||||
<span class="buffername">{{ buffer.trimmedName || buffer.fullName }}</span>
|
<span class="buffername">{{ buffer.trimmedName || buffer.fullName }}</span>
|
||||||
</a>
|
</a>
|
||||||
</li>
|
</li>
|
||||||
|
|
|
@ -4,11 +4,20 @@
|
||||||
var weechat = angular.module('weechat');
|
var weechat = angular.module('weechat');
|
||||||
|
|
||||||
weechat.filter('toArray', function () {
|
weechat.filter('toArray', function () {
|
||||||
return function (obj) {
|
return function (obj, storeIdx) {
|
||||||
if (!(obj instanceof Object)) {
|
if (!(obj instanceof Object)) {
|
||||||
return obj;
|
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.keys(obj).map(function (key) {
|
||||||
return Object.defineProperty(obj[key], '$key', { value: key });
|
return Object.defineProperty(obj[key], '$key', { value: key });
|
||||||
});
|
});
|
||||||
|
@ -49,4 +58,27 @@ weechat.filter('inlinecolour', ['$sce', function($sce) {
|
||||||
return $sce.trustAsHtml(text.replace(hexColourRegex, substitute));
|
return $sce.trustAsHtml(text.replace(hexColourRegex, substitute));
|
||||||
};
|
};
|
||||||
}]);
|
}]);
|
||||||
|
|
||||||
|
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
|
// Support different browser quirks
|
||||||
var code = $event.keyCode ? $event.keyCode : $event.charCode;
|
var code = $event.keyCode ? $event.keyCode : $event.charCode;
|
||||||
|
|
||||||
|
// reset quick keys display
|
||||||
|
$rootScope.showQuickKeys = false;
|
||||||
|
|
||||||
// any other key than Tab resets nick completion iteration
|
// any other key than Tab resets nick completion iteration
|
||||||
var tmpIterCandidate = $scope.iterCandidate;
|
var tmpIterCandidate = $scope.iterCandidate;
|
||||||
$scope.iterCandidate = null;
|
$scope.iterCandidate = null;
|
||||||
|
@ -157,8 +160,16 @@ weechat.directive('inputBar', function() {
|
||||||
if (code === 48) {
|
if (code === 48) {
|
||||||
code = 58;
|
code = 58;
|
||||||
}
|
}
|
||||||
|
|
||||||
var bufferNumber = code - 48 - 1 ;
|
var bufferNumber = code - 48 - 1 ;
|
||||||
|
|
||||||
|
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
|
// 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
|
// copy the entire (possibly very large) buffer object, and then sort
|
||||||
// the buffers according to their WeeChat number
|
// the buffers according to their WeeChat number
|
||||||
|
@ -169,7 +180,8 @@ weechat.directive('inputBar', function() {
|
||||||
// Pass an ordering function to sort by first element.
|
// Pass an ordering function to sort by first element.
|
||||||
return left[0] - right[0];
|
return left[0] - right[0];
|
||||||
});
|
});
|
||||||
var activeBufferId = sortedBuffers[bufferNumber];
|
activeBufferId = sortedBuffers[bufferNumber];
|
||||||
|
}
|
||||||
if (activeBufferId) {
|
if (activeBufferId) {
|
||||||
$scope.$parent.setActiveBuffer(activeBufferId[1]);
|
$scope.$parent.setActiveBuffer(activeBufferId[1]);
|
||||||
$event.preventDefault();
|
$event.preventDefault();
|
||||||
|
@ -350,6 +362,29 @@ weechat.directive('inputBar', function() {
|
||||||
$event.preventDefault();
|
$event.preventDefault();
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
// Alt key down -> display quick key legend
|
||||||
|
if ($event.type === "keydown" && code === 18) {
|
||||||
|
$rootScope.showQuickKeys = true;
|
||||||
|
if ($rootScope.quickKeysTimer !== undefined) {
|
||||||
|
clearTimeout($rootScope.quickKeysTimer);
|
||||||
|
}
|
||||||
|
$rootScope.quickKeysTimer = setTimeout(function() {
|
||||||
|
if ($rootScope.showQuickKeys) {
|
||||||
|
$rootScope.showQuickKeys = false;
|
||||||
|
$rootScope.$apply();
|
||||||
|
}
|
||||||
|
delete $rootScope.quickKeysTimer;
|
||||||
|
}, 3000);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
$rootScope.handleKeyRelease = function($event) {
|
||||||
|
// Alt key up -> remove quick key legend
|
||||||
|
if ($event.keyCode === 18) {
|
||||||
|
if ($rootScope.showQuickKeys) {
|
||||||
|
$rootScope.showQuickKeys = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
};
|
};
|
||||||
}]
|
}]
|
||||||
};
|
};
|
||||||
|
|
Loading…
Reference in a new issue