keycloak-aplcache
Changes
testsuite/integration-arquillian/tests/base/src/main/java/org/keycloak/testsuite/util/UIUtils.java 2(+1 -1)
testsuite/integration-arquillian/tests/other/console/src/main/java/org/keycloak/testsuite/console/page/clients/clientscopes/ClientScopesSetupForm.java 2(+1 -1)
themes/src/main/resources/theme/base/admin/resources/partials/client-scope-mappings.html 48(+30 -18)
themes/src/main/resources/theme/base/admin/resources/partials/client-scope-scope-mappings.html 48(+30 -18)
themes/src/main/resources/theme/base/admin/resources/partials/client-scopes-evaluate.html 71(+46 -25)
themes/src/main/resources/theme/base/admin/resources/partials/client-scopes-realm-default.html 32(+20 -12)
Details
diff --git a/testsuite/integration-arquillian/tests/base/src/main/java/org/keycloak/testsuite/util/UIUtils.java b/testsuite/integration-arquillian/tests/base/src/main/java/org/keycloak/testsuite/util/UIUtils.java
index 6a09bb7..9c5399d 100644
--- a/testsuite/integration-arquillian/tests/base/src/main/java/org/keycloak/testsuite/util/UIUtils.java
+++ b/testsuite/integration-arquillian/tests/base/src/main/java/org/keycloak/testsuite/util/UIUtils.java
@@ -31,7 +31,7 @@ public final class UIUtils {
public static boolean selectContainsOption(Select select, String optionText) {
for (WebElement option : select.getOptions()) {
- if (option.getText().equals(optionText)) {
+ if (option.getText().trim().equals(optionText)) {
return true;
}
}
diff --git a/testsuite/integration-arquillian/tests/other/console/src/main/java/org/keycloak/testsuite/console/page/clients/clientscopes/ClientScopesSetupForm.java b/testsuite/integration-arquillian/tests/other/console/src/main/java/org/keycloak/testsuite/console/page/clients/clientscopes/ClientScopesSetupForm.java
index b917d76..e52d4f7 100644
--- a/testsuite/integration-arquillian/tests/other/console/src/main/java/org/keycloak/testsuite/console/page/clients/clientscopes/ClientScopesSetupForm.java
+++ b/testsuite/integration-arquillian/tests/other/console/src/main/java/org/keycloak/testsuite/console/page/clients/clientscopes/ClientScopesSetupForm.java
@@ -93,7 +93,7 @@ public class ClientScopesSetupForm extends Form {
static Set<String> getSelectValues(Select select) {
Set<String> roles = new HashSet<>();
for (WebElement option : select.getOptions()) {
- roles.add(getTextFromElement(option));
+ roles.add(getTextFromElement(option).trim());
}
return roles;
}
diff --git a/themes/src/main/resources/theme/base/admin/resources/js/controllers/clients.js b/themes/src/main/resources/theme/base/admin/resources/js/controllers/clients.js
index e86371b..cc0b8fc 100755
--- a/themes/src/main/resources/theme/base/admin/resources/js/controllers/clients.js
+++ b/themes/src/main/resources/theme/base/admin/resources/js/controllers/clients.js
@@ -676,7 +676,7 @@ module.controller('ClientOfflineSessionsCtrl', function($scope, realm, offlineSe
module.controller('ClientRoleDetailCtrl', function($scope, realm, client, role, roles, clients,
Role, ClientRole, RoleById, RoleRealmComposites, RoleClientComposites,
- $http, $location, Dialog, Notifications) {
+ $http, $location, Dialog, Notifications, ComponentUtils) {
$scope.realm = realm;
$scope.client = client;
$scope.role = angular.copy(role);
@@ -754,7 +754,7 @@ module.controller('ClientRoleDetailCtrl', function($scope, realm, client, role,
roleControl($scope, realm, role, roles, clients,
ClientRole, RoleById, RoleRealmComposites, RoleClientComposites,
- $http, $location, Notifications, Dialog);
+ $http, $location, Notifications, Dialog, ComponentUtils);
});
@@ -1610,41 +1610,45 @@ module.controller('ClientScopeMappingCtrl', function($scope, $http, realm, clien
};
$scope.addRealmRole = function() {
- var roles = $scope.selectedRealmRoles;
+ $scope.selectedRealmRolesToAdd = JSON.parse('[' + $scope.selectedRealmRoles + ']');
$scope.selectedRealmRoles = [];
$http.post(authUrl + '/admin/realms/' + realm.realm + '/clients/' + client.id + '/scope-mappings/realm',
- roles).then(function() {
+ $scope.selectedRealmRolesToAdd).then(function() {
updateRealmRoles();
+ $scope.selectedRealmRolesToAdd = [];
Notifications.success("Scope mappings updated.");
});
};
$scope.deleteRealmRole = function() {
- var roles = $scope.selectedRealmMappings;
+ $scope.selectedRealmMappingsToRemove = JSON.parse('[' + $scope.selectedRealmMappings + ']');
$scope.selectedRealmMappings = [];
$http.delete(authUrl + '/admin/realms/' + realm.realm + '/clients/' + client.id + '/scope-mappings/realm',
- {data : roles, headers : {"content-type" : "application/json"}}).then(function () {
+ {data : $scope.selectedRealmMappingsToRemove, headers : {"content-type" : "application/json"}}).then(function () {
updateRealmRoles();
+ $scope.selectedRealmMappingsToRemove = [];
Notifications.success("Scope mappings updated.");
});
};
$scope.addClientRole = function() {
- var roles = $scope.selectedClientRoles;
+ $scope.selectedClientRolesToAdd = JSON.parse('[' + $scope.selectedClientRoles + ']');
$scope.selectedClientRoles = [];
$http.post(authUrl + '/admin/realms/' + realm.realm + '/clients/' + client.id + '/scope-mappings/clients/' + $scope.targetClient.id,
- roles).then(function () {
+ $scope.selectedClientRolesToAdd).then(function () {
updateClientRoles();
+ $scope.selectedClientRolesToAdd = [];
Notifications.success("Scope mappings updated.");
});
};
$scope.deleteClientRole = function() {
- var roles = $scope.selectedClientMappings;
+ $scope.selectedClientMappingsToRemove = JSON.parse('[' + $scope.selectedClientMappings + ']');
$scope.selectedClientMappings = [];
$http.delete(authUrl + '/admin/realms/' + realm.realm + '/clients/' + client.id + '/scope-mappings/clients/' + $scope.targetClient.id,
- {data : roles, headers : {"content-type" : "application/json"}}).then(function () {
+ {data : $scope.selectedClientMappingsToRemove, headers : {"content-type" : "application/json"}}).then(function () {
updateClientRoles();
+ $scope.selectedClientMappingsToRemove = [];
Notifications.success("Scope mappings updated.");
});
};
@@ -2125,11 +2129,11 @@ module.controller('ClientClientScopesSetupCtrl', function($scope, realm, Realm,
}
$scope.addDefaultClientScope = function () {
+ $scope.selectedDefaultClientScopesToAdd = JSON.parse('[' + $scope.selectedDefaultClientScopes + ']');
+ toAdd = $scope.selectedDefaultClientScopesToAdd.length;
- toAdd = $scope.selectedDefaultClientScopes.length;
-
- for (var i = 0; i < $scope.selectedDefaultClientScopes.length; i++) {
- var currentScope = $scope.selectedDefaultClientScopes[i];
+ for (var i = 0; i < $scope.selectedDefaultClientScopesToAdd.length; i++) {
+ var currentScope = $scope.selectedDefaultClientScopesToAdd[i];
ClientDefaultClientScopes.update({
realm : realm.realm,
@@ -2143,14 +2147,15 @@ module.controller('ClientClientScopesSetupCtrl', function($scope, realm, Realm,
}
});
}
+ $scope.selectedDefaultClientScopesToAdd = [];
};
$scope.deleteDefaultClientScope = function () {
+ $scope.selectedDefDefaultClientScopesToRemove = JSON.parse('[' + $scope.selectedDefDefaultClientScopes + ']');
+ toRemove = $scope.selectedDefDefaultClientScopesToRemove.length;
- toRemove = $scope.selectedDefDefaultClientScopes.length;
-
- for (var i = 0; i < $scope.selectedDefDefaultClientScopes.length; i++) {
- var currentScope = $scope.selectedDefDefaultClientScopes[i];
+ for (var i = 0; i < $scope.selectedDefDefaultClientScopesToRemove.length; i++) {
+ var currentScope = $scope.selectedDefDefaultClientScopesToRemove[i];
ClientDefaultClientScopes.remove({
realm : realm.realm,
@@ -2164,14 +2169,15 @@ module.controller('ClientClientScopesSetupCtrl', function($scope, realm, Realm,
}
});
}
+ $scope.selectedDefDefaultClientScopesToRemove = [];
};
$scope.addOptionalClientScope = function () {
+ $scope.selectedOptionalClientScopesToAdd = JSON.parse('[' + $scope.selectedOptionalClientScopes + ']');
+ toAdd = $scope.selectedOptionalClientScopesToAdd.length;
- toAdd = $scope.selectedOptionalClientScopes.length;
-
- for (var i = 0; i < $scope.selectedOptionalClientScopes.length; i++) {
- var currentScope = $scope.selectedOptionalClientScopes[i];
+ for (var i = 0; i < $scope.selectedOptionalClientScopesToAdd.length; i++) {
+ var currentScope = $scope.selectedOptionalClientScopesToAdd[i];
ClientOptionalClientScopes.update({
realm : realm.realm,
@@ -2188,11 +2194,11 @@ module.controller('ClientClientScopesSetupCtrl', function($scope, realm, Realm,
};
$scope.deleteOptionalClientScope = function () {
+ $scope.selectedDefOptionalClientScopesToRemove = JSON.parse('[' + $scope.selectedDefOptionalClientScopes + ']');
+ toRemove = $scope.selectedDefOptionalClientScopesToRemove.length;
- toRemove = $scope.selectedDefOptionalClientScopes.length;
-
- for (var i = 0; i < $scope.selectedDefOptionalClientScopes.length; i++) {
- var currentScope = $scope.selectedDefOptionalClientScopes[i];
+ for (var i = 0; i < $scope.selectedDefOptionalClientScopesToRemove.length; i++) {
+ var currentScope = $scope.selectedDefOptionalClientScopesToRemove[i];
ClientOptionalClientScopes.remove({
realm : realm.realm,
@@ -2206,13 +2212,14 @@ module.controller('ClientClientScopesSetupCtrl', function($scope, realm, Realm,
}
});
}
+ $scope.selectedDefOptionalClientScopesToRemove = [];
};
});
module.controller('ClientClientScopesEvaluateCtrl', function($scope, Realm, User, ClientEvaluateProtocolMappers, ClientEvaluateGrantedRoles,
ClientEvaluateNotGrantedRoles, ClientEvaluateGenerateExampleToken, realm, client, clients, clientScopes, serverInfo,
- clientOptionalClientScopes, clientDefaultClientScopes, $route, $routeParams, $http, Notifications, $location) {
+ ComponentUtils, clientOptionalClientScopes, clientDefaultClientScopes, $route, $routeParams, $http, Notifications, $location) {
console.log('ClientClientScopesEvaluateCtrl');
@@ -2279,37 +2286,38 @@ module.controller('ClientClientScopesEvaluateCtrl', function($scope, Realm, User
$scope.addAppliedClientScope = function () {
-
- for (var i = 0; i < $scope.selectedClientScopes.length; i++) {
- var currentScope = $scope.selectedClientScopes[i];
+ $scope.selectedClientScopesToAdd = JSON.parse('[' + $scope.selectedClientScopes + ']');
+ for (var i = 0; i < $scope.selectedClientScopesToAdd.length; i++) {
+ var currentScope = $scope.selectedClientScopesToAdd[i];
$scope.assignedClientScopes.push(currentScope);
- var index = $scope.availableClientScopes.indexOf(currentScope);
+ var index = ComponentUtils.findIndexById($scope.availableClientScopes, currentScope.id);
if (index > -1) {
$scope.availableClientScopes.splice(index, 1);
}
}
$scope.selectedClientScopes = [];
-
+ $scope.selectedClientScopesToAdd = [];
updateState();
};
-
$scope.deleteAppliedClientScope = function () {
- for (var i = 0; i < $scope.selectedDefClientScopes.length; i++) {
- var currentScope = $scope.selectedDefClientScopes[i];
+ $scope.selectedDefClientScopesToRemove = JSON.parse('[' + $scope.selectedDefClientScopes + ']');
+ for (var i = 0; i < $scope.selectedDefClientScopesToRemove.length; i++) {
+ var currentScope = $scope.selectedDefClientScopesToRemove[i];
$scope.availableClientScopes.push(currentScope);
- var index = $scope.assignedClientScopes.indexOf(currentScope);
+ var index = ComponentUtils.findIndexById($scope.assignedClientScopes, currentScope.id);
if (index > -1) {
$scope.assignedClientScopes.splice(index, 1);
}
}
$scope.selectedDefClientScopes = [];
+ $scope.selectedDefClientScopesToRemove = [];
updateState();
};
@@ -2538,11 +2546,11 @@ module.controller('ClientScopesRealmDefaultCtrl', function($scope, realm, Realm,
}
$scope.addDefaultClientScope = function () {
+ $scope.selectedDefaultClientScopesToAdd = JSON.parse('[' + $scope.selectedDefaultClientScopes + ']');
+ toAdd = $scope.selectedDefaultClientScopesToAdd.length;
- toAdd = $scope.selectedDefaultClientScopes.length;
-
- for (var i = 0; i < $scope.selectedDefaultClientScopes.length; i++) {
- var currentScope = $scope.selectedDefaultClientScopes[i];
+ for (var i = 0; i < $scope.selectedDefaultClientScopesToAdd.length; i++) {
+ var currentScope = $scope.selectedDefaultClientScopesToAdd[i];
RealmDefaultClientScopes.update({
realm : realm.realm,
@@ -2556,14 +2564,15 @@ module.controller('ClientScopesRealmDefaultCtrl', function($scope, realm, Realm,
}
});
}
+ $scope.selectedDefaultClientScopesToAdd = [];
};
$scope.deleteDefaultClientScope = function () {
+ $scope.selectedDefDefaultClientScopesToRemove = JSON.parse('[' + $scope.selectedDefDefaultClientScopes + ']');
+ toRemove = $scope.selectedDefDefaultClientScopesToRemove.length;
- toRemove = $scope.selectedDefDefaultClientScopes.length;
-
- for (var i = 0; i < $scope.selectedDefDefaultClientScopes.length; i++) {
- var currentScope = $scope.selectedDefDefaultClientScopes[i];
+ for (var i = 0; i < $scope.selectedDefDefaultClientScopesToRemove.length; i++) {
+ var currentScope = $scope.selectedDefDefaultClientScopesToRemove[i];
RealmDefaultClientScopes.remove({
realm : realm.realm,
@@ -2576,14 +2585,15 @@ module.controller('ClientScopesRealmDefaultCtrl', function($scope, realm, Realm,
}
});
}
+ $scope.selectedDefDefaultClientScopesToRemove = [];
};
$scope.addOptionalClientScope = function () {
+ $scope.selectedOptionalClientScopesToAdd = JSON.parse('[' + $scope.selectedOptionalClientScopes + ']');
+ toAdd = $scope.selectedOptionalClientScopesToAdd.length;
- toAdd = $scope.selectedOptionalClientScopes.length;
-
- for (var i = 0; i < $scope.selectedOptionalClientScopes.length; i++) {
- var currentScope = $scope.selectedOptionalClientScopes[i];
+ for (var i = 0; i < $scope.selectedOptionalClientScopesToAdd.length; i++) {
+ var currentScope = $scope.selectedOptionalClientScopesToAdd[i];
RealmOptionalClientScopes.update({
realm : realm.realm,
@@ -2597,14 +2607,15 @@ module.controller('ClientScopesRealmDefaultCtrl', function($scope, realm, Realm,
}
});
}
+ $scope.selectedOptionalClientScopesToAdd = [];
};
$scope.deleteOptionalClientScope = function () {
+ $scope.selectedDefOptionalClientScopesToRemove = JSON.parse('[' + $scope.selectedDefOptionalClientScopes + ']');
+ toRemove = $scope.selectedDefOptionalClientScopesToRemove.length;
- toRemove = $scope.selectedDefOptionalClientScopes.length;
-
- for (var i = 0; i < $scope.selectedDefOptionalClientScopes.length; i++) {
- var currentScope = $scope.selectedDefOptionalClientScopes[i];
+ for (var i = 0; i < $scope.selectedDefOptionalClientScopesToRemove.length; i++) {
+ var currentScope = $scope.selectedDefOptionalClientScopesToRemove[i];
RealmOptionalClientScopes.remove({
realm : realm.realm,
@@ -2617,6 +2628,7 @@ module.controller('ClientScopesRealmDefaultCtrl', function($scope, realm, Realm,
}
});
}
+ $scope.selectedDefOptionalClientScopesToRemove = [];
};
});
@@ -3015,41 +3027,45 @@ module.controller('ClientScopeScopeMappingCtrl', function($scope, $http, realm,
};
$scope.addRealmRole = function() {
- var roles = $scope.selectedRealmRoles;
+ $scope.selectedRealmRolesToAdd = JSON.parse('[' + $scope.selectedRealmRoles + ']');
$scope.selectedRealmRoles = [];
$http.post(authUrl + '/admin/realms/' + realm.realm + '/client-scopes/' + clientScope.id + '/scope-mappings/realm',
- roles).then(function() {
+ $scope.selectedRealmRolesToAdd).then(function() {
updateScopeRealmRoles();
+ $scope.selectedRealmRolesToAdd = [];
Notifications.success("Scope mappings updated.");
});
};
$scope.deleteRealmRole = function() {
- var roles = $scope.selectedRealmMappings;
+ $scope.selectedRealmMappingsToRemove = JSON.parse('[' + $scope.selectedRealmMappings + ']');
$scope.selectedRealmMappings = [];
$http.delete(authUrl + '/admin/realms/' + realm.realm + '/client-scopes/' + clientScope.id + '/scope-mappings/realm',
- {data : roles, headers : {"content-type" : "application/json"}}).then(function () {
+ {data : $scope.selectedRealmMappingsToRemove, headers : {"content-type" : "application/json"}}).then(function () {
updateScopeRealmRoles();
+ $scope.selectedRealmMappingsToRemove = [];
Notifications.success("Scope mappings updated.");
});
};
$scope.addClientRole = function() {
- var roles = $scope.selectedClientRoles;
+ $scope.selectedClientRolesToAdd = JSON.parse('[' + $scope.selectedClientRoles + ']');
$scope.selectedClientRoles = [];
$http.post(authUrl + '/admin/realms/' + realm.realm + '/client-scopes/' + clientScope.id + '/scope-mappings/clients/' + $scope.targetClient.id,
- roles).then(function () {
+ $scope.selectedClientRolesToAdd).then(function () {
updateScopeClientRoles();
+ $scope.selectedClientRolesToAdd = [];
Notifications.success("Scope mappings updated.");
});
};
$scope.deleteClientRole = function() {
- var roles = $scope.selectedClientMappings;
+ $scope.selectedClientMappingsToRemove = JSON.parse('[' + $scope.selectedClientMappings + ']');
$scope.selectedClientMappings = [];
$http.delete(authUrl + '/admin/realms/' + realm.realm + '/client-scopes/' + clientScope.id + '/scope-mappings/clients/' + $scope.targetClient.id,
- {data : roles, headers : {"content-type" : "application/json"}}).then(function () {
+ {data : $scope.selectedClientMappingsToRemove, headers : {"content-type" : "application/json"}}).then(function () {
updateScopeClientRoles();
+ $scope.selectedClientMappingsToRemove = [];
Notifications.success("Scope mappings updated.");
});
};
diff --git a/themes/src/main/resources/theme/base/admin/resources/js/controllers/groups.js b/themes/src/main/resources/theme/base/admin/resources/js/controllers/groups.js
index 4114ae5..7547bbb 100755
--- a/themes/src/main/resources/theme/base/admin/resources/js/controllers/groups.js
+++ b/themes/src/main/resources/theme/base/admin/resources/js/controllers/groups.js
@@ -313,10 +313,10 @@ module.controller('GroupRoleMappingCtrl', function($scope, $http, realm, group,
$scope.realmComposite = GroupCompositeRealmRoleMapping.query({realm : realm.realm, groupId : group.id});
$scope.addRealmRole = function() {
- var roles = $scope.selectedRealmRoles;
+ $scope.selectedRealmRolesToAdd = JSON.parse('[' + $scope.selectedRealmRoles + ']');
$scope.selectedRealmRoles = [];
$http.post(authUrl + '/admin/realms/' + realm.realm + '/groups/' + group.id + '/role-mappings/realm',
- roles).then(function() {
+ $scope.selectedRealmRolesToAdd).then(function() {
$scope.realmMappings = GroupRealmRoleMapping.query({realm : realm.realm, groupId : group.id});
$scope.realmRoles = GroupAvailableRealmRoleMapping.query({realm : realm.realm, groupId : group.id});
$scope.realmComposite = GroupCompositeRealmRoleMapping.query({realm : realm.realm, groupId : group.id});
@@ -330,14 +330,16 @@ module.controller('GroupRoleMappingCtrl', function($scope, $http, realm, group,
$scope.selectedClientRoles = [];
$scope.selectedClientMappings = [];
}
+ $scope.selectedRealmRolesToAdd = [];
Notifications.success("Role mappings updated.");
});
};
$scope.deleteRealmRole = function() {
+ $scope.selectedRealmMappingsToRemove = JSON.parse('[' + $scope.selectedRealmMappings + ']');
$http.delete(authUrl + '/admin/realms/' + realm.realm + '/groups/' + group.id + '/role-mappings/realm',
- {data : $scope.selectedRealmMappings, headers : {"content-type" : "application/json"}}).then(function() {
+ {data : $scope.selectedRealmMappingsToRemove, headers : {"content-type" : "application/json"}}).then(function() {
$scope.realmMappings = GroupRealmRoleMapping.query({realm : realm.realm, groupId : group.id});
$scope.realmRoles = GroupAvailableRealmRoleMapping.query({realm : realm.realm, groupId : group.id});
$scope.realmComposite = GroupCompositeRealmRoleMapping.query({realm : realm.realm, groupId : group.id});
@@ -351,13 +353,15 @@ module.controller('GroupRoleMappingCtrl', function($scope, $http, realm, group,
$scope.selectedClientRoles = [];
$scope.selectedClientMappings = [];
}
+ $scope.selectedRealmMappingsToRemove = [];
Notifications.success("Role mappings updated.");
});
};
$scope.addClientRole = function() {
+ $scope.selectedClientRolesToAdd = JSON.parse('[' + $scope.selectedClientRoles + ']');
$http.post(authUrl + '/admin/realms/' + realm.realm + '/groups/' + group.id + '/role-mappings/clients/' + $scope.targetClient.id,
- $scope.selectedClientRoles).then(function() {
+ $scope.selectedClientRolesToAdd).then(function() {
$scope.clientMappings = GroupClientRoleMapping.query({realm : realm.realm, groupId : group.id, client : $scope.targetClient.id});
$scope.clientRoles = GroupAvailableClientRoleMapping.query({realm : realm.realm, groupId : group.id, client : $scope.targetClient.id});
$scope.clientComposite = GroupCompositeClientRoleMapping.query({realm : realm.realm, groupId : group.id, client : $scope.targetClient.id});
@@ -365,13 +369,15 @@ module.controller('GroupRoleMappingCtrl', function($scope, $http, realm, group,
$scope.selectedClientMappings = [];
$scope.realmComposite = GroupCompositeRealmRoleMapping.query({realm : realm.realm, groupId : group.id});
$scope.realmRoles = GroupAvailableRealmRoleMapping.query({realm : realm.realm, groupId : group.id});
+ $scope.selectedClientRolesToAdd = [];
Notifications.success("Role mappings updated.");
});
};
$scope.deleteClientRole = function() {
+ $scope.selectedClientMappingsToRemove = JSON.parse('[' + $scope.selectedClientMappings + ']');
$http.delete(authUrl + '/admin/realms/' + realm.realm + '/groups/' + group.id + '/role-mappings/clients/' + $scope.targetClient.id,
- {data : $scope.selectedClientMappings, headers : {"content-type" : "application/json"}}).then(function() {
+ {data : $scope.selectedClientMappingsToRemove, headers : {"content-type" : "application/json"}}).then(function() {
$scope.clientMappings = GroupClientRoleMapping.query({realm : realm.realm, groupId : group.id, client : $scope.targetClient.id});
$scope.clientRoles = GroupAvailableClientRoleMapping.query({realm : realm.realm, groupId : group.id, client : $scope.targetClient.id});
$scope.clientComposite = GroupCompositeClientRoleMapping.query({realm : realm.realm, groupId : group.id, client : $scope.targetClient.id});
@@ -379,6 +385,7 @@ module.controller('GroupRoleMappingCtrl', function($scope, $http, realm, group,
$scope.selectedClientMappings = [];
$scope.realmComposite = GroupCompositeRealmRoleMapping.query({realm : realm.realm, groupId : group.id});
$scope.realmRoles = GroupAvailableRealmRoleMapping.query({realm : realm.realm, groupId : group.id});
+ $scope.selectedClientMappingsToRemove = [];
Notifications.success("Role mappings updated.");
});
};
diff --git a/themes/src/main/resources/theme/base/admin/resources/js/controllers/realm.js b/themes/src/main/resources/theme/base/admin/resources/js/controllers/realm.js
index 936a7c1..029d849 100644
--- a/themes/src/main/resources/theme/base/admin/resources/js/controllers/realm.js
+++ b/themes/src/main/resources/theme/base/admin/resources/js/controllers/realm.js
@@ -1461,7 +1461,7 @@ module.controller('RoleListCtrl', function($scope, $route, Dialog, Notifications
module.controller('RoleDetailCtrl', function($scope, realm, role, roles, clients,
Role, ClientRole, RoleById, RoleRealmComposites, RoleClientComposites,
- $http, $location, Dialog, Notifications, RealmRoleRemover) {
+ $http, $location, Dialog, Notifications, RealmRoleRemover, ComponentUtils) {
$scope.realm = realm;
$scope.role = angular.copy(role);
$scope.create = !role.name;
@@ -1530,7 +1530,7 @@ module.controller('RoleDetailCtrl', function($scope, realm, role, roles, clients
roleControl($scope, realm, role, roles, clients,
ClientRole, RoleById, RoleRealmComposites, RoleClientComposites,
- $http, $location, Notifications, Dialog);
+ $http, $location, Notifications, Dialog, ComponentUtils);
});
module.controller('RealmSMTPSettingsCtrl', function($scope, Current, Realm, realm, $http, $location, Dialog, Notifications, RealmSMTPConnectionTester) {
diff --git a/themes/src/main/resources/theme/base/admin/resources/js/controllers/users.js b/themes/src/main/resources/theme/base/admin/resources/js/controllers/users.js
index dec8f34..ea95366 100755
--- a/themes/src/main/resources/theme/base/admin/resources/js/controllers/users.js
+++ b/themes/src/main/resources/theme/base/admin/resources/js/controllers/users.js
@@ -20,10 +20,10 @@ module.controller('UserRoleMappingCtrl', function($scope, $http, realm, user, cl
$scope.realmComposite = CompositeRealmRoleMapping.query({realm : realm.realm, userId : user.id});
$scope.addRealmRole = function() {
- var roles = $scope.selectedRealmRoles;
+ $scope.realmRolesToAdd = JSON.parse('[' + $scope.selectedRealmRoles + ']');
$scope.selectedRealmRoles = [];
$http.post(authUrl + '/admin/realms/' + realm.realm + '/users/' + user.id + '/role-mappings/realm',
- roles).then(function() {
+ $scope.realmRolesToAdd).then(function() {
$scope.realmMappings = RealmRoleMapping.query({realm : realm.realm, userId : user.id});
$scope.realmRoles = AvailableRealmRoleMapping.query({realm : realm.realm, userId : user.id});
$scope.realmComposite = CompositeRealmRoleMapping.query({realm : realm.realm, userId : user.id});
@@ -43,8 +43,9 @@ module.controller('UserRoleMappingCtrl', function($scope, $http, realm, user, cl
};
$scope.deleteRealmRole = function() {
+ $scope.realmRolesToRemove = JSON.parse('[' + $scope.selectedRealmMappings + ']');
$http.delete(authUrl + '/admin/realms/' + realm.realm + '/users/' + user.id + '/role-mappings/realm',
- {data : $scope.selectedRealmMappings, headers : {"content-type" : "application/json"}}).then(function() {
+ {data : $scope.realmRolesToRemove, headers : {"content-type" : "application/json"}}).then(function() {
$scope.realmMappings = RealmRoleMapping.query({realm : realm.realm, userId : user.id});
$scope.realmRoles = AvailableRealmRoleMapping.query({realm : realm.realm, userId : user.id});
$scope.realmComposite = CompositeRealmRoleMapping.query({realm : realm.realm, userId : user.id});
@@ -63,8 +64,9 @@ module.controller('UserRoleMappingCtrl', function($scope, $http, realm, user, cl
};
$scope.addClientRole = function() {
+ $scope.clientRolesToAdd = JSON.parse('[' + $scope.selectedClientRoles + ']');
$http.post(authUrl + '/admin/realms/' + realm.realm + '/users/' + user.id + '/role-mappings/clients/' + $scope.targetClient.id,
- $scope.selectedClientRoles).then(function() {
+ $scope.clientRolesToAdd).then(function() {
$scope.clientMappings = ClientRoleMapping.query({realm : realm.realm, userId : user.id, client : $scope.targetClient.id});
$scope.clientRoles = AvailableClientRoleMapping.query({realm : realm.realm, userId : user.id, client : $scope.targetClient.id});
$scope.clientComposite = CompositeClientRoleMapping.query({realm : realm.realm, userId : user.id, client : $scope.targetClient.id});
@@ -77,8 +79,9 @@ module.controller('UserRoleMappingCtrl', function($scope, $http, realm, user, cl
};
$scope.deleteClientRole = function() {
+ $scope.clientRolesToRemove = JSON.parse('[' + $scope.selectedClientMappings + ']');
$http.delete(authUrl + '/admin/realms/' + realm.realm + '/users/' + user.id + '/role-mappings/clients/' + $scope.targetClient.id,
- {data : $scope.selectedClientMappings, headers : {"content-type" : "application/json"}}).then(function() {
+ {data : $scope.clientRolesToRemove, headers : {"content-type" : "application/json"}}).then(function() {
$scope.clientMappings = ClientRoleMapping.query({realm : realm.realm, userId : user.id, client : $scope.targetClient.id});
$scope.clientRoles = AvailableClientRoleMapping.query({realm : realm.realm, userId : user.id, client : $scope.targetClient.id});
$scope.clientComposite = CompositeClientRoleMapping.query({realm : realm.realm, userId : user.id, client : $scope.targetClient.id});
diff --git a/themes/src/main/resources/theme/base/admin/resources/js/services.js b/themes/src/main/resources/theme/base/admin/resources/js/services.js
index 3598a27..a2751fe 100755
--- a/themes/src/main/resources/theme/base/admin/resources/js/services.js
+++ b/themes/src/main/resources/theme/base/admin/resources/js/services.js
@@ -196,6 +196,13 @@ module.factory('ComponentUtils', function() {
var utils = {};
+ utils.findIndexById = function(array, id) {
+ for (var i = 0; i < array.length; i++) {
+ if (array[i].id === id) return i;
+ }
+ return -1;
+ }
+
utils.addLastEmptyValueToMultivaluedLists = function(properties, config) {
if (!properties) {
return;
@@ -761,7 +768,7 @@ module.factory('RoleClientComposites', function($resource) {
function roleControl($scope, realm, role, roles, clients,
ClientRole, RoleById, RoleRealmComposites, RoleClientComposites,
- $http, $location, Notifications, Dialog) {
+ $http, $location, Notifications, Dialog, ComponentUtils) {
$scope.$watch(function () {
return $location.path();
@@ -833,68 +840,76 @@ function roleControl($scope, realm, role, roles, clients,
$scope.addRealmRole = function() {
$scope.compositeSwitchDisabled=true;
+ $scope.selectedRealmRolesToAdd = JSON.parse('[' + $scope.selectedRealmRoles + ']');
$http.post(authUrl + '/admin/realms/' + realm.realm + '/roles-by-id/' + role.id + '/composites',
- $scope.selectedRealmRoles).then(function() {
- for (var i = 0; i < $scope.selectedRealmRoles.length; i++) {
- var role = $scope.selectedRealmRoles[i];
- var idx = $scope.realmRoles.indexOf($scope.selectedRealmRoles[i]);
+ $scope.selectedRealmRolesToAdd).then(function() {
+ for (var i = 0; i < $scope.selectedRealmRolesToAdd.length; i++) {
+ var role = $scope.selectedRealmRolesToAdd[i];
+ var idx = ComponentUtils.findIndexById($scope.realmRoles, role.id);
if (idx != -1) {
$scope.realmRoles.splice(idx, 1);
$scope.realmMappings.push(role);
}
}
$scope.selectedRealmRoles = [];
+ $scope.selectedRealmRolesToAdd = [];
Notifications.success("Role added to composite.");
});
};
-
+
$scope.deleteRealmRole = function() {
$scope.compositeSwitchDisabled=true;
+ $scope.selectedRealmMappingsToRemove = JSON.parse('[' + $scope.selectedRealmMappings + ']');
$http.delete(authUrl + '/admin/realms/' + realm.realm + '/roles-by-id/' + role.id + '/composites',
- {data : $scope.selectedRealmMappings, headers : {"content-type" : "application/json"}}).then(function() {
- for (var i = 0; i < $scope.selectedRealmMappings.length; i++) {
- var role = $scope.selectedRealmMappings[i];
- var idx = $scope.realmMappings.indexOf($scope.selectedRealmMappings[i]);
+ {data : $scope.selectedRealmMappingsToRemove, headers : {"content-type" : "application/json"}}).then(function() {
+ for (var i = 0; i < $scope.selectedRealmMappingsToRemove.length; i++) {
+ var role = $scope.selectedRealmMappingsToRemove[i];
+ var idx = ComponentUtils.findIndexById($scope.realmMappings, role.id);
if (idx != -1) {
$scope.realmMappings.splice(idx, 1);
$scope.realmRoles.push(role);
}
}
$scope.selectedRealmMappings = [];
+ $scope.selectedRealmMappingsToRemove = [];
Notifications.success("Role removed from composite.");
});
};
$scope.addClientRole = function() {
$scope.compositeSwitchDisabled=true;
+ $scope.selectedClientRolesToAdd = JSON.parse('[' + $scope.selectedClientRoles + ']');
$http.post(authUrl + '/admin/realms/' + realm.realm + '/roles-by-id/' + role.id + '/composites',
- $scope.selectedClientRoles).then(function() {
- for (var i = 0; i < $scope.selectedClientRoles.length; i++) {
- var role = $scope.selectedClientRoles[i];
- var idx = $scope.clientRoles.indexOf($scope.selectedClientRoles[i]);
+ $scope.selectedClientRolesToAdd).then(function() {
+ for (var i = 0; i < $scope.selectedClientRolesToAdd.length; i++) {
+ var role = $scope.selectedClientRolesToAdd[i];
+ var idx = ComponentUtils.findIndexById($scope.clientRoles, role.id);
if (idx != -1) {
$scope.clientRoles.splice(idx, 1);
$scope.clientMappings.push(role);
}
}
$scope.selectedClientRoles = [];
+ $scope.selectedClientRolesToAdd = [];
Notifications.success("Client role added.");
});
};
$scope.deleteClientRole = function() {
$scope.compositeSwitchDisabled=true;
+ $scope.selectedClientMappingsToRemove = JSON.parse('[' + $scope.selectedClientMappings + ']');
$http.delete(authUrl + '/admin/realms/' + realm.realm + '/roles-by-id/' + role.id + '/composites',
- {data : $scope.selectedClientMappings, headers : {"content-type" : "application/json"}}).then(function() {
- for (var i = 0; i < $scope.selectedClientMappings.length; i++) {
- var role = $scope.selectedClientMappings[i];
- var idx = $scope.clientMappings.indexOf($scope.selectedClientMappings[i]);
+ {data : $scope.selectedClientMappingsToRemove, headers : {"content-type" : "application/json"}}).then(function() {
+ for (var i = 0; i < $scope.selectedClientMappingsToRemove.length; i++) {
+ var role = $scope.selectedClientMappingsToRemove[i];
+ var idx = ComponentUtils.findIndexById($scope.clientMappings, role.id);
if (idx != -1) {
$scope.clientMappings.splice(idx, 1);
$scope.clientRoles.push(role);
}
}
$scope.selectedClientMappings = [];
+ $scope.selectedClientMappingsToRemove = [];
Notifications.success("Client role removed.");
});
};
diff --git a/themes/src/main/resources/theme/base/admin/resources/partials/client-role-detail.html b/themes/src/main/resources/theme/base/admin/resources/partials/client-role-detail.html
index f17872e..9b6fd7d 100755
--- a/themes/src/main/resources/theme/base/admin/resources/partials/client-role-detail.html
+++ b/themes/src/main/resources/theme/base/admin/resources/partials/client-role-detail.html
@@ -63,10 +63,12 @@
<div class="col-md-4">
<label class="control-label" for="available">{{:: 'available-roles' | translate}}</label>
<kc-tooltip>{{:: 'composite.available-realm-roles.tooltip' | translate}}</kc-tooltip>
- <select id="available" class="form-control" multiple size="5"
+ <select id="available" class="form-control overflow-select" multiple size="5"
ng-multiple="true"
- ng-model="selectedRealmRoles"
- ng-options="r.name for r in realmRoles | orderBy:'name'">
+ ng-model="selectedRealmRoles">
+ <option ng-repeat="r in realmRoles | orderBy:'name'" value="{{r}}" title="{{r.name}}">
+ {{r.name}}
+ </option>
</select>
<button ng-disabled="selectedRealmRoles.length == 0" class="btn btn-default" type="submit" ng-click="addRealmRole()">
{{:: 'add-selected' | translate}} <i class="fa fa-angle-double-right"></i>
@@ -75,10 +77,12 @@
<div class="col-md-4">
<label class="control-label" for="assigned">{{:: 'associated-roles' | translate}}</label>
<kc-tooltip>{{:: 'composite.associated-realm-roles.tooltip' | translate}}</kc-tooltip>
- <select id="assigned" class="form-control" multiple size=5
+ <select id="assigned" class="form-control overflow-select" multiple size=5
ng-multiple="true"
- ng-model="selectedRealmMappings"
- ng-options="r.name for r in realmMappings | orderBy:'name'">
+ ng-model="selectedRealmMappings">
+ <option ng-repeat="r in realmMappings | orderBy:'name'" value="{{r}}" title="{{r.name}}">
+ {{r.name}}
+ </option>
</select>
<button ng-disabled="selectedRealmMappings.length == 0" class="btn btn-default" type="submit" ng-click="deleteRealmRole()">
<i class="fa fa-angle-double-left"></i> {{:: 'remove-selected' | translate}}
@@ -102,10 +106,12 @@
<div class="col-md-4">
<label class="control-label" for="available-client">{{:: 'available-roles' | translate}}</label>
<kc-tooltip>{{:: 'available-roles.tooltip' | translate}}</kc-tooltip>
- <select id="available-client" class="form-control" multiple size="5"
+ <select id="available-client" class="form-control overflow-select" multiple size="5"
ng-multiple="true"
- ng-model="selectedClientRoles"
- ng-options="r.name for r in clientRoles | orderBy:'name'">
+ ng-model="selectedClientRoles">
+ <option ng-repeat="r in clientRoles | orderBy:'name'" value="{{r}}" title="{{r.name}}">
+ {{r.name}}
+ </option>
</select>
<button ng-disabled="selectedClientRoles.length == 0" class="btn btn-default" type="submit" ng-click="addClientRole()">
{{:: 'add-selected' | translate}} <i class="fa fa-angle-double-right"></i>
@@ -114,10 +120,12 @@
<div class="col-md-4">
<label class="control-label" for="assigned-client">{{:: 'associated-roles' | translate}}</label>
<kc-tooltip>{{:: 'client.associated-roles.tooltip' | translate}}</kc-tooltip>
- <select id="assigned-client" class="form-control" multiple size=5
+ <select id="assigned-client" class="form-control overflow-select" multiple size=5
ng-multiple="true"
- ng-model="selectedClientMappings"
- ng-options="r.name for r in clientMappings | orderBy:'name'">
+ ng-model="selectedClientMappings">
+ <option ng-repeat="r in clientMappings | orderBy:'name'" value="{{r}}" title="{{r.name}}">
+ {{r.name}}
+ </option>
</select>
<button ng-disabled="selectedClientMappings.length == 0" class="btn btn-default" type="submit" ng-click="deleteClientRole()">
<i class="fa fa-angle-double-left"></i> {{:: 'remove-selected' | translate}}
diff --git a/themes/src/main/resources/theme/base/admin/resources/partials/client-scope-mappings.html b/themes/src/main/resources/theme/base/admin/resources/partials/client-scope-mappings.html
index 4ba8f38..bde92a1 100755
--- a/themes/src/main/resources/theme/base/admin/resources/partials/client-scope-mappings.html
+++ b/themes/src/main/resources/theme/base/admin/resources/partials/client-scope-mappings.html
@@ -30,10 +30,12 @@
<label class="control-label" for="available">{{:: 'available-roles' | translate}}</label>
<kc-tooltip>{{:: 'scope.available-roles.tooltip' | translate}}</kc-tooltip>
- <select id="available" class="form-control" multiple size="5"
+ <select id="available" class="form-control overflow-select" multiple size="5"
ng-multiple="true"
- ng-model="selectedRealmRoles"
- ng-options="r.name for r in realmRoles | orderBy:'name'">
+ ng-model="selectedRealmRoles">
+ <option ng-repeat="r in realmRoles | orderBy:'name'" value="{{r}}" title="{{r.name}}">
+ {{r.name}}
+ </option>
</select>
<button ng-disabled="selectedRealmRoles.length == 0" class="btn btn-default" type="submit" ng-click="addRealmRole()">
{{:: 'add-selected' | translate}} <i class="fa fa-angle-double-right"></i>
@@ -42,10 +44,12 @@
<div class="col-md-3">
<label class="control-label" for="assigned">{{:: 'assigned-roles' | translate}}</label>
<kc-tooltip>{{:: 'assigned-roles.tooltip' | translate}}</kc-tooltip>
- <select id="assigned" class="form-control" multiple size=5
+ <select id="assigned" class="form-control overflow-select" multiple size=5
ng-multiple="true"
- ng-model="selectedRealmMappings"
- ng-options="r.name for r in realmMappings | orderBy:'name'">
+ ng-model="selectedRealmMappings">
+ <option ng-repeat="r in realmMappings | orderBy:'name'" value="{{r}}" title="{{r.name}}">
+ {{r.name}}
+ </option>
</select>
<button ng-disabled="selectedRealmMappings.length == 0" class="btn btn-default" type="submit" ng-click="deleteRealmRole()">
<i class="fa fa-angle-double-left"></i> {{:: 'remove-selected' | translate}}
@@ -54,10 +58,12 @@
<div class="col-md-3">
<label class="control-label" for="realm-composite">{{:: 'effective-roles' | translate}} </label>
<kc-tooltip>{{:: 'realm.effective-roles.tooltip' | translate}}</kc-tooltip>
- <select id="realm-composite" class="form-control" multiple size=5
+ <select id="realm-composite" class="form-control overflow-select" multiple size=5
disabled="true"
- ng-model="dummymodel"
- ng-options="r.name for r in realmComposite | orderBy:'name'">
+ ng-model="dummymodel">
+ <option ng-repeat="r in realmComposite | orderBy:'name'" value="{{r}}" title="{{r.name}}">
+ {{r.name}}
+ </option>
</select>
</div>
</div>
@@ -78,10 +84,12 @@
<div class="col-md-3">
<label class="control-label" for="available-client">{{:: 'available-roles' | translate}}</label>
<kc-tooltip>{{:: 'assign.available-roles.tooltip' | translate}}</kc-tooltip>
- <select id="available-client" class="form-control" multiple size="5"
+ <select id="available-client" class="form-control overflow-select" multiple size="5"
ng-multiple="true"
- ng-model="selectedClientRoles"
- ng-options="r.name for r in clientRoles | orderBy:'name'">
+ ng-model="selectedClientRoles">
+ <option ng-repeat="r in clientRoles | orderBy:'name'" value="{{r}}" title="{{r.name}}">
+ {{r.name}}
+ </option>
</select>
<button ng-disabled="selectedClientRoles.length == 0" class="btn btn-default" type="submit" ng-click="addClientRole()">
{{:: 'add-selected' | translate}} <i class="fa fa-angle-double-right"></i>
@@ -90,10 +98,12 @@
<div class="col-md-3">
<label class="control-label" for="assigned-client">{{:: 'assigned-roles' | translate}}</label>
<kc-tooltip>{{:: 'client.assigned-roles.tooltip' | translate}}</kc-tooltip>
- <select id="assigned-client" class="form-control" multiple size=5
+ <select id="assigned-client" class="form-control overflow-select" multiple size=5
ng-multiple="true"
- ng-model="selectedClientMappings"
- ng-options="r.name for r in clientMappings | orderBy:'name'">
+ ng-model="selectedClientMappings">
+ <option ng-repeat="r in clientMappings | orderBy:'name'" value="{{r}}" title="{{r.name}}">
+ {{r.name}}
+ </option>
</select>
<button ng-disabled="selectedClientMappings.length == 0" class="btn btn-default" type="submit" ng-click="deleteClientRole()">
<i class="fa fa-angle-double-left"></i> {{:: 'remove-selected' | translate}}
@@ -102,10 +112,12 @@
<div class="col-md-3">
<label class="control-label" for="client-composite">{{:: 'effective-roles' | translate}}</label>
<kc-tooltip>{{:: 'client.effective-roles.tooltip' | translate}}</kc-tooltip>
- <select id="client-composite" class="form-control" multiple size=5
+ <select id="client-composite" class="form-control overflow-select" multiple size=5
disabled="true"
- ng-model="dummymodel"
- ng-options="r.name for r in clientComposite | orderBy:'name'">
+ ng-model="dummymodel">
+ <option ng-repeat="r in clientComposite | orderBy:'name'" value="{{r}}" title="{{r.name}}">
+ {{r.name}}
+ </option>
</select>
</div>
</div>
diff --git a/themes/src/main/resources/theme/base/admin/resources/partials/client-scope-scope-mappings.html b/themes/src/main/resources/theme/base/admin/resources/partials/client-scope-scope-mappings.html
index ba2ac7f..2a52ac0 100755
--- a/themes/src/main/resources/theme/base/admin/resources/partials/client-scope-scope-mappings.html
+++ b/themes/src/main/resources/theme/base/admin/resources/partials/client-scope-scope-mappings.html
@@ -19,10 +19,12 @@
<label class="control-label" for="available">{{:: 'available-roles' | translate}}</label>
<kc-tooltip>{{:: 'scope.available-roles.tooltip' | translate}}</kc-tooltip>
- <select id="available" class="form-control" multiple size="5"
+ <select id="available" class="form-control overflow-select" multiple size="5"
ng-multiple="true"
- ng-model="selectedRealmRoles"
- ng-options="r.name for r in realmRoles | orderBy:'name'">
+ ng-model="selectedRealmRoles">
+ <option ng-repeat="r in realmRoles | orderBy:'name'" value="{{r}}" title="{{r.name}}">
+ {{r.name}}
+ </option>
</select>
<button ng-disabled="selectedRealmRoles.length == 0" class="btn btn-default" type="submit" ng-click="addRealmRole()">
{{:: 'add-selected' | translate}} <i class="fa fa-angle-double-right"></i>
@@ -31,10 +33,12 @@
<div class="col-md-3">
<label class="control-label" for="assigned">{{:: 'assigned-roles' | translate}}</label>
<kc-tooltip>{{:: 'assigned-roles.tooltip' | translate}}</kc-tooltip>
- <select id="assigned" class="form-control" multiple size=5
+ <select id="assigned" class="form-control overflow-select" multiple size=5
ng-multiple="true"
- ng-model="selectedRealmMappings"
- ng-options="r.name for r in realmMappings | orderBy:'name'">
+ ng-model="selectedRealmMappings">
+ <option ng-repeat="r in realmMappings | orderBy:'name'" value="{{r}}" title="{{r.name}}">
+ {{r.name}}
+ </option>
</select>
<button ng-disabled="selectedRealmMappings.length == 0" class="btn btn-default" type="submit" ng-click="deleteRealmRole()">
<i class="fa fa-angle-double-left"></i> {{:: 'remove-selected' | translate}}
@@ -43,10 +47,12 @@
<div class="col-md-3">
<label class="control-label" for="realm-composite">{{:: 'effective-roles' | translate}} </label>
<kc-tooltip>{{:: 'realm.effective-roles.tooltip' | translate}}</kc-tooltip>
- <select id="realm-composite" class="form-control" multiple size=5
+ <select id="realm-composite" class="form-control overflow-select" multiple size=5
disabled="true"
- ng-model="dummymodel"
- ng-options="r.name for r in realmComposite | orderBy:'name'">
+ ng-model="dummymodel">
+ <option ng-repeat="r in realmComposite | orderBy:'name'" value="{{r}}" title="{{r.name}}">
+ {{r.name}}
+ </option>
</select>
</div>
</div>
@@ -67,10 +73,12 @@
<div class="col-md-3">
<label class="control-label" for="available-client">{{:: 'available-roles' | translate}}</label>
<kc-tooltip>{{:: 'assign.available-roles.tooltip' | translate}}</kc-tooltip>
- <select id="available-client" class="form-control" multiple size="5"
+ <select id="available-client" class="form-control overflow-select" multiple size="5"
ng-multiple="true"
- ng-model="selectedClientRoles"
- ng-options="r.name for r in clientRoles | orderBy:'name'">
+ ng-model="selectedClientRoles">
+ <option ng-repeat="r in clientRoles | orderBy:'name'" value="{{r}}" title="{{r.name}}">
+ {{r.name}}
+ </option>
</select>
<button ng-disabled="selectedClientRoles.length == 0" class="btn btn-default" type="submit" ng-click="addClientRole()">
{{:: 'add-selected' | translate}} <i class="fa fa-angle-double-right"></i>
@@ -79,10 +87,12 @@
<div class="col-md-3">
<label class="control-label" for="assigned-client">{{:: 'assigned-roles' | translate}}</label>
<kc-tooltip>{{:: 'client.assigned-roles.tooltip' | translate}}</kc-tooltip>
- <select id="assigned-client" class="form-control" multiple size=5
+ <select id="assigned-client" class="form-control overflow-select" multiple size=5
ng-multiple="true"
- ng-model="selectedClientMappings"
- ng-options="r.name for r in clientMappings | orderBy:'name'">
+ ng-model="selectedClientMappings">
+ <option ng-repeat="r in clientMappings | orderBy:'name'" value="{{r}}" title="{{r.name}}">
+ {{r.name}}
+ </option>
</select>
<button ng-disabled="selectedClientMappings.length == 0" class="btn btn-default" type="submit" ng-click="deleteClientRole()">
<i class="fa fa-angle-double-left"></i> {{:: 'remove-selected' | translate}}
@@ -91,10 +101,12 @@
<div class="col-md-3">
<label class="control-label" for="client-composite">{{:: 'effective-roles' | translate}}</label>
<kc-tooltip>{{:: 'client.effective-roles.tooltip' | translate}}</kc-tooltip>
- <select id="client-composite" class="form-control" multiple size=5
+ <select id="client-composite" class="form-control overflow-select" multiple size=5
disabled="true"
- ng-model="dummymodel"
- ng-options="r.name for r in clientComposite | orderBy:'name'">
+ ng-model="dummymodel">
+ <option ng-repeat="r in clientComposite | orderBy:'name'" value="{{r}}" title="{{r.name}}">
+ {{r.name}}
+ </option>
</select>
</div>
</div>
diff --git a/themes/src/main/resources/theme/base/admin/resources/partials/client-scopes-evaluate.html b/themes/src/main/resources/theme/base/admin/resources/partials/client-scopes-evaluate.html
index 8b221b8..fab5d52 100644
--- a/themes/src/main/resources/theme/base/admin/resources/partials/client-scopes-evaluate.html
+++ b/themes/src/main/resources/theme/base/admin/resources/partials/client-scopes-evaluate.html
@@ -55,10 +55,13 @@
<div class="col-md-4">
<label class="control-label" for="available">{{:: 'client-scopes.evaluate.scopes.available' | translate}}</label>
<kc-tooltip>{{:: 'client-scopes.evaluate.scopes.available.tooltip' | translate}}</kc-tooltip>
- <select id="available" class="form-control" multiple size="5"
+ <select id="available" class="form-control overflow-select" multiple size="5"
ng-multiple="true"
- ng-model="selectedClientScopes"
- ng-options="r.name for r in availableClientScopes | orderBy:'toString()'">
+ ng-model="selectedClientScopes">
+ <option ng-repeat="r in availableClientScopes | orderBy:'name'"
+ value="{{r}}" title="{{r.name}}">
+ {{r.name}}
+ </option>
</select>
<button ng-disabled="selectedClientScopes.length == 0" class="btn btn-default" type="submit" ng-click="addAppliedClientScope()">
{{:: 'add-selected' | translate}} <i class="fa fa-angle-double-right"></i>
@@ -67,10 +70,13 @@
<div class="col-md-4">
<label class="control-label" for="assigned">{{:: 'client-scopes.evaluate.scopes.assigned' | translate}}</label>
<kc-tooltip>{{:: 'client-scopes.evaluate.scopes.assigned.tooltip' | translate}}</kc-tooltip>
- <select id="assigned" class="form-control" multiple size=5
+ <select id="assigned" class="form-control overflow-select" multiple size=5
ng-multiple="true"
- ng-model="selectedDefClientScopes"
- ng-options="r.name for r in assignedClientScopes | orderBy:'toString()'">
+ ng-model="selectedDefClientScopes">
+ <option ng-repeat="r in assignedClientScopes | orderBy:'name'"
+ value="{{r}}" title="{{r.name}}">
+ {{r.name}}
+ </option>
</select>
<button ng-disabled="selectedDefClientScopes.length == 0" class="btn btn-default" type="submit" ng-click="deleteAppliedClientScope()">
<i class="fa fa-angle-double-left"></i> {{:: 'remove-selected' | translate}}
@@ -79,10 +85,13 @@
<div class="col-md-4">
<label class="control-label" for="assigned">{{:: 'client-scopes.evaluate.scopes.effective' | translate}}</label>
<kc-tooltip>{{:: 'client-scopes.evaluate.scopes.effective.tooltip' | translate}}</kc-tooltip>
- <select id="effective" class="form-control" multiple size=5
+ <select id="effective" class="form-control overflow-select" multiple size=5
disabled="true"
- ng-model="dummymodel"
- ng-options="r.name for r in effectiveClientScopes | orderBy:'toString()'">
+ ng-model="dummymodel">
+ <option ng-repeat="r in effectiveClientScopes | orderBy:'name'"
+ value="{{r}}" title="{{r.name}}">
+ {{r.name}}
+ </option>
</select>
</div>
</div>
@@ -169,23 +178,29 @@
<label class="col-md-2 control-label" class="control-label">{{:: 'realm-roles' | translate}}</label>
<div class="col-md-10">
<div class="row">
- <div class="col-md-3">
+ <div class="col-md-4">
<label class="control-label" for="available-realm-roles">{{:: 'client-scopes.evaluate.not-granted-roles' | translate}}</label>
<kc-tooltip>{{:: 'client-scopes.evaluate.not-granted-roles.tooltip' | translate}}</kc-tooltip>
- <select id="available-realm-roles" class="form-control" multiple size="5"
+ <select id="available-realm-roles" class="form-control overflow-select" multiple size="5"
disabled="true"
- ng-model="dummymodel1"
- ng-options="r.name for r in notGrantedRealmRoles | orderBy:'name'">
+ ng-model="dummymodel1">
+ <option ng-repeat="r in notGrantedRealmRoles | orderBy:'name'"
+ value="{{r}}" title="{{r.name}}">
+ {{r.name}}
+ </option>
</select>
</div>
- <div class="col-md-3">
+ <div class="col-md-4">
<label class="control-label" for="realm-composite">{{:: 'client-scopes.evaluate.granted-realm-effective-roles' | translate}} </label>
<kc-tooltip>{{:: 'client-scopes.evaluate.granted-realm-effective-roles.tooltip' | translate}}</kc-tooltip>
- <select id="realm-composite" class="form-control" multiple size=5
+ <select id="realm-composite" class="form-control overflow-select" multiple size=5
disabled="true"
- ng-model="dummymodel2"
- ng-options="r.name for r in grantedRealmRoles | orderBy:'name'">
+ ng-model="dummymodel2">
+ <option ng-repeat="r in grantedRealmRoles | orderBy:'name'"
+ value="{{r}}" title="{{r.name}}">
+ {{r.name}}
+ </option>
</select>
</div>
</div>
@@ -203,22 +218,28 @@
<div class="col-md-4"><span class="text-muted">{{:: 'select-client-roles.tooltip' | translate}}</span></div>
</div>
<div class="row" data-ng-show="targetClient">
- <div class="col-md-3">
+ <div class="col-md-4">
<label class="control-label" for="available-client">{{:: 'client-scopes.evaluate.not-granted-roles' | translate}}</label>
<kc-tooltip>{{:: 'client-scopes.evaluate.not-granted-roles.tooltip' | translate}}</kc-tooltip>
- <select id="available-client" class="form-control" multiple size="5"
+ <select id="available-client" class="form-control overflow-select" multiple size="5"
disabled="true"
- ng-model="dummymodel"
- ng-options="r.name for r in notGrantedClientRoles | orderBy:'name'">
+ ng-model="dummymodel">
+ <option ng-repeat="r in notGrantedClientRoles | orderBy:'name'"
+ value="{{r}}" title="{{r.name}}">
+ {{r.name}}
+ </option>
</select>
</div>
- <div class="col-md-3">
+ <div class="col-md-4">
<label class="control-label" for="client-composite">{{:: 'client-scopes.evaluate.granted-client-effective-roles' | translate}}</label>
<kc-tooltip>{{:: 'client-scopes.evaluate.granted-realm-effective-roles.tooltip' | translate}}</kc-tooltip>
- <select id="client-composite" class="form-control" multiple size=5
+ <select id="client-composite" class="form-control overflow-select" multiple size=5
disabled="true"
- ng-model="dummymodel"
- ng-options="r.name for r in grantedClientRoles | orderBy:'name'">
+ ng-model="dummymodel">
+ <option ng-repeat="r in grantedClientRoles | orderBy:'name'"
+ value="{{r}}" title="{{r.name}}">
+ {{r.name}}
+ </option>
</select>
</div>
</div>
diff --git a/themes/src/main/resources/theme/base/admin/resources/partials/client-scopes-realm-default.html b/themes/src/main/resources/theme/base/admin/resources/partials/client-scopes-realm-default.html
index f03f704..e30570a 100644
--- a/themes/src/main/resources/theme/base/admin/resources/partials/client-scopes-realm-default.html
+++ b/themes/src/main/resources/theme/base/admin/resources/partials/client-scopes-realm-default.html
@@ -25,10 +25,12 @@
<div class="col-md-4">
<label class="control-label" for="available">{{:: 'default-client-scopes.default.available' | translate}}</label>
<kc-tooltip>{{:: 'default-client-scopes.default.available.tooltip' | translate}}</kc-tooltip>
- <select id="available" class="form-control" multiple size="5"
+ <select id="available" class="form-control overflow-select" multiple size="5"
ng-multiple="true"
- ng-model="selectedDefaultClientScopes"
- ng-options="r.name for r in availableClientScopes | orderBy:'toString()'">
+ ng-model="selectedDefaultClientScopes">
+ <option ng-repeat="r in availableClientScopes | orderBy:'name'" value="{{r}}" title="{{r.name}}">
+ {{r.name}}
+ </option>
</select>
<button ng-disabled="selectedDefaultClientScopes.length == 0" class="btn btn-default" type="submit" ng-click="addDefaultClientScope()">
{{:: 'add-selected' | translate}} <i class="fa fa-angle-double-right"></i>
@@ -37,10 +39,12 @@
<div class="col-md-4">
<label class="control-label" for="assigned">{{:: 'default-client-scopes.default.assigned' | translate}}</label>
<kc-tooltip>{{:: 'default-client-scopes.default.assigned.tooltip' | translate}}</kc-tooltip>
- <select id="assigned" class="form-control" multiple size=5
+ <select id="assigned" class="form-control overflow-select" multiple size=5
ng-multiple="true"
- ng-model="selectedDefDefaultClientScopes"
- ng-options="r.name for r in realmDefaultClientScopes | orderBy:'toString()'">
+ ng-model="selectedDefDefaultClientScopes">
+ <option ng-repeat="r in realmDefaultClientScopes | orderBy:'name'" value="{{r}}" title="{{r.name}}">
+ {{r.name}}
+ </option>
</select>
<button ng-disabled="selectedDefDefaultClientScopes.length == 0" class="btn btn-default" type="submit" ng-click="deleteDefaultClientScope()">
<i class="fa fa-angle-double-left"></i> {{:: 'remove-selected' | translate}}
@@ -59,10 +63,12 @@
<div class="col-md-4">
<label class="control-label" for="available-opt">{{:: 'default-client-scopes.optional.available' | translate}}</label>
<kc-tooltip>{{:: 'default-client-scopes.optional.available.tooltip' | translate}}</kc-tooltip>
- <select id="available-opt" class="form-control" multiple size="5"
+ <select id="available-opt" class="form-control overflow-select" multiple size="5"
ng-multiple="true"
- ng-model="selectedOptionalClientScopes"
- ng-options="r.name for r in availableClientScopes | orderBy:'toString()'">
+ ng-model="selectedOptionalClientScopes">
+ <option ng-repeat="r in availableClientScopes | orderBy:'name'" value="{{r}}" title="{{r.name}}">
+ {{r.name}}
+ </option>
</select>
<button ng-disabled="selectedOptionalClientScopes.length == 0" class="btn btn-default" type="submit" ng-click="addOptionalClientScope()">
{{:: 'add-selected' | translate}} <i class="fa fa-angle-double-right"></i>
@@ -71,10 +77,12 @@
<div class="col-md-4">
<label class="control-label" for="assigned-opt">{{:: 'default-client-scopes.optional.assigned' | translate}}</label>
<kc-tooltip>{{:: 'default-client-scopes.optional.assigned.tooltip' | translate}}</kc-tooltip>
- <select id="assigned-opt" class="form-control" multiple size=5
+ <select id="assigned-opt" class="form-control overflow-select" multiple size=5
ng-multiple="true"
- ng-model="selectedDefOptionalClientScopes"
- ng-options="r.name for r in realmOptionalClientScopes | orderBy:'toString()'">
+ ng-model="selectedDefOptionalClientScopes">
+ <option ng-repeat="r in realmOptionalClientScopes | orderBy:'name'" value="{{r}}" title="{{r.name}}">
+ {{r.name}}
+ </option>
</select>
<button ng-disabled="selectedDefOptionalClientScopes.length == 0" class="btn btn-default" type="submit" ng-click="deleteOptionalClientScope()">
<i class="fa fa-angle-double-left"></i> {{:: 'remove-selected' | translate}}
diff --git a/themes/src/main/resources/theme/base/admin/resources/partials/client-scopes-setup.html b/themes/src/main/resources/theme/base/admin/resources/partials/client-scopes-setup.html
index e5d4168..db39cf0 100644
--- a/themes/src/main/resources/theme/base/admin/resources/partials/client-scopes-setup.html
+++ b/themes/src/main/resources/theme/base/admin/resources/partials/client-scopes-setup.html
@@ -45,10 +45,13 @@
<div class="col-md-4">
<label class="control-label" for="available">{{:: 'client-scopes.default.available' | translate}}</label>
<kc-tooltip>{{:: 'client-scopes.default.available.tooltip' | translate}}</kc-tooltip>
- <select id="available" class="form-control" multiple size="5"
+ <select id="available" class="form-control overflow-select" multiple size="5"
ng-multiple="true"
- ng-model="selectedDefaultClientScopes"
- ng-options="r.name for r in availableClientScopes | orderBy:'toString()'">
+ ng-model="selectedDefaultClientScopes">
+ <option ng-repeat="r in availableClientScopes | orderBy:'name'"
+ value="{{r}}" title="{{r.name}}">
+ {{r.name}}
+ </option>
</select>
<button ng-disabled="selectedDefaultClientScopes.length == 0" class="btn btn-default" type="submit" ng-click="addDefaultClientScope()">
{{:: 'add-selected' | translate}} <i class="fa fa-angle-double-right"></i>
@@ -57,10 +60,13 @@
<div class="col-md-4">
<label class="control-label" for="assigned">{{:: 'client-scopes.default.assigned' | translate}}</label>
<kc-tooltip>{{:: 'client-scopes.default.assigned.tooltip' | translate}}</kc-tooltip>
- <select id="assigned" class="form-control" multiple size=5
+ <select id="assigned" class="form-control overflow-select" multiple size=5
ng-multiple="true"
- ng-model="selectedDefDefaultClientScopes"
- ng-options="r.name for r in clientDefaultClientScopes | orderBy:'toString()'">
+ ng-model="selectedDefDefaultClientScopes">
+ <option ng-repeat="r in clientDefaultClientScopes | orderBy:'name'"
+ value="{{r}}" title="{{r.name}}">
+ {{r.name}}
+ </option>
</select>
<button ng-disabled="selectedDefDefaultClientScopes.length == 0" class="btn btn-default" type="submit" ng-click="deleteDefaultClientScope()">
<i class="fa fa-angle-double-left"></i> {{:: 'remove-selected' | translate}}
@@ -79,10 +85,13 @@
<div class="col-md-4">
<label class="control-label" for="available-opt">{{:: 'client-scopes.optional.available' | translate}}</label>
<kc-tooltip>{{:: 'client-scopes.optional.available.tooltip' | translate}}</kc-tooltip>
- <select id="available-opt" class="form-control" multiple size="5"
+ <select id="available-opt" class="form-control overflow-select" multiple size="5"
ng-multiple="true"
- ng-model="selectedOptionalClientScopes"
- ng-options="r.name for r in availableClientScopes | orderBy:'toString()'">
+ ng-model="selectedOptionalClientScopes">
+ <option ng-repeat="r in availableClientScopes | orderBy:'name'"
+ value="{{r}}" title="{{r.name}}">
+ {{r.name}}
+ </option>
</select>
<button ng-disabled="selectedOptionalClientScopes.length == 0" class="btn btn-default" type="submit" ng-click="addOptionalClientScope()">
{{:: 'add-selected' | translate}} <i class="fa fa-angle-double-right"></i>
@@ -91,10 +100,13 @@
<div class="col-md-4">
<label class="control-label" for="assigned-opt">{{:: 'client-scopes.optional.assigned' | translate}}</label>
<kc-tooltip>{{:: 'client-scopes.optional.assigned.tooltip' | translate}}</kc-tooltip>
- <select id="assigned-opt" class="form-control" multiple size=5
+ <select id="assigned-opt" class="form-control overflow-select" multiple size=5
ng-multiple="true"
- ng-model="selectedDefOptionalClientScopes"
- ng-options="r.name for r in clientOptionalClientScopes | orderBy:'toString()'">
+ ng-model="selectedDefOptionalClientScopes">
+ <option ng-repeat="r in clientOptionalClientScopes | orderBy:'name'"
+ value="{{r}}" title="{{r.name}}">
+ {{r.name}}
+ </option>
</select>
<button ng-disabled="selectedDefOptionalClientScopes.length == 0" class="btn btn-default" type="submit" ng-click="deleteOptionalClientScope()">
<i class="fa fa-angle-double-left"></i> {{:: 'remove-selected' | translate}}
diff --git a/themes/src/main/resources/theme/base/admin/resources/partials/client-service-account-roles.html b/themes/src/main/resources/theme/base/admin/resources/partials/client-service-account-roles.html
index d57873f..3bee168 100644
--- a/themes/src/main/resources/theme/base/admin/resources/partials/client-service-account-roles.html
+++ b/themes/src/main/resources/theme/base/admin/resources/partials/client-service-account-roles.html
@@ -19,10 +19,13 @@
<label class="control-label" for="available">{{:: 'available-roles' | translate}}</label>
<kc-tooltip>{{:: 'service-account.available-roles.tooltip' | translate}}</kc-tooltip>
- <select id="available" class="form-control" multiple size="5"
+ <select id="available" class="form-control overflow-select" multiple size="5"
ng-multiple="true"
- ng-model="selectedRealmRoles"
- ng-options="r.name for r in realmRoles | orderBy:'name'">
+ ng-model="selectedRealmRoles">
+ <option ng-repeat="r in realmRoles | orderBy:'name'"
+ value="{{r}}" title="{{r.name}}">
+ {{r.name}}
+ </option>
</select>
<button ng-disabled="selectedRealmRoles.length == 0" class="btn btn-default" type="submit" ng-click="addRealmRole()">
{{:: 'add-selected' | translate}} <i class="fa fa-angle-double-right"></i>
@@ -31,10 +34,13 @@
<div class="col-md-3">
<label class="control-label" for="assigned">{{:: 'assigned-roles' | translate}}</label>
<kc-tooltip>{{:: 'service-account.assigned-roles.tooltip' | translate}}</kc-tooltip>
- <select id="assigned" class="form-control" multiple size=5
+ <select id="assigned" class="form-control overflow-select" multiple size=5
ng-multiple="true"
- ng-model="selectedRealmMappings"
- ng-options="r.name for r in realmMappings | orderBy:'name'">
+ ng-model="selectedRealmMappings">
+ <option ng-repeat="r in realmMappings | orderBy:'name'"
+ value="{{r}}" title="{{r.name}}">
+ {{r.name}}
+ </option>
</select>
<button ng-disabled="selectedRealmMappings.length == 0" class="btn btn-default" type="submit" ng-click="deleteRealmRole()">
<i class="fa fa-angle-double-left"></i> {{:: 'remove-selected' | translate}}
@@ -43,10 +49,13 @@
<div class="col-md-3">
<label class="control-label" for="realm-composite">{{:: 'effective-roles' | translate}} </label>
<kc-tooltip>{{:: 'realm.effective-roles.tooltip' | translate}}</kc-tooltip>
- <select id="realm-composite" class="form-control" multiple size=5
+ <select id="realm-composite" class="form-control overflow-select" multiple size=5
disabled="true"
- ng-model="dummymodel"
- ng-options="r.name for r in realmComposite | orderBy:'name'">
+ ng-model="dummymodel">
+ <option ng-repeat="r in realmComposite | orderBy:'name'"
+ value="{{r}}" title="{{r.name}}">
+ {{r.name}}
+ </option>
</select>
</div>
</div>
@@ -67,10 +76,13 @@
<div class="col-md-3">
<label class="control-label" for="available-client">{{:: 'available-roles' | translate}}</label>
<kc-tooltip>{{:: 'assign.available-roles.tooltip' | translate}}</kc-tooltip>
- <select id="available-client" class="form-control" multiple size="5"
+ <select id="available-client" class="form-control overflow-select" multiple size="5"
ng-multiple="true"
- ng-model="selectedClientRoles"
- ng-options="r.name for r in clientRoles | orderBy:'name'">
+ ng-model="selectedClientRoles">
+ <option ng-repeat="r in clientRoles | orderBy:'name'"
+ value="{{r}}" title="{{r.name}}">
+ {{r.name}}
+ </option>
</select>
<button ng-disabled="selectedClientRoles.length == 0" class="btn btn-default" type="submit" ng-click="addClientRole()">
{{:: 'add-selected' | translate}} <i class="fa fa-angle-double-right"></i>
@@ -79,10 +91,13 @@
<div class="col-md-3">
<label class="control-label" for="assigned-client">{{:: 'assigned-roles' | translate}}</label>
<kc-tooltip>{{:: 'client.assigned-roles.tooltip' | translate}}</kc-tooltip>
- <select id="assigned-client" class="form-control" multiple size=5
+ <select id="assigned-client" class="form-control overflow-select" multiple size=5
ng-multiple="true"
- ng-model="selectedClientMappings"
- ng-options="r.name for r in clientMappings | orderBy:'name'">
+ ng-model="selectedClientMappings">
+ <option ng-repeat="r in clientMappings | orderBy:'name'"
+ value="{{r}}" title="{{r.name}}">
+ {{r.name}}
+ </option>
</select>
<button ng-disabled="selectedClientMappings.length == 0" class="btn btn-default" type="submit" ng-click="deleteClientRole()">
<i class="fa fa-angle-double-left"></i> {{:: 'remove-selected' | translate}}
@@ -91,10 +106,13 @@
<div class="col-md-3">
<label class="control-label" for="client-composite">{{:: 'effective-roles' | translate}}</label>
<kc-tooltip>{{:: 'client.effective-roles.tooltip' | translate}}</kc-tooltip>
- <select id="client-composite" class="form-control" multiple size=5
+ <select id="client-composite" class="form-control overflow-select" multiple size=5
disabled="true"
- ng-model="dummymodel"
- ng-options="r.name for r in clientComposite | orderBy:'name'">
+ ng-model="dummymodel">
+ <option ng-repeat="r in clientComposite | orderBy:'name'"
+ value="{{r}}" title="{{r.name}}">
+ {{r.name}}
+ </option>
</select>
</div>
</div>
diff --git a/themes/src/main/resources/theme/base/admin/resources/partials/group-role-mappings.html b/themes/src/main/resources/theme/base/admin/resources/partials/group-role-mappings.html
index 62aa7d4..4e3ab97 100755
--- a/themes/src/main/resources/theme/base/admin/resources/partials/group-role-mappings.html
+++ b/themes/src/main/resources/theme/base/admin/resources/partials/group-role-mappings.html
@@ -14,10 +14,12 @@
<div class="row">
<div class="col-md-3">
<label class="control-label" for="available">{{:: 'available-roles' | translate}}</label>
- <select id="available" class="form-control" multiple size="5"
+ <select id="available" class="form-control overflow-select" multiple size="5"
ng-multiple="true"
- ng-model="selectedRealmRoles"
- ng-options="r.name for r in realmRoles | orderBy:'name'">
+ ng-model="selectedRealmRoles">
+ <option ng-repeat="r in realmRoles | orderBy:'name'" value="{{r}}" title="{{r.name}}">
+ {{r.name}}
+ </option>
</select>
<button ng-disabled="selectedRealmRoles.length == 0" ng-disabled="c.length == 0" class="btn btn-default" type="submit" ng-click="addRealmRole()">
{{:: 'add-selected' | translate}} <i class="fa fa-angle-right"></i>
@@ -27,10 +29,12 @@
<div class="col-md-3">
<label class="control-label" for="assigned">{{:: 'assigned-roles' | translate}}</label>
<kc-tooltip>{{:: 'group.assigned-roles.tooltip' | translate}}</kc-tooltip>
- <select id="assigned" class="form-control" multiple size=5
+ <select id="assigned" class="form-control overflow-select" multiple size=5
ng-multiple="true"
- ng-model="selectedRealmMappings"
- ng-options="r.name for r in realmMappings | orderBy:'name'">
+ ng-model="selectedRealmMappings">
+ <option ng-repeat="r in realmMappings | orderBy:'name'" value="{{r}}" title="{{r.name}}">
+ {{r.name}}
+ </option>
</select>
<button ng-disabled="selectedRealmMappings.length == 0" class="btn btn-default" type="submit" ng-click="deleteRealmRole()">
<i class="fa fa-angle-double-left"></i> {{:: 'remove-selected' | translate}}
@@ -39,10 +43,12 @@
<div class="col-md-3">
<label class="control-label" for="realm-composite">{{:: 'effective-roles' | translate}}</label>
<kc-tooltip>{{:: 'group.effective-roles.tooltip' | translate}}</kc-tooltip>
- <select id="realm-composite" class="form-control" multiple size=5
+ <select id="realm-composite" class="form-control overflow-select" multiple size=5
disabled="true"
- ng-model="dummymodel"
- ng-options="r.name for r in realmComposite | orderBy:'name'">
+ ng-model="dummymodel">
+ <option ng-repeat="r in realmComposite | orderBy:'name'" value="{{r}}" title="{{r.name}}">
+ {{r.name}}
+ </option>
</select>
</div>
</div>
@@ -62,10 +68,12 @@
<div class="col-md-3">
<label class="control-label" for="available-client">{{:: 'available-roles' | translate}}</label>
<kc-tooltip>{{:: 'group.available-roles.tooltip' | translate}}</kc-tooltip>
- <select id="available-client" class="form-control" multiple size="5"
+ <select id="available-client" class="form-control overflow-select" multiple size="5"
ng-multiple="true"
- ng-model="selectedClientRoles"
- ng-options="r.name for r in clientRoles | orderBy:'name'">
+ ng-model="selectedClientRoles">
+ <option ng-repeat="r in clientRoles | orderBy:'name'" value="{{r}}" title="{{r.name}}">
+ {{r.name}}
+ </option>
</select>
<button ng-disabled="selectedClientRoles.length == 0" class="btn btn-default" type="submit" ng-click="addClientRole()">
{{:: 'add-selected' | translate}} <i class="fa fa-angle-double-right"></i>
@@ -74,10 +82,12 @@
<div class="col-md-3">
<label class="control-label" for="assigned-client">{{:: 'assigned-roles' | translate}}</label>
<kc-tooltip>{{:: 'group.assigned-roles-client.tooltip' | translate}}</kc-tooltip>
- <select id="assigned-client" class="form-control" multiple size=5
+ <select id="assigned-client" class="form-control overflow-select" multiple size=5
ng-multiple="true"
- ng-model="selectedClientMappings"
- ng-options="r.name for r in clientMappings | orderBy:'name'">
+ ng-model="selectedClientMappings">
+ <option ng-repeat="r in clientMappings | orderBy:'name'" value="{{r}}" title="{{r.name}}">
+ {{r.name}}
+ </option>
</select>
<button ng-disabled="selectedClientMappings.length == 0" class="btn btn-default" type="submit" ng-click="deleteClientRole()">
<i class="fa fa-angle-double-left"></i> {{:: 'remove-selected' | translate}}
@@ -86,10 +96,12 @@
<div class="col-md-3">
<label class="control-label" for="client-composite">{{:: 'effective-roles' | translate}}</label>
<kc-tooltip>{{:: 'group.effective-roles-client.tooltip' | translate}}</kc-tooltip>
- <select id="client-composite" class="form-control" multiple size=5
+ <select id="client-composite" class="form-control overflow-select" multiple size=5
disabled="true"
- ng-model="dummymodel"
- ng-options="r.name for r in clientComposite | orderBy:'name'">
+ ng-model="dummymodel">
+ <option ng-repeat="r in clientComposite | orderBy:'name'" value="{{r}}" title="{{r.name}}">
+ {{r.name}}
+ </option>
</select>
</div>
</div>
diff --git a/themes/src/main/resources/theme/base/admin/resources/partials/realm-default-roles.html b/themes/src/main/resources/theme/base/admin/resources/partials/realm-default-roles.html
index b8e611d..8034a3a 100755
--- a/themes/src/main/resources/theme/base/admin/resources/partials/realm-default-roles.html
+++ b/themes/src/main/resources/theme/base/admin/resources/partials/realm-default-roles.html
@@ -14,10 +14,12 @@
<div class="col-md-4">
<label class="control-label" for="available">{{:: 'available-roles' | translate}}</label>
<kc-tooltip>{{:: 'default.available-roles.tooltip' | translate}}</kc-tooltip>
- <select id="available" class="form-control" multiple size="5"
+ <select id="available" class="form-control overflow-select" multiple size="5"
ng-multiple="true"
- ng-model="selectedRealmRoles"
- ng-options="r for r in availableRealmRoles | orderBy:'toString()'">
+ ng-model="selectedRealmRoles">
+ <option ng-repeat="r in availableRealmRoles | orderBy:'toString()'" value="{{r}}" title="{{r.toString()}}">
+ {{r.toString()}}
+ </option>
</select>
<button ng-disabled="selectedRealmRoles.length == 0" class="btn btn-default" type="submit" ng-click="addRealmDefaultRole()">
{{:: 'add-selected' | translate}} <i class="fa fa-angle-double-right"></i>
@@ -26,10 +28,12 @@
<div class="col-md-4">
<label class="control-label" for="assigned">{{:: 'realm-default-roles' | translate}}</label>
<kc-tooltip>{{:: 'realm-default-roles.tooltip' | translate}}</kc-tooltip>
- <select id="assigned" class="form-control" multiple size=5
+ <select id="assigned" class="form-control overflow-select" multiple size=5
ng-multiple="true"
- ng-model="selectedRealmDefRoles"
- ng-options="r for r in realm.defaultRoles | orderBy:'toString()'">
+ ng-model="selectedRealmDefRoles">
+ <option ng-repeat="r in realm.defaultRoles | orderBy:'toString()'" value="{{r}}" title="{{r.toString()}}">
+ {{r.toString()}}
+ </option>
</select>
<button ng-disabled="selectedRealmDefRoles.length == 0" class="btn btn-default" type="submit" ng-click="deleteRealmDefaultRole()">
<i class="fa fa-angle-double-left"></i> {{:: 'remove-selected' | translate}}
@@ -52,10 +56,12 @@
<div class="col-md-4">
<label class="control-label" for="available-client">{{:: 'available-roles' | translate}}</label>
<kc-tooltip>{{:: 'default.available-roles-client.tooltip' | translate}}</kc-tooltip>
- <select id="available-client" class="form-control" multiple size="5"
+ <select id="available-client" class="form-control overflow-select" multiple size="5"
ng-multiple="true"
- ng-model="selectedClientRoles"
- ng-options="r for r in availableClientRoles | orderBy:'toString()'">
+ ng-model="selectedClientRoles">
+ <option ng-repeat="r in availableClientRoles | orderBy:'toString()'" value="{{r}}" title="{{r.toString()}}">
+ {{r.toString()}}
+ </option>
</select>
<button ng-disabled="selectedClientRoles.length == 0" class="btn btn-default" type="submit" ng-click="addClientDefaultRole()">
{{:: 'add-selected' | translate}} <i class="fa fa-angle-double-right"></i>
@@ -64,10 +70,12 @@
<div class="col-md-4">
<label class="control-label" for="assigned-client">{{:: 'client-default-roles' | translate}}</label>
<kc-tooltip>{{:: 'client-default-roles.tooltip' | translate}}</kc-tooltip>
- <select id="assigned-client" class="form-control" multiple size=5
+ <select id="assigned-client" class="form-control overflow-select" multiple size=5
ng-multiple="true"
- ng-model="selectedClientDefRoles"
- ng-options="r for r in client.defaultRoles | orderBy:'toString()'">
+ ng-model="selectedClientDefRoles">
+ <option ng-repeat="r in client.defaultRoles | orderBy:'toString()'" value="{{r}}" title="{{r.toString()}}">
+ {{r.toString()}}
+ </option>
</select>
<button ng-disabled="selectedClientDefRoles.length == 0" class="btn btn-default" type="submit" ng-click="rmClientDefaultRole()">
<i class="fa fa-angle-double-left"></i> {{:: 'remove-selected' | translate}}
diff --git a/themes/src/main/resources/theme/base/admin/resources/partials/role-detail.html b/themes/src/main/resources/theme/base/admin/resources/partials/role-detail.html
index 6cf75fb..5ba02ce 100755
--- a/themes/src/main/resources/theme/base/admin/resources/partials/role-detail.html
+++ b/themes/src/main/resources/theme/base/admin/resources/partials/role-detail.html
@@ -58,10 +58,12 @@
<div class="col-md-4">
<label class="control-label">{{:: 'available-roles' | translate}}</label>
<kc-tooltip>{{:: 'composite.available-roles.tooltip' | translate}}</kc-tooltip>
- <select id="available" class="form-control" multiple size="5"
+ <select id="available" class="form-control overflow-select" multiple size="5"
ng-multiple="true"
- ng-model="selectedRealmRoles"
- ng-options="r.name for r in realmRoles | orderBy:'name'">
+ ng-model="selectedRealmRoles">
+ <option ng-repeat="r in realmRoles | orderBy:'name'" value="{{r}}" title="{{r.name}}">
+ {{r.name}}
+ </option>
</select>
<button ng-disabled="selectedRealmRoles.length == 0" class="btn btn-default" type="submit" ng-click="addRealmRole()">
{{:: 'add-selected' | translate}} <i class="fa fa-angle-double-right"></i>
@@ -70,10 +72,12 @@
<div class="col-md-4">
<label class="control-label">{{:: 'associated-roles' | translate}}</label>
<kc-tooltip>{{:: 'composite.associated-roles.tooltip' | translate}}</kc-tooltip>
- <select id="assigned" class="form-control" multiple size=5
+ <select id="assigned" class="form-control overflow-select" multiple size=5
ng-multiple="true"
- ng-model="selectedRealmMappings"
- ng-options="r.name for r in realmMappings | orderBy:'name'">
+ ng-model="selectedRealmMappings">
+ <option ng-repeat="r in realmMappings | orderBy:'name'" value="{{r}}" title="{{r.name}}">
+ {{r.name}}
+ </option>
</select>
<button ng-disabled="selectedRealmMappings.length == 0" class="btn btn-default" type="submit" ng-click="deleteRealmRole()">
<i class="fa fa-angle-double-left"></i> {{:: 'remove-selected' | translate}}
@@ -97,10 +101,12 @@
<div class="col-md-4">
<label class="control-label" for="available-client">{{:: 'available-roles' | translate}}</label>
<kc-tooltip>{{:: 'composite.available-roles-client.tooltip' | translate}}</kc-tooltip>
- <select id="available-client" class="form-control" multiple size="5"
+ <select id="available-client" class="form-control overflow-select" multiple size="5"
ng-multiple="true"
- ng-model="selectedClientRoles"
- ng-options="r.name for r in clientRoles | orderBy:'name'">
+ ng-model="selectedClientRoles">
+ <option ng-repeat="r in clientRoles | orderBy:'name'" value="{{r}}" title="{{r.name}}">
+ {{r.name}}
+ </option>
</select>
<button ng-disabled="selectedClientRoles.length == 0" class="btn btn-default" type="submit" ng-click="addClientRole()">
{{:: 'add-selected' | translate}} <i class="fa fa-angle-right"></i>
@@ -109,10 +115,12 @@
<div class="col-md-4">
<label class="control-label" for="assigned-client">{{:: 'associated-roles' | translate}}</label>
<kc-tooltip>{{:: 'composite.associated-roles-client.tooltip' | translate}}</kc-tooltip>
- <select id="assigned-client" class="form-control" multiple size=5
+ <select id="assigned-client" class="form-control overflow-select" multiple size=5
ng-multiple="true"
- ng-model="selectedClientMappings"
- ng-options="r.name for r in clientMappings | orderBy:'name'">
+ ng-model="selectedClientMappings">
+ <option ng-repeat="r in clientMappings | orderBy:'name'" value="{{r}}" title="{{r.name}}">
+ {{r.name}}
+ </option>
</select>
<button ng-disabled="selectedClientMappings.length == 0" class="btn btn-default" type="submit" ng-click="deleteClientRole()">
<i class="fa fa-angle-left"></i> {{:: 'remove-selected' | translate}}
diff --git a/themes/src/main/resources/theme/base/admin/resources/partials/role-mappings.html b/themes/src/main/resources/theme/base/admin/resources/partials/role-mappings.html
index 013dae7..a2017a8 100755
--- a/themes/src/main/resources/theme/base/admin/resources/partials/role-mappings.html
+++ b/themes/src/main/resources/theme/base/admin/resources/partials/role-mappings.html
@@ -14,10 +14,13 @@
<div class="row">
<div class="col-md-3">
<label class="control-label" for="available">{{:: 'available-roles' | translate}}</label>
- <select id="available" class="form-control" multiple size="5"
+ <select id="available" class="form-control overflow-select" multiple size="5" realmMappings
ng-multiple="true"
- ng-model="selectedRealmRoles"
- ng-options="r.name for r in realmRoles | orderBy:'name'">
+ ng-model="selectedRealmRoles">
+ <option ng-repeat="r in realmRoles | orderBy:'name'"
+ value="{{r}}" title="{{r.name}}">
+ {{r.name}}
+ </option>
</select>
<button ng-disabled="selectedRealmRoles.length == 0" ng-disabled="c.length == 0" class="btn btn-default" type="submit" ng-click="addRealmRole()">
{{:: 'add-selected' | translate}} <i class="fa fa-angle-right"></i>
@@ -27,10 +30,13 @@
<div class="col-md-3">
<label class="control-label" for="assigned">{{:: 'assigned-roles' | translate}}</label>
<kc-tooltip>{{:: 'user.assigned-roles.tooltip' | translate}}</kc-tooltip>
- <select id="assigned" class="form-control" multiple size=5
+ <select id="assigned" class="form-control overflow-select" multiple size="5"
ng-multiple="true"
- ng-model="selectedRealmMappings"
- ng-options="r.name for r in realmMappings | orderBy:'name'">
+ ng-model="selectedRealmMappings">
+ <option ng-repeat="r in realmMappings | orderBy:'name'"
+ value="{{r}}" title="{{r.name}}">
+ {{r.name}}
+ </option>
</select>
<button ng-disabled="selectedRealmMappings.length == 0" class="btn btn-default" type="submit" ng-click="deleteRealmRole()">
<i class="fa fa-angle-double-left"></i> {{:: 'remove-selected' | translate}}
@@ -39,10 +45,13 @@
<div class="col-md-3">
<label class="control-label" for="realm-composite">{{:: 'effective-roles' | translate}}</label>
<kc-tooltip>{{:: 'user.effective-roles.tooltip' | translate}}</kc-tooltip>
- <select id="realm-composite" class="form-control" multiple size=5
+ <select id="realm-composite" class="form-control overflow-select" multiple size="5"
disabled="true"
- ng-model="dummymodel"
- ng-options="r.name for r in realmComposite | orderBy:'name'">
+ ng-model="dummymodel">
+ <option ng-repeat="r in realmComposite | orderBy:'name'"
+ value="{{r}}" title="{{r.name}}">
+ {{r.name}}
+ </option>
</select>
</div>
</div>
@@ -62,10 +71,13 @@
<div class="col-md-3">
<label class="control-label" for="available-client">{{:: 'available-roles' | translate}}</label>
<kc-tooltip>{{:: 'user.available-roles.tooltip' | translate}}</kc-tooltip>
- <select id="available-client" class="form-control" multiple size="5"
+ <select id="available-client" class="form-control overflow-select" multiple size="5"
ng-multiple="true"
- ng-model="selectedClientRoles"
- ng-options="r.name for r in clientRoles | orderBy:'name'">
+ ng-model="selectedClientRoles">
+ <option ng-repeat="r in clientRoles | orderBy:'name'"
+ value="{{r}}" title="{{r.name}}">
+ {{r.name}}
+ </option>
</select>
<button ng-disabled="selectedClientRoles.length == 0" class="btn btn-default" type="submit" ng-click="addClientRole()">
{{:: 'add-selected' | translate}} <i class="fa fa-angle-double-right"></i>
@@ -74,10 +86,13 @@
<div class="col-md-3">
<label class="control-label" for="assigned-client">{{:: 'assigned-roles' | translate}}</label>
<kc-tooltip>{{:: 'user.assigned-roles-client.tooltip' | translate}}</kc-tooltip>
- <select id="assigned-client" class="form-control" multiple size=5
+ <select id="assigned-client" class="form-control overflow-select" multiple size=5
ng-multiple="true"
- ng-model="selectedClientMappings"
- ng-options="r.name for r in clientMappings | orderBy:'name'">
+ ng-model="selectedClientMappings">
+ <option ng-repeat="r in clientMappings | orderBy:'name'"
+ value="{{r}}" title="{{r.name}}">
+ {{r.name}}
+ </option>
</select>
<button ng-disabled="selectedClientMappings.length == 0" class="btn btn-default" type="submit" ng-click="deleteClientRole()">
<i class="fa fa-angle-double-left"></i> {{:: 'remove-selected' | translate}}
@@ -86,10 +101,13 @@
<div class="col-md-3">
<label class="control-label" for="client-composite">{{:: 'effective-roles' | translate}}</label>
<kc-tooltip>{{:: 'user.effective-roles-client.tooltip' | translate}}</kc-tooltip>
- <select id="client-composite" class="form-control" multiple size=5
+ <select id="client-composite" class="form-control overflow-select" multiple size=5
disabled="true"
- ng-model="dummymodel"
- ng-options="r.name for r in clientComposite | orderBy:'name'">
+ ng-model="dummymodel">
+ <option ng-repeat="r in clientComposite | orderBy:'name'"
+ value="{{r}}" title="{{r.name}}">
+ {{r.name}}
+ </option>
</select>
</div>
</div>
diff --git a/themes/src/main/resources/theme/keycloak/admin/resources/css/styles.css b/themes/src/main/resources/theme/keycloak/admin/resources/css/styles.css
index 1fcd20d..c846ed7 100755
--- a/themes/src/main/resources/theme/keycloak/admin/resources/css/styles.css
+++ b/themes/src/main/resources/theme/keycloak/admin/resources/css/styles.css
@@ -190,6 +190,11 @@ th.w-40 {
height: 26px;
}
+/*********** html select ********/
+.overflow-select {
+ overflow: auto;
+}
+
/*********** New Menu ***********/