keycloak-memoizeit

Form area and console

10/25/2013 11:24:58 AM

Changes

ui/pom.xml 22(+0 -22)

ui/src/main/java/org/keycloak/ui/example/Admin.java 230(+0 -230)

ui/src/main/java/org/keycloak/ui/example/Application.java 102(+0 -102)

ui/src/main/java/org/keycloak/ui/example/Attribute.java 40(+0 -40)

ui/src/main/java/org/keycloak/ui/example/Id.java 43(+0 -43)

ui/src/main/java/org/keycloak/ui/example/IdentityProviderConfig.java 68(+0 -68)

ui/src/main/java/org/keycloak/ui/example/Realm.java 121(+0 -121)

ui/src/main/java/org/keycloak/ui/example/User.java 93(+0 -93)

ui/src/main/resources/META-INF/resources/ui/css/admin.css 1266(+0 -1266)

ui/src/main/resources/META-INF/resources/ui/css/admin-responsive.css 314(+0 -314)

ui/src/main/resources/META-INF/resources/ui/css/styles.css 17(+0 -17)

ui/src/main/resources/META-INF/resources/ui/img/actions-border-top.png 0(+0 -0)

ui/src/main/resources/META-INF/resources/ui/img/body-bg.jpg 0(+0 -0)

ui/src/main/resources/META-INF/resources/ui/img/bullet-separator.png 0(+0 -0)

ui/src/main/resources/META-INF/resources/ui/img/divider-vertical.png 0(+0 -0)

ui/src/main/resources/META-INF/resources/ui/img/favicon.ico 0(+0 -0)

ui/src/main/resources/META-INF/resources/ui/img/favicon.png 0(+0 -0)

ui/src/main/resources/META-INF/resources/ui/img/glyphicons-halflings.png 0(+0 -0)

ui/src/main/resources/META-INF/resources/ui/img/glyphicons-halflings.psd 0(+0 -0)

ui/src/main/resources/META-INF/resources/ui/img/glyphicons-halflings-gray.png 0(+0 -0)

ui/src/main/resources/META-INF/resources/ui/img/glyphicons-halflings-white.png 0(+0 -0)

ui/src/main/resources/META-INF/resources/ui/img/icon-arrow-closed.png 0(+0 -0)

ui/src/main/resources/META-INF/resources/ui/img/icon-arrow-opened.png 0(+0 -0)

ui/src/main/resources/META-INF/resources/ui/img/icon-close.png 0(+0 -0)

ui/src/main/resources/META-INF/resources/ui/img/icon-grippy.png 0(+0 -0)

ui/src/main/resources/META-INF/resources/ui/img/icon-ok.png 0(+0 -0)

ui/src/main/resources/META-INF/resources/ui/img/icon-switch-on-off.png 0(+0 -0)

ui/src/main/resources/META-INF/resources/ui/img/mobile-redirects.png 0(+0 -0)

ui/src/main/resources/META-INF/resources/ui/img/sprite-icons-30.png 0(+0 -0)

ui/src/main/resources/META-INF/resources/ui/img/sprite-icons-30.psd 0(+0 -0)

ui/src/main/resources/META-INF/resources/ui/img/sprite-three.psd 0(+0 -0)

ui/src/main/resources/META-INF/resources/ui/index.html 50(+0 -50)

ui/src/main/resources/META-INF/resources/ui/js/app.js 290(+0 -290)

ui/src/main/resources/META-INF/resources/ui/js/controllers.js 348(+0 -348)

ui/src/main/resources/META-INF/resources/ui/js/loaders.js 84(+0 -84)

ui/src/main/resources/META-INF/resources/ui/js/services.js 131(+0 -131)

ui/src/main/resources/META-INF/resources/ui/lib/angular/angular.js 14847(+0 -14847)

ui/src/main/resources/META-INF/resources/ui/lib/angular/angular-bootstrap.js 175(+0 -175)

ui/src/main/resources/META-INF/resources/ui/lib/angular/angular-bootstrap-prettify.js 1835(+0 -1835)

ui/src/main/resources/META-INF/resources/ui/lib/angular/angular-cookies.js 185(+0 -185)

ui/src/main/resources/META-INF/resources/ui/lib/angular/angular-loader.js 277(+0 -277)

ui/src/main/resources/META-INF/resources/ui/lib/angular/angular-mocks.js 1788(+0 -1788)

ui/src/main/resources/META-INF/resources/ui/lib/angular/angular-resource.js 457(+0 -457)

ui/src/main/resources/META-INF/resources/ui/lib/angular/angular-sanitize.js 537(+0 -537)

ui/src/main/resources/META-INF/resources/ui/lib/angular/angular-scenario.js 26310(+0 -26310)

ui/src/main/resources/META-INF/resources/ui/lib/angular/jstd-scenario-adapter.js 185(+0 -185)

ui/src/main/resources/META-INF/resources/ui/lib/angular/jstd-scenario-adapter-config.js 6(+0 -6)

ui/src/main/resources/META-INF/resources/ui/lib/angular/ui-bootstrap-tpls-0.4.0.js 3165(+0 -3165)

ui/src/main/resources/META-INF/resources/ui/lib/angular/version.json 1(+0 -1)

ui/src/main/resources/META-INF/resources/ui/lib/angular/version.txt 1(+0 -1)

ui/src/main/resources/META-INF/resources/ui/lib/bootstrap/css/bootstrap.css 6167(+0 -6167)

ui/src/main/resources/META-INF/resources/ui/lib/bootstrap/css/bootstrap.min.css 9(+0 -9)

ui/src/main/resources/META-INF/resources/ui/lib/bootstrap/css/bootstrap-responsive.css 1109(+0 -1109)

ui/src/main/resources/META-INF/resources/ui/lib/bootstrap/css/bootstrap-responsive.min.css 9(+0 -9)

ui/src/main/resources/META-INF/resources/ui/lib/bootstrap/img/glyphicons-halflings.png 0(+0 -0)

ui/src/main/resources/META-INF/resources/ui/lib/bootstrap/img/glyphicons-halflings-white.png 0(+0 -0)

