diff --git a/js/models.js b/js/models.js
index bb9a41b..bd5d0e3 100644
--- a/js/models.js
+++ b/js/models.js
@@ -24,6 +24,16 @@ models.service('models', ['$rootScope', '$filter', function($rootScope, $filter)
var notification = 0
var unread = 0
var lastSeen = -2
+ var serverSortKey = fullName.replace(/^irc.server.(\w+)/, "irc.$1");
+
+ var indent = function(predicate) {
+ if( predicate == "serverSortKey" && fullName.match(/^irc./) && !fullName.match(/^irc.server./) ) {
+ // indent channel
+ return " "; // four protected spaces
+ } else {
+ return "";
+ }
+ }
// Buffer opened message does not include notify level
if( message['notify'] != undefined ) {
@@ -115,7 +125,9 @@ models.service('models', ['$rootScope', '$filter', function($rootScope, $filter)
addNick: addNick,
delNick: delNick,
updateNick: updateNick,
- flatNicklist: flatNicklist
+ flatNicklist: flatNicklist,
+ serverSortKey: serverSortKey,
+ indent: indent
}
}
diff --git a/js/websockets.js b/js/websockets.js
index 6c8182a..435021e 100644
--- a/js/websockets.js
+++ b/js/websockets.js
@@ -516,12 +516,20 @@ weechat.controller('WeechatCtrl', ['$rootScope', '$scope', '$store', '$timeout',
$store.bind($scope, "nonicklist", false);
// Save setting for displaying embeds
$store.bind($scope, "noembed", false);
+ // Save setting for channel ordering
+ $store.bind($scope, "orderbyserver", false);
// Save setting for displaying embeds in rootscope so it can be used from service
$rootScope.visible = $scope.noembed == false;
// Watch model and update show setting when it changes
$scope.$watch('noembed', function() {
$rootScope.visible = $scope.noembed == false;
});
+ // Watch model and update channel sorting when it changes
+ $scope.$watch('orderbyserver', function() {
+ $rootScope.predicate = $scope.orderbyserver ? 'serverSortKey' : 'number';
+ });
+
+ $rootScope.predicate = $scope.orderbyserver ? 'serverSortKey' : 'number';
$scope.setActiveBuffer = function(key) {
models.setActiveBuffer(key);