Dashboard SSH pagination: fix ng-if scope shadowing for per-page and go-to

Use $parent ng-model bindings inside ng-if so values update the controller
scope. Coerce per-page to int in slice math to avoid string concat bugs.
This commit is contained in:
master3395
2026-04-10 18:17:18 +02:00
parent 8db49babae
commit 7736e0ef95
4 changed files with 64 additions and 16 deletions

View File

@@ -1054,8 +1054,10 @@ var dashboardStatsControllerFn = function ($scope, $http, $timeout) {
console.log('updateSSHLoginsPaginated: No data, cleared paginated array');
return;
}
var start = ($scope.sshLoginsCurrentPage - 1) * $scope.sshLoginsPerPage;
var end = start + $scope.sshLoginsPerPage;
var per = parseInt($scope.sshLoginsPerPage, 10) || 10;
$scope.sshLoginsPerPage = per;
var start = ($scope.sshLoginsCurrentPage - 1) * per;
var end = start + per;
$scope.sshLoginsPaginated = $scope.sshLogins.slice(start, end);
console.log('updateSSHLoginsPaginated: start=', start, 'end=', end, 'total=', $scope.sshLogins.length, 'paginated=', $scope.sshLoginsPaginated.length);
};
@@ -1084,6 +1086,12 @@ var dashboardStatsControllerFn = function ($scope, $http, $timeout) {
$scope.sshLoginsGoToPage = $scope.sshLoginsCurrentPage;
}
};
$scope.sshLoginsChangePerPage = function() {
$scope.sshLoginsPerPage = parseInt($scope.sshLoginsPerPage, 10) || 10;
$scope.sshLoginsCurrentPage = 1;
$scope.sshLoginsGoToPage = 1;
$scope.updateSSHLoginsPaginated();
};
$scope.refreshSSHLogins = function() {
$scope.loadingSSHLogins = true;
@@ -1159,8 +1167,10 @@ var dashboardStatsControllerFn = function ($scope, $http, $timeout) {
console.log('updateSSHLogsPaginated: No data, cleared paginated array');
return;
}
var start = ($scope.sshLogsCurrentPage - 1) * $scope.sshLogsPerPage;
var end = start + $scope.sshLogsPerPage;
var per = parseInt($scope.sshLogsPerPage, 10) || 10;
$scope.sshLogsPerPage = per;
var start = ($scope.sshLogsCurrentPage - 1) * per;
var end = start + per;
$scope.sshLogsPaginated = $scope.sshLogs.slice(start, end);
console.log('updateSSHLogsPaginated: start=', start, 'end=', end, 'total=', $scope.sshLogs.length, 'paginated=', $scope.sshLogsPaginated.length);
};
@@ -1189,6 +1199,12 @@ var dashboardStatsControllerFn = function ($scope, $http, $timeout) {
$scope.sshLogsGoToPage = $scope.sshLogsCurrentPage;
}
};
$scope.sshLogsChangePerPage = function() {
$scope.sshLogsPerPage = parseInt($scope.sshLogsPerPage, 10) || 10;
$scope.sshLogsCurrentPage = 1;
$scope.sshLogsGoToPage = 1;
$scope.updateSSHLogsPaginated();
};
$scope.refreshSSHLogs = function() {
$scope.loadingSSHLogs = true;

View File

@@ -1080,7 +1080,7 @@
<div ng-if="!loadingSSHLogins && sshLogins.length > 0" class="pagination-controls" style="display: flex; justify-content: space-between; align-items: center; flex-wrap: wrap; gap: 12px; margin-top: 16px; padding: 12px 0; border-top: 1px solid #e8e9ff;">
<div style="display: flex; align-items: center; gap: 12px;">
<span style="color: #64748b; font-size: 13px;">Show</span>
<select ng-model="sshLoginsPerPage" ng-change="sshLoginsChangePerPage()" style="padding: 6px 10px; border: 1px solid #e2e8f0; border-radius: 6px; font-size: 13px; background: white;">
<select ng-model="$parent.sshLoginsPerPage" ng-change="sshLoginsChangePerPage()" style="padding: 6px 10px; border: 1px solid #e2e8f0; border-radius: 6px; font-size: 13px; background: white;">
<option ng-value="10">10</option>
<option ng-value="20">20</option>
<option ng-value="50">50</option>
@@ -1098,7 +1098,7 @@
<i class="fas fa-chevron-right"></i>
</button>
<span style="color: #64748b; font-size: 13px; margin-left: 8px;">Go to</span>
<input type="number" min="1" ng-model="sshLoginsGoToPage" ng-keydown="$event.keyCode === 13 && sshLoginsGoToPageNumber()" style="width: 72px; padding: 6px 8px; border: 1px solid #e2e8f0; border-radius: 6px; font-size: 13px;" />
<input type="number" min="1" ng-model="$parent.sshLoginsGoToPage" ng-keydown="($event.which === 13 || $event.keyCode === 13) && sshLoginsGoToPageNumber()" style="width: 72px; padding: 6px 8px; border: 1px solid #e2e8f0; border-radius: 6px; font-size: 13px;" />
<button ng-click="sshLoginsGoToPageNumber()" style="padding: 6px 10px; border: 1px solid #e2e8f0; border-radius: 6px; background: white; cursor: pointer; font-size: 13px;">Go</button>
</div>
</div>
@@ -1307,7 +1307,7 @@
<div ng-if="!loadingSSHLogs && sshLogs.length > 0" class="pagination-controls" style="display: flex; justify-content: space-between; align-items: center; flex-wrap: wrap; gap: 12px; margin-top: 16px; padding: 12px 0; border-top: 1px solid #e8e9ff;">
<div style="display: flex; align-items: center; gap: 12px;">
<span style="color: #64748b; font-size: 13px;">Show</span>
<select ng-model="sshLogsPerPage" ng-change="sshLogsChangePerPage()" style="padding: 6px 10px; border: 1px solid #e2e8f0; border-radius: 6px; font-size: 13px; background: white;">
<select ng-model="$parent.sshLogsPerPage" ng-change="sshLogsChangePerPage()" style="padding: 6px 10px; border: 1px solid #e2e8f0; border-radius: 6px; font-size: 13px; background: white;">
<option ng-value="10">10</option>
<option ng-value="25">25</option>
<option ng-value="50">50</option>
@@ -1325,7 +1325,7 @@
<i class="fas fa-chevron-right"></i>
</button>
<span style="color: #64748b; font-size: 13px; margin-left: 8px;">Go to</span>
<input type="number" min="1" ng-model="sshLogsGoToPage" ng-keydown="$event.keyCode === 13 && sshLogsGoToPageNumber()" style="width: 72px; padding: 6px 8px; border: 1px solid #e2e8f0; border-radius: 6px; font-size: 13px;" />
<input type="number" min="1" ng-model="$parent.sshLogsGoToPage" ng-keydown="($event.which === 13 || $event.keyCode === 13) && sshLogsGoToPageNumber()" style="width: 72px; padding: 6px 8px; border: 1px solid #e2e8f0; border-radius: 6px; font-size: 13px;" />
<button ng-click="sshLogsGoToPageNumber()" style="padding: 6px 10px; border: 1px solid #e2e8f0; border-radius: 6px; background: white; cursor: pointer; font-size: 13px;">Go</button>
</div>
</div>

View File

@@ -1054,8 +1054,10 @@ var dashboardStatsControllerFn = function ($scope, $http, $timeout) {
console.log('updateSSHLoginsPaginated: No data, cleared paginated array');
return;
}
var start = ($scope.sshLoginsCurrentPage - 1) * $scope.sshLoginsPerPage;
var end = start + $scope.sshLoginsPerPage;
var per = parseInt($scope.sshLoginsPerPage, 10) || 10;
$scope.sshLoginsPerPage = per;
var start = ($scope.sshLoginsCurrentPage - 1) * per;
var end = start + per;
$scope.sshLoginsPaginated = $scope.sshLogins.slice(start, end);
console.log('updateSSHLoginsPaginated: start=', start, 'end=', end, 'total=', $scope.sshLogins.length, 'paginated=', $scope.sshLoginsPaginated.length);
};
@@ -1084,6 +1086,12 @@ var dashboardStatsControllerFn = function ($scope, $http, $timeout) {
$scope.sshLoginsGoToPage = $scope.sshLoginsCurrentPage;
}
};
$scope.sshLoginsChangePerPage = function() {
$scope.sshLoginsPerPage = parseInt($scope.sshLoginsPerPage, 10) || 10;
$scope.sshLoginsCurrentPage = 1;
$scope.sshLoginsGoToPage = 1;
$scope.updateSSHLoginsPaginated();
};
$scope.refreshSSHLogins = function() {
$scope.loadingSSHLogins = true;
@@ -1147,8 +1155,10 @@ var dashboardStatsControllerFn = function ($scope, $http, $timeout) {
console.log('updateSSHLogsPaginated: No data, cleared paginated array');
return;
}
var start = ($scope.sshLogsCurrentPage - 1) * $scope.sshLogsPerPage;
var end = start + $scope.sshLogsPerPage;
var per = parseInt($scope.sshLogsPerPage, 10) || 10;
$scope.sshLogsPerPage = per;
var start = ($scope.sshLogsCurrentPage - 1) * per;
var end = start + per;
$scope.sshLogsPaginated = $scope.sshLogs.slice(start, end);
console.log('updateSSHLogsPaginated: start=', start, 'end=', end, 'total=', $scope.sshLogs.length, 'paginated=', $scope.sshLogsPaginated.length);
};
@@ -1177,6 +1187,12 @@ var dashboardStatsControllerFn = function ($scope, $http, $timeout) {
$scope.sshLogsGoToPage = $scope.sshLogsCurrentPage;
}
};
$scope.sshLogsChangePerPage = function() {
$scope.sshLogsPerPage = parseInt($scope.sshLogsPerPage, 10) || 10;
$scope.sshLogsCurrentPage = 1;
$scope.sshLogsGoToPage = 1;
$scope.updateSSHLogsPaginated();
};
$scope.refreshSSHLogs = function() {
$scope.loadingSSHLogs = true;

View File

@@ -1054,8 +1054,10 @@ var dashboardStatsControllerFn = function ($scope, $http, $timeout) {
console.log('updateSSHLoginsPaginated: No data, cleared paginated array');
return;
}
var start = ($scope.sshLoginsCurrentPage - 1) * $scope.sshLoginsPerPage;
var end = start + $scope.sshLoginsPerPage;
var per = parseInt($scope.sshLoginsPerPage, 10) || 10;
$scope.sshLoginsPerPage = per;
var start = ($scope.sshLoginsCurrentPage - 1) * per;
var end = start + per;
$scope.sshLoginsPaginated = $scope.sshLogins.slice(start, end);
console.log('updateSSHLoginsPaginated: start=', start, 'end=', end, 'total=', $scope.sshLogins.length, 'paginated=', $scope.sshLoginsPaginated.length);
};
@@ -1084,6 +1086,12 @@ var dashboardStatsControllerFn = function ($scope, $http, $timeout) {
$scope.sshLoginsGoToPage = $scope.sshLoginsCurrentPage;
}
};
$scope.sshLoginsChangePerPage = function() {
$scope.sshLoginsPerPage = parseInt($scope.sshLoginsPerPage, 10) || 10;
$scope.sshLoginsCurrentPage = 1;
$scope.sshLoginsGoToPage = 1;
$scope.updateSSHLoginsPaginated();
};
$scope.refreshSSHLogins = function() {
$scope.loadingSSHLogins = true;
@@ -1147,8 +1155,10 @@ var dashboardStatsControllerFn = function ($scope, $http, $timeout) {
console.log('updateSSHLogsPaginated: No data, cleared paginated array');
return;
}
var start = ($scope.sshLogsCurrentPage - 1) * $scope.sshLogsPerPage;
var end = start + $scope.sshLogsPerPage;
var per = parseInt($scope.sshLogsPerPage, 10) || 10;
$scope.sshLogsPerPage = per;
var start = ($scope.sshLogsCurrentPage - 1) * per;
var end = start + per;
$scope.sshLogsPaginated = $scope.sshLogs.slice(start, end);
console.log('updateSSHLogsPaginated: start=', start, 'end=', end, 'total=', $scope.sshLogs.length, 'paginated=', $scope.sshLogsPaginated.length);
};
@@ -1177,6 +1187,12 @@ var dashboardStatsControllerFn = function ($scope, $http, $timeout) {
$scope.sshLogsGoToPage = $scope.sshLogsCurrentPage;
}
};
$scope.sshLogsChangePerPage = function() {
$scope.sshLogsPerPage = parseInt($scope.sshLogsPerPage, 10) || 10;
$scope.sshLogsCurrentPage = 1;
$scope.sshLogsGoToPage = 1;
$scope.updateSSHLogsPaginated();
};
$scope.refreshSSHLogs = function() {
$scope.loadingSSHLogs = true;