ui/src/main/resources/META-INF/resources/ui/lib/bootstrap/js/bootstrap.js 2280(+0 -2280)

ui/src/main/resources/META-INF/resources/ui/lib/bootstrap/js/bootstrap.min.js 6(+0 -6)

ui/src/main/resources/META-INF/resources/ui/lib/jquery/jquery-1.10.2.js 9789(+0 -9789)

ui/src/main/resources/META-INF/resources/ui/partials/application-detail.html 109(+0 -109)

ui/src/main/resources/META-INF/resources/ui/partials/application-list.html 26(+0 -26)

ui/src/main/resources/META-INF/resources/ui/partials/application-menu.html 20(+0 -20)

ui/src/main/resources/META-INF/resources/ui/partials/home.html 4(+0 -4)

ui/src/main/resources/META-INF/resources/ui/partials/menu.html 30(+0 -30)

ui/src/main/resources/META-INF/resources/ui/partials/provider/google-help.html 40(+0 -40)

ui/src/main/resources/META-INF/resources/ui/partials/provider/twitter-help.html 46(+0 -46)

ui/src/main/resources/META-INF/resources/ui/partials/realm-detail.html 124(+0 -124)

ui/src/main/resources/META-INF/resources/ui/partials/realm-list.html 27(+0 -27)

ui/src/main/resources/META-INF/resources/ui/partials/realm-menu.html 21(+0 -21)

ui/src/main/resources/META-INF/resources/ui/partials/role-mapping.html 50(+0 -50)

ui/src/main/resources/META-INF/resources/ui/partials/user-detail.html 107(+0 -107)

ui/src/main/resources/META-INF/resources/ui/partials/user-list.html 32(+0 -32)

Details

diff --git a/admin-ui/src/main/resources/META-INF/resources/admin/js/controllers/realm.js b/admin-ui/src/main/resources/META-INF/resources/admin/js/controllers/realm.js
index 1f28e79..6c83262 100755
--- a/admin-ui/src/main/resources/META-INF/resources/admin/js/controllers/realm.js
+++ b/admin-ui/src/main/resources/META-INF/resources/admin/js/controllers/realm.js
@@ -40,7 +40,6 @@ module.controller('RealmDropdownCtrl', function($scope, Realm, Current, Auth, $l
     };
     $scope.showNav = function() {
         var show = Current.realms.length > 0;
-        console.log('Show dropdown? ' + show);
         return Auth.loggedIn && show;
     }
 });
@@ -137,11 +136,12 @@ module.controller('RealmDetailCtrl', function($scope, Current, Realm, realm, $ht
     };
 
     $scope.cancel = function() {
-        $location.url("/realms");
+        //$location.url("/realms");
+        window.history.back();
     };
 
     $scope.remove = function() {
-        Dialog.confirmDelete($scope.realm.name, 'realm', function() {
+        Dialog.confirmDelete($scope.realm.realm, 'realm', function() {
             Realm.remove($scope.realm, function() {
                 Current.realms = Realm.get();
                 $location.url("/realms");
@@ -200,9 +200,10 @@ module.controller('RealmRequiredCredentialsCtrl', function($scope, Realm, realm,
 module.controller('RealmTokenDetailCtrl', function($scope, Realm, realm, $http, $location, Dialog, Notifications) {
     console.log('RealmTokenDetailCtrl');
 
-    $scope.realm = { id : realm.id, realm : realm.realm, social : realm.social, tokenLifespan : realm.tokenLifespan,  accessCodeLifespan : realm.accessCodeLifespan };
+    $scope.realm = { id : realm.id, realm : realm.realm, social : realm.social, tokenLifespan : realm.tokenLifespan,  accessCodeLifespan : realm.accessCodeLifespan ,  accessCodeLifespanUserAction : realm.accessCodeLifespanUserAction  };
     $scope.realm.tokenLifespanUnit = 'Seconds';
     $scope.realm.accessCodeLifespanUnit = 'Seconds';
+    $scope.realm.accessCodeLifespanUserActionUnit = 'Seconds';
 
     var oldCopy = angular.copy($scope.realm);
     $scope.changed = false;
@@ -218,6 +219,7 @@ module.controller('RealmTokenDetailCtrl', function($scope, Realm, realm, $http, 
             var realmCopy = angular.copy($scope.realm);
             delete realmCopy["tokenLifespanUnit"];
             delete realmCopy["accessCodeLifespanUnit"];
+            delete realmCopy["accessCodeLifespanUserActionUnit"];
             if ($scope.realm.tokenLifespanUnit == 'Minutes') {
                 realmCopy.tokenLifespan = $scope.realm.tokenLifespan * 60;
             } else if ($scope.realm.tokenLifespanUnit == 'Hours') {
@@ -232,6 +234,13 @@ module.controller('RealmTokenDetailCtrl', function($scope, Realm, realm, $http, 
             } else if ($scope.realm.accessCodeLifespanUnit == 'Days') {
                 realmCopy.accessCodeLifespan = $scope.realm.accessCodeLifespan * 60 * 60 * 24;
             }
+            if ($scope.realm.accessCodeLifespanUserActionUnit == 'Minutes') {
+                realmCopy.accessCodeLifespanUserAction = $scope.realm.accessCodeLifespanUserAction * 60;
+            } else if ($scope.realm.accessCodeLifespanUserActionUnit == 'Hours') {
+                realmCopy.accessCodeLifespanUserAction = $scope.realm.accessCodeLifespanUserAction * 60 * 60;
+            } else if ($scope.realm.accessCodeLifespanUserActionUnit == 'Days') {
+                realmCopy.accessCodeLifespanUserAction = $scope.realm.accessCodeLifespanUserAction * 60 * 60 * 24;
+            }
             $scope.changed = false;
             Realm.update(realmCopy, function () {
                 $location.url("/realms/" + realm.id + "/token-settings");
diff --git a/admin-ui/src/main/resources/META-INF/resources/admin/js/controllers/users.js b/admin-ui/src/main/resources/META-INF/resources/admin/js/controllers/users.js
index 2a6c242..0d5f4cd 100755
--- a/admin-ui/src/main/resources/META-INF/resources/admin/js/controllers/users.js
+++ b/admin-ui/src/main/resources/META-INF/resources/admin/js/controllers/users.js
@@ -134,7 +134,7 @@ module.controller('UserDetailCtrl', function($scope, realm, user, User, $locatio
     $scope.user = angular.copy(user);
     $scope.create = !user.username;
 
-    $scope.changed = $scope.create;
+    $scope.changed = false; // $scope.create;
 
     $scope.$watch('user', function() {
         if (!angular.equals($scope.user, user)) {
@@ -176,7 +176,7 @@ module.controller('UserDetailCtrl', function($scope, realm, user, User, $locatio
     };
 
     $scope.remove = function() {
-        Dialog.confirmDelete($scope.user.userId, 'user', function() {
+        Dialog.confirmDelete($scope.user.username, 'user', function() {
             $scope.user.$remove({
                 realm : realm.id,
                 userId : $scope.user.username
diff --git a/admin-ui/src/main/resources/META-INF/resources/admin/lib/angular/ui-bootstrap-tpls-0.4.0.js b/admin-ui/src/main/resources/META-INF/resources/admin/lib/angular/ui-bootstrap-tpls-0.4.0.js
index 2e9eeb9..b587abd 100755
--- a/admin-ui/src/main/resources/META-INF/resources/admin/lib/angular/ui-bootstrap-tpls-0.4.0.js
+++ b/admin-ui/src/main/resources/META-INF/resources/admin/lib/angular/ui-bootstrap-tpls-0.4.0.js
@@ -970,8 +970,8 @@ dialogModule.provider("$dialog", function(){
     transitionClass: 'fade',
     triggerClass: 'in',
     resolve:{},
-    backdropFade: false,
-    dialogFade:false,
+    backdropFade: true,
+    dialogFade: true,
     keyboard: true, // close with esc key
     backdropClick: true // only in conjunction with backdrop=true
     /* other options: template, templateUrl, controller */
@@ -1027,6 +1027,7 @@ dialogModule.provider("$dialog", function(){
         this.modalEl.addClass(options.transitionClass);
         this.modalEl.removeClass(options.triggerClass);
       }
+      this.modalEl.css("display", "block"); /* FIXME: For BS 3.x support */
 
       this.handledEscapeKey = function(e) {
         if (e.which === 27) {
@@ -2997,6 +2998,8 @@ angular.module("template/datepicker/datepicker.html", []).run(["$templateCache",
 
 angular.module("template/dialog/message.html", []).run(["$templateCache", function($templateCache) {
   $templateCache.put("template/dialog/message.html",
+    "<div class=\"modal-dialog\">\n" +
+    "<div class=\"modal-content\">\n" +
     "<div class=\"modal-header\">\n" +
     "	<h3>{{ title }}</h3>\n" +
     "</div>\n" +
@@ -3006,6 +3009,8 @@ angular.module("template/dialog/message.html", []).run(["$templateCache", functi
     "<div class=\"modal-footer\">\n" +
     "	<button ng-repeat=\"btn in buttons\" ng-click=\"close(btn.result)\" class=\"btn\" ng-class=\"btn.cssClass\">{{ btn.label }}</button>\n" +
     "</div>\n" +
+    "</div>\n" +
+    "</div>\n" +
     "");
 }]);
 
diff --git a/admin-ui/src/main/resources/META-INF/resources/admin/partials/application-detail.html b/admin-ui/src/main/resources/META-INF/resources/admin/partials/application-detail.html
index 548b966..2c11b73 100755
--- a/admin-ui/src/main/resources/META-INF/resources/admin/partials/application-detail.html
+++ b/admin-ui/src/main/resources/META-INF/resources/admin/partials/application-detail.html
@@ -104,10 +104,9 @@
                         </div>
                     </fieldset>
                     <div class="form-actions" data-ng-show="create">
-                        <button type="submit" data-ng-click="save()" class="primary">Save
+                        <button type="submit" data-ng-click="save()" data-ng-show="changed" class="primary">Save
                         </button>
-                        <button type="submit" data-ng-click="cancel()" data-ng-click="cancel()"
-                                data-ng-show="changed">Cancel
+                        <button type="submit" data-ng-click="cancel()">Cancel
                         </button>
                     </div>
 
@@ -116,7 +115,7 @@
                         </button>
                         <button type="submit" data-ng-click="reset()" data-ng-show="changed">Clear changes
                         </button>
-                        <button type="submit" data-ng-click="remove()" class="destructive">
+                        <button type="submit" data-ng-click="remove()" class="destructive" data-ng-hide="changed">
                             Delete
                         </button>
                     </div>
diff --git a/admin-ui/src/main/resources/META-INF/resources/admin/partials/application-list.html b/admin-ui/src/main/resources/META-INF/resources/admin/partials/application-list.html
index 51d0f13..16a1697 100755
--- a/admin-ui/src/main/resources/META-INF/resources/admin/partials/application-list.html
+++ b/admin-ui/src/main/resources/META-INF/resources/admin/partials/application-list.html
@@ -16,14 +16,15 @@
                 <div class="feedback info inline" data-ng-show="!applications || applications.length == 0">
                     <p><strong>You have not configured applications.</strong> <a class="button" href="#/create/application/{{realm.id}}">Add Application</a></p>
                 </div>
-                <table>
+                <table data-ng-hide="applications.length == 0">
                     <thead>
                     <tr>
                         <th class="rcue-table-actions" colspan="3">
                             <div class="search-comp clearfix">
-                                <input type="text" placeholder="Search..." class="search">
-                                <button class="icon-search tooltipRightTrigger"
-                                        data-original-title="Search by application name.">
+                                <input type="text" placeholder="Search..." class="search"
+                                       onkeyup="if(event.keyCode == 13){$(this).next('button').click();}">
+                                <button class="icon-search" tooltip-placement="right"
+                                        tooltip="Search by application name.">
                                     Icon: search
                                 </button>
                             </div>
@@ -32,7 +33,7 @@
                             </div>
                         </th>
                     </tr>
-                    <tr>
+                    <tr data-ng-show="applications.length > 0">
                         <th>Application Name</th>
                         <th>Enabled</th>
                         <th>Base URL</th>
@@ -58,7 +59,7 @@
                     </tr>
                     </tbody>
                 </table>
-                <div class="feedback warning inline">
+                <div class="feedback warning inline" data-ng-show="search && applications.length == 0">
                     <p><strong>Your search returned no results.</strong><br>Try modifying the query and try again.</p>
                 </div>
             </div>
diff --git a/admin-ui/src/main/resources/META-INF/resources/admin/partials/application-role-list.html b/admin-ui/src/main/resources/META-INF/resources/admin/partials/application-role-list.html
index fc38d64..2db42a2 100755
--- a/admin-ui/src/main/resources/META-INF/resources/admin/partials/application-role-list.html
+++ b/admin-ui/src/main/resources/META-INF/resources/admin/partials/application-role-list.html
@@ -40,8 +40,8 @@
                             <th class="rcue-table-actions" colspan="2">
                                 <div class="search-comp clearfix">
                                     <input type="text" placeholder="Search..." class="search">
-                                    <button class="icon-search tooltipRightTrigger"
-                                            data-original-title="Search by role name.">
+                                    <button class="icon-search" tooltip-placement="right"
+                                            tooltip="Search by role name.">
                                         Icon: search
                                     </button>
                                 </div>
diff --git a/admin-ui/src/main/resources/META-INF/resources/admin/partials/application-scope-mappings.html b/admin-ui/src/main/resources/META-INF/resources/admin/partials/application-scope-mappings.html
index 2c538a1..6ca4b0b 100755
--- a/admin-ui/src/main/resources/META-INF/resources/admin/partials/application-scope-mappings.html
+++ b/admin-ui/src/main/resources/META-INF/resources/admin/partials/application-scope-mappings.html
@@ -35,8 +35,8 @@
                                     </select>
                                 </div>
                                 <div class="middle-buttons">
-                                    <button type="submit" ng-click="addRealmRole()" data-original-title="Move right" class="tooltipRightTrigger"><span class="icon-arrow-right">Move right</span></button>
-                                    <button type="submit" ng-click="deleteRealmRole()" data-original-title="Move left" class="tooltipRightTrigger"><span class="icon-arrow-left">Move left</span></button>
+                                    <button type="submit" ng-click="addRealmRole()" tooltip="Move right" tooltip-placement="right"><span class="icon-arrow-right">Move right</span></button>
+                                    <button type="submit" ng-click="deleteRealmRole()" tooltip="Move left" tooltip-placement="right"><span class="icon-arrow-left">Move left</span></button>
                                 </div>
                                 <div class="select-title">
                                     <label for="assigned">Assigned Roles</label>
@@ -57,11 +57,12 @@
                             <div class="input-group">
                                 <div class="select-rcue">
                                     <select id="applications" name="applications" ng-change="changeApplication()" ng-model="targetApp" ng-options="a.name for a in applications">
+                                        <option value="" selected> Select an Application </option>
                                     </select>
                                 </div>
                             </div>
                         </div>
-                        <div class="form-group">
+                        <div class="form-group" ng-show="targetApp">
                             <div class="controls changing-selectors application">
                                 <div class="select-title">
                                     <label for="app-available">Available Roles</label>
@@ -72,8 +73,8 @@
                                     </select>
                                 </div>
                                 <div class="middle-buttons">
-                                    <button type="submit" ng-click="addApplicationRole()" data-original-title="Move right" class="tooltipRightTrigger"><span class="icon-arrow-right">Move right</span></button>
-                                    <button type="submit" ng-click="deleteApplicationRole()" data-original-title="Move left" class="tooltipRightTrigger"><span class="icon-arrow-left">Move left</span></button>
+                                    <button type="submit" ng-click="addApplicationRole()" tooltip="Move right" tooltip-placement="right"><span class="icon-arrow-right">Move right</span></button>
+                                    <button type="submit" ng-click="deleteApplicationRole()" tooltip="Move left" tooltip-placement="right"><span class="icon-arrow-left">Move left</span></button>
                                 </div>
                                 <div class="select-title">
                                     <label for="app-assigned">Assigned Roles</label>
diff --git a/admin-ui/src/main/resources/META-INF/resources/admin/partials/realm-detail.html b/admin-ui/src/main/resources/META-INF/resources/admin/partials/realm-detail.html
index 551fc7c..1567a2f 100755
--- a/admin-ui/src/main/resources/META-INF/resources/admin/partials/realm-detail.html
+++ b/admin-ui/src/main/resources/META-INF/resources/admin/partials/realm-detail.html
@@ -119,8 +119,7 @@
                     <div class="form-actions" data-ng-show="createRealm">
                         <button type="submit" data-ng-click="save()" class="primary" data-ng-show="changed">Save
                         </button>
-                        <button type="submit" data-ng-click="cancel()" data-ng-click="cancel()"
-                                data-ng-show="changed">Cancel
+                        <button type="submit" data-ng-click="cancel()">Cancel
                         </button>
                     </div>
 
diff --git a/admin-ui/src/main/resources/META-INF/resources/admin/partials/realm-tokens.html b/admin-ui/src/main/resources/META-INF/resources/admin/partials/realm-tokens.html
index ccaaec1..b87cf6d 100755
--- a/admin-ui/src/main/resources/META-INF/resources/admin/partials/realm-tokens.html
+++ b/admin-ui/src/main/resources/META-INF/resources/admin/partials/realm-tokens.html
@@ -48,6 +48,20 @@
                                 </div>
                             </div>
                         </div>
+                        <div class="form-group input-select">
+                            <label for="accessCodeLifespanUserAction">Access code user action lifespan</label>
+                            <div class="input-group">
+                                <input type="text" data-ng-model="realm.accessCodeLifespanUserAction" id="accessCodeLifespanUserAction" name="accessCodeLifespanUserAction" class="tiny">
+                                <div class="select-rcue">
+                                    <select name="accessCodeLifespanUserActionUnit" data-ng-model="realm.accessCodeLifespanUserActionUnit">
+                                        <option data-ng-selected="!realm.accessCodeLifespanUserActionUnit">Seconds</option>
+                                        <option>Minutes</option>
+                                        <option>Hours</option>
+                                        <option>Days</option>
+                                    </select>
+                                </div>
+                            </div>
+                        </div>
                      </fieldset>
                     <div class="form-actions">
                         <button type="submit" data-ng-click="save()" class="primary" data-ng-show="changed">Save
diff --git a/admin-ui/src/main/resources/META-INF/resources/admin/partials/role-list.html b/admin-ui/src/main/resources/META-INF/resources/admin/partials/role-list.html
index c1cb8fa..bc006d1 100755
--- a/admin-ui/src/main/resources/META-INF/resources/admin/partials/role-list.html
+++ b/admin-ui/src/main/resources/META-INF/resources/admin/partials/role-list.html
@@ -36,8 +36,8 @@
                             <th class="rcue-table-actions" colspan="2">
                                 <div class="search-comp clearfix">
                                     <input type="text" placeholder="Search..." class="search">
-                                    <button class="icon-search tooltipRightTrigger"
-                                            data-original-title="Search by role name.">
+                                    <button class="icon-search" tooltip-placement="right"
+                                            tooltip="Search by role name.">
                                         Icon: search
                                     </button>
                                 </div>
diff --git a/admin-ui/src/main/resources/META-INF/resources/admin/partials/role-mappings.html b/admin-ui/src/main/resources/META-INF/resources/admin/partials/role-mappings.html
index 33b8a25..642808f 100755
--- a/admin-ui/src/main/resources/META-INF/resources/admin/partials/role-mappings.html
+++ b/admin-ui/src/main/resources/META-INF/resources/admin/partials/role-mappings.html
@@ -6,7 +6,7 @@
                 <ul class="rcue-tabs" >
                     <li><a href="#/realms/{{realm.id}}/users/{{user.username}}">Attributes</a></li>
                     <li><a href="#">Credentials</a></li>
-                    <li class="active"><a href="#">Role Mappings</a></li>
+                    <li class="active"><a href="#/realms/{{realm.id}}/users/{{user.username}}/role-mappings">Role Mappings</a></li>
                 </ul>
             </div>
             <div id="content">
@@ -32,8 +32,8 @@
                                     </select>
                                 </div>
                                 <div class="middle-buttons">
-                                    <button type="submit" ng-click="addRealmRole()" data-original-title="Move right" class="tooltipRightTrigger"><span class="icon-arrow-right">Move right</span></button>
-                                    <button type="submit" ng-click="deleteRealmRole()" data-original-title="Move left" class="tooltipRightTrigger"><span class="icon-arrow-left">Move left</span></button>
+                                    <button type="submit" ng-click="addRealmRole()" tooltip="Move right" tooltip-placement="right"><span class="icon-arrow-right">Move right</span></button>
+                                    <button type="submit" ng-click="deleteRealmRole()" tooltip="Move left" tooltip-placement="right"><span class="icon-arrow-left">Move left</span></button>
                                 </div>
                                 <div class="select-title">
                                     <label for="assigned">Assigned Roles</label>
@@ -54,6 +54,7 @@
                             <div class="input-group">
                                 <div class="select-rcue">
                                     <select id="applications" name="applications" ng-change="changeApplication()" ng-model="application" ng-options="a.name for a in applications">
+                                        <option value="" selected> Select an Application...</option>
                                     </select>
                                 </div>
                             </div>
@@ -69,8 +70,8 @@
                                     </select>
                                 </div>
                                 <div class="middle-buttons">
-                                    <button type="submit" ng-click="addApplicationRole()" data-original-title="Move right" class="tooltipRightTrigger"><span class="icon-arrow-right">Move right</span></button>
-                                    <button type="submit" ng-click="deleteApplicationRole()" data-original-title="Move left" class="tooltipRightTrigger"><span class="icon-arrow-left">Move left</span></button>
+                                    <button type="submit" ng-click="addApplicationRole()" tooltip="Move right" tooltip-placement="right"><span class="icon-arrow-right">Move right</span></button>
+                                    <button type="submit" ng-click="deleteApplicationRole()" tooltip="Move left" tooltip-placement="right"><span class="icon-arrow-left">Move left</span></button>
                                 </div>
                                 <div class="select-title">
                                     <label for="assigned-app">Assigned Roles</label>
diff --git a/admin-ui/src/main/resources/META-INF/resources/admin/partials/user-detail.html b/admin-ui/src/main/resources/META-INF/resources/admin/partials/user-detail.html
index d4b11f9..55898e6 100755
--- a/admin-ui/src/main/resources/META-INF/resources/admin/partials/user-detail.html
+++ b/admin-ui/src/main/resources/META-INF/resources/admin/partials/user-detail.html
@@ -9,7 +9,7 @@
             </div>
             <div class="top-nav" data-ng-show="!create">
                 <ul class="rcue-tabs" >
-                    <li class="active"><a href="#">Attributes</a></li>
+                    <li class="active"><a href="#/realms/{{realm.id}}/users/{{user.username}}">Attributes</a></li>
                     <li><a href="#">Credentials</a></li>
                     <li><a href="#/realms/{{realm.id}}/users/{{user.username}}/role-mappings">Role Mappings</a></li>
                 </ul>
@@ -67,10 +67,9 @@
                         </div>
                     </fieldset>
                     <div class="form-actions" data-ng-show="create">
-                        <button type="submit" data-ng-click="save()" class="primary">Save
+                        <button type="submit" data-ng-click="save()" class="primary" data-ng-show="changed">Save
                         </button>
-                        <button type="submit" data-ng-click="cancel()" data-ng-click="cancel()"
-                                data-ng-show="changed">Cancel
+                        <button type="submit" data-ng-click="cancel()">Cancel
                         </button>
                     </div>
 
@@ -79,7 +78,7 @@
                         </button>
                         <button type="submit" data-ng-click="reset()" data-ng-show="changed">Clear changes
                         </button>
-                        <button type="submit" data-ng-click="remove()" class="destructive">
+                        <button type="submit" data-ng-click="remove()" class="destructive" data-ng-hide="changed">
                             Delete
                         </button>
                     </div>
diff --git a/admin-ui/src/main/resources/META-INF/resources/admin/partials/user-list.html b/admin-ui/src/main/resources/META-INF/resources/admin/partials/user-list.html
index 541aa95..6906b59 100755
--- a/admin-ui/src/main/resources/META-INF/resources/admin/partials/user-list.html
+++ b/admin-ui/src/main/resources/META-INF/resources/admin/partials/user-list.html
@@ -19,10 +19,11 @@
                         <tr>
                             <th class="rcue-table-actions" colspan="4">
                                 <div class="search-comp clearfix">
-                                    <input type="text" placeholder="Search..." data-ng-model="search" class="search">
-                                    <button data-ng-click="searchQuery()"
-                                            class="icon-search tooltipRightTrigger"
-                                            data-original-title="Search by full name, last name, email, or username.">
+                                    <input type="text" placeholder="Search..." data-ng-model="search" class="search"
+                                           onkeyup="if(event.keyCode == 13){$(this).next('button').click();}">
+                                    <button data-ng-click="searchQuery()" type="submit"
+                                            class="icon-search" tooltip-placement="right"
+                                            tooltip="Search by full name, last name, email, or username.">
                                         Icon: search
                                     </button>
                                 </div>
@@ -32,7 +33,7 @@
                             </th>
                         </tr>
                         <tr>
-                            <tr data-ng-show="users && search">
+                            <tr data-ng-show="users.length > 0">
                                 <th>Username</th>
                                 <th>Last Name</th>
                                 <th>First Name</th>
@@ -61,7 +62,7 @@
                     </tr>
                     </tbody>
                 </table>
-                <div class="feedback warning inline">
+                <div class="feedback warning inline" data-ng-show="users.length == 0">
                     <p><strong>Your search returned no results.</strong><br>Try modifying the query and try again.</p>
                 </div>
             </div>
diff --git a/admin-ui-styles/src/main/resources/META-INF/resources/admin-ui/css/admin-console.css b/admin-ui-styles/src/main/resources/META-INF/resources/admin-ui/css/admin-console.css
index 87592b6..c339f2f 100644
--- a/admin-ui-styles/src/main/resources/META-INF/resources/admin-ui/css/admin-console.css
+++ b/admin-ui-styles/src/main/resources/META-INF/resources/admin-ui/css/admin-console.css
@@ -25,22 +25,22 @@ body {
 }
 .alert.alert-success {
   border-color: #4b9e39;
-  background-image: url(img/feedback-success-sign.svg);
+  background-image: url(img/feedback-success-sign.png);
   background-color: #e4f1e1;
 }
 .alert.alert-error {
   border-color: #b91415;
-  background-image: url(img/feedback-error-sign.svg);
+  background-image: url(img/feedback-error-sign.png);
   background-color: #f8e7e7;
 }
 .alert.alert-warning {
   border-color: #f17528;
-  background-image: url(img/feedback-warning-sign.svg);
+  background-image: url(img/feedback-warning-sign.png);
   background-color: #fef1e9;
 }
 .alert.alert-info {
   border-color: #5994b2;
-  background-image: url(img/feedback-info-sign.svg);
+  background-image: url(img/feedback-info-sign.png);
   background-color: #e4f3fa;
 }
 /* Header */
@@ -65,9 +65,39 @@ body {
   min-height: 42px;
   max-width: 1170px;
 }
+.header.rcue .navbar.primary .select-rcue {
+  font-size: 0.76923076923077em;
+  margin-left: 1em;
+  margin-top: 0.7em;
+  display: inline-block;
+  vertical-align: middle;
+  background-color: #555a5e;
+  background-image: none;
+  background-image: url(img/sprite-arrow-down.png);
+  background-repeat: no-repeat;
+  background-position: right -26px;
+  border: 1px solid #676c6e;
+  border-radius: 2px;
+  padding-left: 0;
+}
+.header.rcue .navbar.primary .select-rcue:hover {
+  border-color: #7e8385;
+}
+.header.rcue .navbar.primary .select-rcue select {
+  color: #fff;
+}
+.header.rcue .navbar.primary .select-rcue select:-moz-focusring {
+  color: transparent;
+  text-shadow: 0 0 0 #fff;
+}
+.header.rcue .navbar.primary .select-rcue select option {
+  background-color: #fff;
+  color: #333;
+  padding: 0.36363636363636em 0.90909090909091em;
+}
 .header.rcue .navbar.primary .nav > li {
   /*
-            .dropdown {
+            .dropdown { 
                 display: inline-block;
                 margin-left: 0.53846153846154em;
                 margin-top: 0.46153846153846em;
@@ -402,7 +432,7 @@ table + .feedback.inline.warning {
 .tooltip-box {
   position: absolute;
   font-size: 1em;
-  background-image: url("img/tooltip-box-arrow-right-up.svg");
+  background-image: url("img/tooltip-box-arrow-right-up.png");
   background-position: right top;
   background-repeat: no-repeat;
   padding-top: 1em;
diff --git a/admin-ui-styles/src/main/resources/META-INF/resources/admin-ui/css/admin-console.less b/admin-ui-styles/src/main/resources/META-INF/resources/admin-ui/css/admin-console.less
index 546bf87..4cca051 100644
--- a/admin-ui-styles/src/main/resources/META-INF/resources/admin-ui/css/admin-console.less
+++ b/admin-ui-styles/src/main/resources/META-INF/resources/admin-ui/css/admin-console.less
@@ -37,25 +37,25 @@ body {
     
     &.alert-success {
         border-color: #4b9e39;
-        background-image: url(img/feedback-success-sign.svg);
+        background-image: url(img/feedback-success-sign.png);
         background-color: #e4f1e1;
     }
     
     &.alert-error {
         border-color: #b91415;
-        background-image: url(img/feedback-error-sign.svg);
+        background-image: url(img/feedback-error-sign.png);
         background-color: #f8e7e7;
     }
     
     &.alert-warning {
         border-color: #f17528;
-        background-image: url(img/feedback-warning-sign.svg);
+        background-image: url(img/feedback-warning-sign.png);
         background-color: #fef1e9;
     }
     
     &.alert-info {
         border-color: #5994b2;
-        background-image: url(img/feedback-info-sign.svg);
+        background-image: url(img/feedback-info-sign.png);
         background-color: #e4f3fa;
     }
 }
@@ -88,6 +88,41 @@ body {
             min-height: 42px;
             max-width: 1170px;
         }
+
+        .select-rcue {
+            font-size: 0.76923076923077em;
+            margin-left: 1em;
+            margin-top: 0.7em;
+            display: inline-block;
+            vertical-align: middle;
+            background-color: #555a5e;
+            background-image: none;
+            background-image: url(img/sprite-arrow-down.png);
+            background-repeat: no-repeat;
+            background-position: right -26px;
+            border: 1px solid #676c6e;
+            border-radius: 2px;
+            padding-left: 0;
+            
+            &:hover {
+                border-color: #7e8385;
+            }
+            
+            select {
+                color: #fff;
+                
+                &:-moz-focusring {
+                    color: transparent;
+                    text-shadow: 0 0 0 #fff;
+                }
+                
+                option {
+                    background-color: #fff;
+                    color: #333;
+                    padding: 0.36363636363636em 0.90909090909091em;
+                }
+            }
+        }
         
         .nav > li {
         
@@ -161,7 +196,7 @@ body {
             }
             
     /*
-            .dropdown {
+            .dropdown { 
                 display: inline-block;
                 margin-left: 0.53846153846154em;
                 margin-top: 0.46153846153846em;
@@ -488,7 +523,7 @@ table {
 .tooltip-box {
     position: absolute;
     font-size: 1em;
-    background-image: url("img/tooltip-box-arrow-right-up.svg");
+    background-image: url("img/tooltip-box-arrow-right-up.png");
     background-position: right top;
     background-repeat: no-repeat;
     padding-top: 1em;
@@ -778,4 +813,4 @@ table.list {
         border: none;
         width: 100%;
     }
-}
\ No newline at end of file
+}
diff --git a/admin-ui-styles/src/main/resources/META-INF/resources/admin-ui/css/forms.css b/admin-ui-styles/src/main/resources/META-INF/resources/admin-ui/css/forms.css
index 58b6e05..8d99830 100644
--- a/admin-ui-styles/src/main/resources/META-INF/resources/admin-ui/css/forms.css
+++ b/admin-ui-styles/src/main/resources/META-INF/resources/admin-ui/css/forms.css
@@ -319,29 +319,29 @@ button.primary:focus,
   background-position: 1.27272727272727em 1.63636363636364em;
 }
 .feedback.error {
-  background-image: url(img/feedback-error-arrow-down.svg);
+  background-image: url(img/feedback-error-arrow-down.png);
 }
 .feedback.error p {
   border-color: #b91415;
-  background-image: url(img/feedback-error-sign.svg);
+  background-image: url(img/feedback-error-sign.png);
   background-color: #f8e7e7;
 }
 .feedback.success {
-  background-image: url(img/feedback-success-arrow-down.svg);
+  background-image: url(img/feedback-success-arrow-down.png);
 }
 .feedback.success p {
   border-color: #4b9e39;
-  background-image: url(img/feedback-success-sign.svg);
+  background-image: url(img/feedback-success-sign.png);
   background-color: #e4f1e1;
 }
 .feedback.warning p {
   border-color: #f17528;
-  background-image: url(img/feedback-warning-sign.svg);
+  background-image: url(img/feedback-warning-sign.png);
   background-color: #fef1e9;
 }
 .feedback.info p {
   border-color: #5994b2;
-  background-image: url(img/feedback-info-sign.svg);
+  background-image: url(img/feedback-info-sign.png);
   background-color: #e4f3fa;
 }
 .feedback.inline {
diff --git a/admin-ui-styles/src/main/resources/META-INF/resources/admin-ui/css/forms.less b/admin-ui-styles/src/main/resources/META-INF/resources/admin-ui/css/forms.less
index 1b78ae2..c965f0e 100644
--- a/admin-ui-styles/src/main/resources/META-INF/resources/admin-ui/css/forms.less
+++ b/admin-ui-styles/src/main/resources/META-INF/resources/admin-ui/css/forms.less
@@ -358,21 +358,21 @@ button.primary,
     }
 
     &.error {
-        background-image: url(img/feedback-error-arrow-down.svg);
+        background-image: url(img/feedback-error-arrow-down.png);
         
         p {
             border-color: #b91415;
-            background-image: url(img/feedback-error-sign.svg);
+            background-image: url(img/feedback-error-sign.png);
             background-color: #f8e7e7;
         }
     }
     
     &.success {
-        background-image: url(img/feedback-success-arrow-down.svg);
+        background-image: url(img/feedback-success-arrow-down.png);
                 
         p {
             border-color: #4b9e39;
-            background-image: url(img/feedback-success-sign.svg);
+            background-image: url(img/feedback-success-sign.png);
             background-color: #e4f1e1;
         }
     }
@@ -381,7 +381,7 @@ button.primary,
         
         p {
             border-color: #f17528;
-            background-image: url(img/feedback-warning-sign.svg);
+            background-image: url(img/feedback-warning-sign.png);
             background-color: #fef1e9;
         }
         
@@ -391,7 +391,7 @@ button.primary,
         
         p {
             border-color: #5994b2;
-            background-image: url(img/feedback-info-sign.svg);
+            background-image: url(img/feedback-info-sign.png);
             background-color: #e4f3fa;
         }
         
diff --git a/admin-ui-styles/src/main/resources/META-INF/resources/admin-ui/css/img/icon-row-selected.png b/admin-ui-styles/src/main/resources/META-INF/resources/admin-ui/css/img/icon-row-selected.png
new file mode 100644
index 0000000..3832bb2
Binary files /dev/null and b/admin-ui-styles/src/main/resources/META-INF/resources/admin-ui/css/img/icon-row-selected.png differ
diff --git a/core/src/main/java/org/keycloak/representations/idm/RealmRepresentation.java b/core/src/main/java/org/keycloak/representations/idm/RealmRepresentation.java
index 2793053..65281dc 100755
--- a/core/src/main/java/org/keycloak/representations/idm/RealmRepresentation.java
+++ b/core/src/main/java/org/keycloak/representations/idm/RealmRepresentation.java
@@ -104,7 +104,7 @@ public class RealmRepresentation {
         this.enabled = enabled;
     }
 
-    public Boolean isAccountManagement() {
+    public Boolean getAccountManagement() {
         return accountManagement;
     }
 
diff --git a/forms/src/main/resources/META-INF/resources/forms/theme/default/css/login-register.css b/forms/src/main/resources/META-INF/resources/forms/theme/default/css/login-register.css
index 7dcab3d..8fa9b44 100644
--- a/forms/src/main/resources/META-INF/resources/forms/theme/default/css/login-register.css
+++ b/forms/src/main/resources/META-INF/resources/forms/theme/default/css/login-register.css
@@ -51,24 +51,21 @@ body {
 }
 .rcue-login-register .background-area .section {
   float: left;
-  padding: 1.5em 4.5em 1.5em 4.6em;
+  padding: 0 4.5em 0 4.6em;
   width: auto;
   position: relative;
 }
+.rcue-login-register .background-area .separator .section {
+  padding-top: 1.5em;
+  padding-bottom: 1.5em;
+}
 .rcue-login-register .background-area .section h3 {
   display: none;
 }
 .rcue-login-register .background-area .section:first-child {
   padding-right: 4.5em;
 }
-/*
-.rcue-login-register .form-area {
-  background-image: url(img/login-register-separator.png);
-  background-repeat: no-repeat;
-  background-position: 40.2em center;
-}
-*/
-.rcue-login-register.reset .form-area {
+.rcue-login-register .form-area.separator {
   background-image: url(img/login-register-separator.png);
   background-repeat: no-repeat;
   background-position: 43.2em center;
@@ -96,9 +93,7 @@ body {
   font-weight: 400;
 }
 .rcue-login-register label {
-  width: 6.07142857142857em;
-  /* 85px */
-
+  width: 8.21428571428571em;
 }
 .rcue-login-register label.two-lines {
   float: left;
@@ -114,12 +109,8 @@ body {
 .rcue-login-register form > div.aside-btn {
   float: left;
   font-size: 1.1em;
-  margin-left: 7.72727272727273em;
-  /* 85px */
-
+  margin-left: 10.4545454545454em;
   margin-top: 0.90909090909091em;
-  /* 10px */
-
   margin-bottom: 0;
 }
 .rcue-login-register form > div.aside-btn label {
@@ -291,19 +282,13 @@ a.zocial:before {
   color: #0099D3;
 }
 /* Forgot Password page */
-.rcue-login-register.reset .background-area .section {
-  padding-top: 0;
-  padding-bottom: 0;
-}
 .rcue-login-register.reset .background-area .section.app-form {
   width: 43.2em;
 }
-
 .rcue-login-register.oauth .form-actions {
     margin-bottom: 0;
     margin-top: 2em;
 }
-
 .rcue-login-register .background-area .content-area {
     width: 50em;
 }
@@ -360,9 +345,6 @@ a.zocial:before {
   line-height: 1.3em;
   margin-bottom: 1.81818181818182em;
 }
-.rcue-login-register.reset label {
-  width: 8.21428571428571em;
-}
 .rcue-login-register.totp {
   min-height: 0;
 }
diff --git a/forms/src/main/resources/META-INF/resources/forms/theme/default/login-reset-password.ftl b/forms/src/main/resources/META-INF/resources/forms/theme/default/login-reset-password.ftl
index ec8a719..96f8795 100755
--- a/forms/src/main/resources/META-INF/resources/forms/theme/default/login-reset-password.ftl
+++ b/forms/src/main/resources/META-INF/resources/forms/theme/default/login-reset-password.ftl
@@ -23,6 +23,6 @@
         </form>
     </div>
     <#elseif section = "info" >
-        <p><a href="saas-login.html">&laquo; Back to the Login</a></p>
+        <p><a href="#">&laquo; Back to Login</a></p>
     </#if>
 </@layout.registrationLayout>
\ No newline at end of file
diff --git a/services/src/main/java/org/keycloak/services/managers/RealmManager.java b/services/src/main/java/org/keycloak/services/managers/RealmManager.java
index fdb8ea7..1387f12 100755
--- a/services/src/main/java/org/keycloak/services/managers/RealmManager.java
+++ b/services/src/main/java/org/keycloak/services/managers/RealmManager.java
@@ -91,7 +91,7 @@ public class RealmManager {
             realm.updateDefaultRoles(rep.getDefaultRoles());
         }
 
-        if (rep.isAccountManagement()) {
+        if (rep.getAccountManagement() != null && rep.getAccountManagement()) {
             enableAccountManagement(realm);
         } else {
             disableAccountManagement(realm);
@@ -253,7 +253,7 @@ public class RealmManager {
             }
         }
 
-        if (rep.isAccountManagement() != null && rep.isAccountManagement()) {
+        if (rep.getAccountManagement() != null && rep.getAccountManagement()) {
             enableAccountManagement(newRealm);
         }
 
diff --git a/testsuite/integration/src/main/java/org/keycloak/testutils/KeycloakServer.java b/testsuite/integration/src/main/java/org/keycloak/testutils/KeycloakServer.java
index 17e755e..57c5978 100755
--- a/testsuite/integration/src/main/java/org/keycloak/testutils/KeycloakServer.java
+++ b/testsuite/integration/src/main/java/org/keycloak/testutils/KeycloakServer.java
@@ -221,6 +221,10 @@ public class KeycloakServer {
             }
 
             new ApplianceBootstrap().bootstrap(session);
+
+            // No need to require admin to change password as this server is for dev/test
+            manager.getRealm(Constants.ADMIN_REALM).getUser("admin").removeRequiredAction(UserModel.RequiredAction.UPDATE_PASSWORD);
+
             session.getTransaction().commit();
         } finally {
             session.close();