You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@usergrid.apache.org by sn...@apache.org on 2014/03/19 20:21:15 UTC

[05/55] [abbrv] USERGRID-86: Remove restriction on 10 apps in the portal

http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/bf075e6c/portal/js/usergrid-dev.min.js
----------------------------------------------------------------------
diff --git a/portal/js/usergrid-dev.min.js b/portal/js/usergrid-dev.min.js
index fbbf56d..83b8ff6 100644
--- a/portal/js/usergrid-dev.min.js
+++ b/portal/js/usergrid-dev.min.js
@@ -1,4 +1,4 @@
-/*! apigee-usergrid@2.0.34 2014-03-03 */
+/*! apigee-usergrid@2.0.36 2014-03-06 */
 (function(exports, global) {
     global["true"] = exports;
     "use strict";
@@ -42,7 +42,9 @@
     AppServices.Controllers = angular.module("appservices.controllers", []);
     AppServices.Filters = angular.module("appservices.filters", []);
     AppServices.Directives = angular.module("appservices.directives", []);
-    angular.module("appservices", [ "ngRoute", "ngResource", "ngSanitize", "ui.bootstrap", "appservices.filters", "appservices.services", "appservices.directives", "appservices.constants", "appservices.controllers" ]).config([ "$routeProvider", "$locationProvider", "$sceDelegateProvider", function($routeProvider, $locationProvider, $sceDelegateProvider) {
+    AppServices.Performance = angular.module("appservices.performance", []);
+    AppServices.Push = angular.module("appservices.push", []);
+    angular.module("appservices", [ "ngRoute", "ngResource", "ngSanitize", "ui.bootstrap", "angulartics", "angulartics.google.analytics", "appservices.filters", "appservices.services", "appservices.directives", "appservices.constants", "appservices.controllers", "appservices.performance", "appservices.push" ]).config([ "$routeProvider", "$locationProvider", "$sceDelegateProvider", "$analyticsProvider", function($routeProvider, $locationProvider, $sceDelegateProvider, $analyticsProvider) {
         $routeProvider.when("/org-overview", {
             templateUrl: "org-overview/org-overview.html",
             controller: "OrgOverviewCtrl"
@@ -76,6 +78,9 @@
         }).when("/users/activities", {
             templateUrl: "users/users-activities.html",
             controller: "UsersActivitiesCtrl"
+        }).when("/users/feed", {
+            templateUrl: "users/users-feed.html",
+            controller: "UsersFeedCtrl"
         }).when("/users/graph", {
             templateUrl: "users/users-graph.html",
             controller: "UsersGraphCtrl"
@@ -141,6 +146,8 @@
         });
         $locationProvider.html5Mode(false).hashPrefix("!");
         $sceDelegateProvider.resourceUrlWhitelist([ "self", "http://apigee-internal-prod.jupiter.apigee.net/**", "http://apigee-internal-prod.mars.apigee.net/**", "https://appservices.apigee.com/**", "https://api.usergrid.com/**" ]);
+        $analyticsProvider.virtualPageviews(false);
+        $analyticsProvider.firstPageview(false);
     } ]);
     AppServices.Controllers.controller("ActivitiesCtrl", [ "ug", "$scope", "$rootScope", "$location", "$route", function(ug, $scope, $rootScope, $location, $route) {
         $scope.$on("app-activities-received", function(evt, data) {
@@ -1194,7 +1201,7 @@
         ITEMS_URL: "global/temp.json"
     });
     "use strict";
-    AppServices.Controllers.controller("PageCtrl", [ "ug", "utility", "$scope", "$rootScope", "$location", "$routeParams", "$q", "$route", "$log", function(ug, utility, $scope, $rootScope, $location, $routeParams, $q, $route, $log) {
+    AppServices.Controllers.controller("PageCtrl", [ "ug", "utility", "$scope", "$rootScope", "$location", "$routeParams", "$q", "$route", "$log", "$analytics", function(ug, utility, $scope, $rootScope, $location, $routeParams, $q, $route, $log, $analytics) {
         var initScopeVariables = function() {
             $scope.loadingText = "Loading...";
             $scope.use_sso = false;
@@ -1212,6 +1219,7 @@
             $rootScope.demoData = false;
             $scope.queryStringApplied = false;
             $rootScope.autoUpdateTimer = Usergrid.config ? Usergrid.config.autoUpdateTimer : 61;
+            $rootScope.requiresDeveloperKey = Usergrid.config ? Usergrid.config.client.requiresDeveloperKey : false;
             $rootScope.loaded = $rootScope.activeUI = false;
             for (var key in Usergrid.regex) {
                 $scope[key] = Usergrid.regex[key];
@@ -1228,48 +1236,10 @@
         };
         initScopeVariables();
         $rootScope.urls = function() {
-            var BASE_URL = "";
-            var DATA_URL = "";
-            var qs = $location.search();
-            switch (true) {
-              case $location.host() === "appservices.apigee.com" && location.pathname.indexOf("/dit") >= 0:
-                BASE_URL = "https://accounts.jupiter.apigee.net";
-                DATA_URL = "http://apigee-internal-prod.jupiter.apigee.net";
-                $scope.use_sso = true;
-                break;
-
-              case $location.host() === "appservices.apigee.com" && location.pathname.indexOf("/mars") >= 0:
-                BASE_URL = "https://accounts.mars.apigee.net";
-                DATA_URL = "http://apigee-internal-prod.mars.apigee.net";
-                $scope.use_sso = true;
-                break;
-
-              case $location.host() === "appservices.apigee.com":
-                DATA_URL = Usergrid.overrideUrl;
-                break;
-
-              case $location.host() === "apigee.com":
-                BASE_URL = "https://accounts.apigee.com";
-                DATA_URL = "https://api.usergrid.com";
-                $scope.use_sso = true;
-                break;
-
-              case $location.host() === "usergrid.dev":
-                DATA_URL = "https://api.usergrid.com";
-                break;
-
-              default:
-                DATA_URL = Usergrid.overrideUrl;
-                break;
-            }
-            DATA_URL = qs.api_url || DATA_URL;
-            $scope.apiUrl = DATA_URL = DATA_URL.lastIndexOf("/") === DATA_URL.length - 1 ? DATA_URL.substring(0, DATA_URL.length - 1) : DATA_URL;
-            return {
-                DATA_URL: DATA_URL,
-                LOGIN_URL: BASE_URL + "/accounts/sign_in",
-                PROFILE_URL: BASE_URL + "/accounts/my_account",
-                LOGOUT_URL: BASE_URL + "/accounts/sign_out"
-            };
+            var urls = ug.getUrls();
+            $scope.apiUrl = urls.apiUrl;
+            $scope.use_sso = urls.use_sso;
+            return urls;
         };
         $rootScope.gotoPage = function(path) {
             $location.path(path);
@@ -1497,12 +1467,19 @@
         $scope.$on("request-times-slow", function(evt, averageRequestTimes) {
             $rootScope.$broadcast("alert", "info", "We are experiencing performance issues on our server.  Please click Get Help for support if this continues.");
         });
+        var lastPage = "";
         $scope.$on("$routeChangeSuccess", function() {
             verifyUser();
             $scope.showDemoBar = $location.path().slice(0, "/performance".length) === "/performance";
             if (!$scope.showDemoBar) {
                 $rootScope.demoData = false;
             }
+            setTimeout(function() {
+                lastPage = "";
+            }, 50);
+            var path = window.location.pathname.replace("index-debug.html", "");
+            lastPage === "" && $analytics.pageTrack((path + $location.path()).replace("//", "/"));
+            lastPage = $location.path();
         });
         $scope.$on("applications-received", function(event, applications) {
             $scope.applications = applications;
@@ -1538,9 +1515,18 @@
         };
     } ]);
     "use strict";
-    AppServices.Services.factory("ug", function(configuration, $rootScope, utility, $q, $http, $resource, $log) {
+    AppServices.Services.factory("ug", function(configuration, $rootScope, utility, $q, $http, $resource, $log, $analytics, $location) {
         var requestTimes = [], running = false, currentRequests = {};
-        function reportError(data, config) {}
+        function reportError(data, config) {
+            try {
+                $analytics.eventTrack("error", {
+                    category: "App Services",
+                    label: data + ":" + config.url + ":" + (sessionStorage["apigee_uuid"] || "na")
+                });
+            } catch (e) {
+                console.log(e);
+            }
+        }
         var getAccessToken = function() {
             return sessionStorage.getItem("accessToken");
         };
@@ -1551,6 +1537,54 @@
             set: function(prop, value) {
                 this.client().set(prop, value);
             },
+            getUrls: function() {
+                var host = $location.host();
+                var qs = $location.search();
+                var BASE_URL = "";
+                var DATA_URL = "";
+                var use_sso = false;
+                switch (true) {
+                  case host === "appservices.apigee.com" && location.pathname.indexOf("/dit") >= 0:
+                    BASE_URL = "https://accounts.jupiter.apigee.net";
+                    DATA_URL = "http://apigee-internal-prod.jupiter.apigee.net";
+                    use_sso = true;
+                    break;
+
+                  case host === "appservices.apigee.com" && location.pathname.indexOf("/mars") >= 0:
+                    BASE_URL = "https://accounts.mars.apigee.net";
+                    DATA_URL = "http://apigee-internal-prod.mars.apigee.net";
+                    use_sso = true;
+                    break;
+
+                  case host === "appservices.apigee.com":
+                    DATA_URL = Usergrid.overrideUrl;
+                    break;
+
+                  case host === "apigee.com":
+                    BASE_URL = "https://accounts.apigee.com";
+                    DATA_URL = "https://api.usergrid.com";
+                    use_sso = true;
+                    break;
+
+                  case host === "usergrid.dev":
+                    DATA_URL = "https://api.usergrid.com";
+                    break;
+
+                  default:
+                    DATA_URL = Usergrid.overrideUrl;
+                    break;
+                }
+                DATA_URL = qs.api_url || DATA_URL;
+                DATA_URL = DATA_URL.lastIndexOf("/") === DATA_URL.length - 1 ? DATA_URL.substring(0, DATA_URL.length - 1) : DATA_URL;
+                return {
+                    DATA_URL: DATA_URL,
+                    LOGIN_URL: BASE_URL + "/accounts/sign_in",
+                    PROFILE_URL: BASE_URL + "/accounts/my_account",
+                    LOGOUT_URL: BASE_URL + "/accounts/sign_out",
+                    apiUrl: DATA_URL,
+                    use_sso: use_sso
+                };
+            },
             orgLogin: function(username, password) {
                 var self = this;
                 this.client().set("email", username);
@@ -1579,7 +1613,6 @@
                         for (key in $rootScope.applications) {
                             if ($rootScope.applications.hasOwnProperty(key)) size++;
                         }
-                        $rootScope.addApplications = size < 10;
                         $rootScope.$broadcast("checkAuthentication-success", client.getObject("organizations"), client.getObject("applications"), client.get("orgName"), client.get("appName"), client.get("email"));
                     });
                 }, isAuthenticated = function() {
@@ -1657,6 +1690,9 @@
                 this._client = this._client || new Usergrid.Client(options, $rootScope.urls().DATA_URL);
                 return this._client;
             },
+            setClientProperty: function(key, value) {
+                this.client().set(key, value);
+            },
             getTopCollections: function() {
                 var options = {
                     method: "GET",
@@ -1953,7 +1989,9 @@
             getIndexes: function(path) {
                 var options = {
                     method: "GET",
-                    endpoint: path + "/indexes"
+                    endpoint: path.split("/").concat("indexes").filter(function(bit) {
+                        return bit && bit.length;
+                    }).join("/")
                 };
                 this.client().request(options, function(err, data) {
                     if (err) {
@@ -2419,8 +2457,9 @@
                     $rootScope.$broadcast("app-activities-received", data.entities);
                 });
             },
-            getEntityActivities: function(entity) {
-                var endpoint = entity.get("type") + "/" + entity.get("uuid") + "/activities";
+            getEntityActivities: function(entity, isFeed) {
+                var route = isFeed ? "feed" : "activities";
+                var endpoint = entity.get("type") + "/" + entity.get("uuid") + "/" + route;
                 var options = {
                     method: "GET",
                     endpoint: endpoint,
@@ -2430,12 +2469,12 @@
                 };
                 this.client().request(options, function(err, data) {
                     if (err) {
-                        $rootScope.$broadcast(entity.get("type") + "-activities-error", data);
+                        $rootScope.$broadcast(entity.get("type") + "-" + route + "-error", data);
                     }
                     data.entities.forEach(function(entityInstance) {
                         entityInstance.createdDate = new Date(entityInstance.created).toUTCString();
                     });
-                    $rootScope.$broadcast(entity.get("type") + "-activities-received", data.entities);
+                    $rootScope.$broadcast(entity.get("type") + "-" + route + "-received", data.entities);
                 });
             },
             addUserActivity: function(user, content) {
@@ -3172,6 +3211,7 @@
         $scope.loading = false;
         $scope.login = {};
         $scope.activation = {};
+        $scope.requiresDeveloperKey = $scope.options.client.requiresDeveloperKey || false;
         $rootScope.gotoForgotPasswordPage = function() {
             $location.path("/forgot-password");
         };
@@ -3192,8 +3232,9 @@
         });
         $scope.logout = function() {
             ug.logout();
+            ug.setClientProperty("developerkey", null);
             if ($scope.use_sso) {
-                window.location = $rootScope.urls().LOGOUT_URL + "?callback=" + encodeURIComponent($location.absUrl().split("?")[0]);
+                window.location = $rootScope.urls().LOGOUT_URL + "?redirect=no&callback=" + encodeURIComponent($location.absUrl().split("?")[0]);
             } else {
                 $location.path("/login");
                 $scope.applyScope();
@@ -3208,6 +3249,9 @@
         });
         $scope.$on("loginSuccesful", function(event, user, organizations, applications) {
             $scope.loading = false;
+            if ($scope.requiresDeveloperKey) {
+                ug.setClientProperty("developerkey", $scope.login.developerkey);
+            }
             $scope.login = {};
             if ($rootScope.currentPath === "/login" || $rootScope.currentPath === "/login/loading" || typeof $rootScope.currentPath === "undefined") {
                 $location.path("/org-overview");
@@ -3488,7 +3532,6 @@
                     for (key in applications) {
                         if (applications.hasOwnProperty(key)) size++;
                     }
-                    scope.addApplications = size < 10;
                     scope.hasApplications = Object.keys(applications).length > 0;
                     if (!scope.myApp.currentApp) {
                         $rootScope.currentApp = scope.myApp.currentApp = ug.get("appName");
@@ -4333,7 +4376,7 @@
         $templateCache.put("dialogs/modal.html", '    <div class="modal show fade" tabindex="-1" role="dialog" aria-hidden="true">\n' + '        <form ng-submit="extraDelegate(extrabutton)" name="dialogForm" novalidate>\n' + "\n" + '        <div class="modal-header">\n' + '            <h1 class="title">{{title}}</h1>\n' + "        </div>\n" + "\n" + '        <div class="modal-body" ng-transclude></div>\n' + '        <div class="modal-footer">\n' + "            {{footertext}}\n" + '            <input type="submit" class="btn" id="dialogButton-{{buttonId}}" ng-if="extrabutton" ng-disabled="!dialogForm.$valid" aria-hidden="true" ng-value="extrabuttonlabel"/>\n' + '            <button class="btn cancel pull-left" data-dismiss="modal" aria-hidden="true"\n' + '                    ng-click="closeDelegate(close)">{{closelabel}}\n' + "            </button>\n" + "        </div>\n" + "        </form>    </div>\n");
         $templateCache.put("global/appswitcher-template.html", '<li id="globalNav" class="dropdown dropdownContainingSubmenu active">\n' + '  <a class="dropdown-toggle" data-toggle="dropdown">API Platform<b class="caret"></b></a>\n' + '  <ul class="dropdown-menu pull-right">\n' + '    <li id="globalNavSubmenuContainer">\n' + "      <ul>\n" + '        <li data-globalNavDetail="globalNavDetailApigeeHome"><a target="_blank" href="http://apigee.com">Apigee Home</a></li>\n' + '        <li data-globalNavDetail="globalNavDetailAppServices" class="active"><a target="_blank" href="https://apigee.com/usergrid/">App Services</a></li>\n' + '        <li data-globalNavDetail="globalNavDetailApiPlatform" ><a target="_blank" href="https://enterprise.apigee.com">API Platform</a></li>\n' + '        <li data-globalNavDetail="globalNavDetailApiConsoles"><a target="_blank" href="http://apigee.com/providers">API Consoles</a></li>\n' + "      </ul>\n" + "    </li>\n" + '    <li id="globalNavDetail">\n' + 
 '      <div id="globalNavDetailApigeeHome">\n' + '        <div class="globalNavDetailApigeeLogo"></div>\n' + '        <div class="globalNavDetailDescription">You need apps and apps need APIs. Apigee is the leading API platform for enterprises and developers.</div>\n' + "      </div>\n" + '      <div id="globalNavDetailAppServices">\n' + '        <div class="globalNavDetailSubtitle">For App Developers</div>\n' + '        <div class="globalNavDetailTitle">App Services</div>\n' + '        <div class="globalNavDetailDescription">Build engaging applications, store data, manage application users, and more.</div>\n' + "      </div>\n" + '      <div id="globalNavDetailApiPlatform">\n' + '        <div class="globalNavDetailSubtitle">For API Developers</div>\n' + '        <div class="globalNavDetailTitle">API Platform</div>\n' + '        <div class="globalNavDetailDescription">Create, configure, manage and analyze your APIs and resources.</div>\n' + "      </div>\n" + '      <div id="globalNa
 vDetailApiConsoles">\n' + '        <div class="globalNavDetailSubtitle">For API Developers</div>\n' + '        <div class="globalNavDetailTitle">API Consoles</div>\n' + '        <div class="globalNavDetailDescription">Explore over 100 APIs with the Apigee API Console, or create and embed your own API Console.</div>\n' + "      </div>\n" + "    </li>\n" + "  </ul>\n" + "</li>");
         $templateCache.put("global/insecure-banner.html", '<div ng-if="securityWarning" ng-cloak class="demo-holder">\n' + '    <div class="alert alert-demo alert-animate">\n' + '        <div class="alert-text">\n' + '            <i class="pictogram">&#9888;</i>Warning: This application has "sandbox" permissions and is not production ready. <a target="_blank" href="http://apigee.com/docs/app-services/content/securing-your-app">Please go to our security documentation to find out more.</a></span>\n' + "        </div>\n" + "    </div>\n" + "</div>");
-        $templateCache.put("global/page-title.html", '<section class="row-fluid">\n' + '    <div class="span12">\n' + '        <div class="page-filters">\n' + '            <h1 class="title pull-left" id="pageTitle"><i class="pictogram title" style="padding-right: 5px;">{{icon}}</i>{{title}} <a class="super-help" href="#" ng-click="showHelp()"  >(need help?)</a></h1>\n' + "        </div>\n" + "    </div>\n" + '    <bsmodal id="need-help"\n' + '             title="Need Help?"\n' + '             close="hideModal"\n' + '             closelabel="Cancel"\n' + '             extrabutton="sendHelp"\n' + '             extrabuttonlabel="Get Help"\n' + "             ng-cloak>\n" + "        <p>Do you want to contact support? Support will get in touch with you as soon as possible.</p>\n" + "    </bsmodal>\n" + "</section>\n" + "\n");
+        $templateCache.put("global/page-title.html", '<section class="row-fluid">\n' + '    <div class="span12">\n' + '        <div class="page-filters">\n' + '            <h1 class="title pull-left" id="pageTitle"><i class="pictogram title" style="padding-right: 5px;">{{icon}}</i>{{title}} <a class="super-help" href="http://community.apigee.com/content/apigee-customer-support" target="_blank"  >(need help?)</a></h1>\n' + "        </div>\n" + "    </div>\n" + '    <bsmodal id="need-help"\n' + '             title="Need Help?"\n' + '             close="hideModal"\n' + '             closelabel="Cancel"\n' + '             extrabutton="sendHelp"\n' + '             extrabuttonlabel="Get Help"\n' + "             ng-cloak>\n" + "        <p>Do you want to contact support? Support will get in touch with you as soon as possible.</p>\n" + "    </bsmodal>\n" + "</section>\n" + "\n");
         $templateCache.put("groups/groups-activities.html", '<div class="content-page" ng-controller="GroupsActivitiesCtrl">\n' + "\n" + "  <br>\n" + "  <div>\n" + '    <table class="table table-striped">\n' + "      <tbody>\n" + '      <tr class="table-header">\n' + "        <td>Date</td>\n" + "        <td>Content</td>\n" + "        <td>Verb</td>\n" + "        <td>UUID</td>\n" + "      </tr>\n" + '      <tr class="zebraRows" ng-repeat="activity in selectedGroup.activities">\n' + "        <td>{{activity.createdDate}}</td>\n" + "        <td>{{activity.content}}</td>\n" + "        <td>{{activity.verb}}</td>\n" + "        <td>{{activity.uuid}}</td>\n" + "      </tr>\n" + "      </tbody>\n" + "    </table>\n" + "  </div>\n" + "\n" + "\n" + "</div>");
         $templateCache.put("groups/groups-details.html", '<div class="content-page" ng-controller="GroupsDetailsCtrl">\n' + "\n" + "  <div>\n" + '      <form name="updateGroupDetailForm" ng-submit="saveSelectedGroup()" novalidate>\n' + '          <div style="float: left; padding-right: 30px;">\n' + '              <h4 class="ui-dform-legend">Group Information</h4>\n' + '              <label for="group-title" class="ui-dform-label">Group Title</label>\n' + '              <input type="text" id="group-title" ng-pattern="titleRegex" ng-attr-title="{{titleRegexDescription}}" required class="ui-dform-text" ng-model="group.title" ug-validate>\n' + "              <br/>\n" + '            <label for="group-path" class="ui-dform-label">Group Path</label>\n' + '            <input type="text" id="group-path" required ng-attr-title="{{pathRegexDescription}}" placeholder="ex: /mydata" ng-pattern="pathRegex" class="ui-dform-text" ng-model="group.path" ug-validate>\n' + "            <br/>\n" + "     
      </div>\n" + '          <br style="clear:both"/>\n' + "\n" + '          <div style="width:100%;float:left;padding: 20px 0">\n' + '              <input type="submit" value="Save Group" style="margin-right: 15px;" ng-disabled="!updateGroupDetailForm.$valid" class="btn btn-primary" />\n' + "          </div>\n" + "\n" + '          <div class="content-container">\n' + "              <h4>JSON Group Object</h4>\n" + "              <pre>{{json}}</pre>\n" + "          </div>\n" + "      </form>\n" + "  </div>\n" + "\n" + "\n" + "</div>");
         $templateCache.put("groups/groups-members.html", '<div class="content-page" ng-controller="GroupsMembersCtrl">\n' + "\n" + "\n" + '  <bsmodal id="removeFromGroup"\n' + '           title="Confirmation"\n' + '           close="hideModal"\n' + '           closelabel="Cancel"\n' + '           extrabutton="removeUsersFromGroupDialog"\n' + '           extrabuttonlabel="Delete"\n' + "           ng-cloak>\n" + "    <p>Are you sure you want to remove the users from the seleted group(s)?</p>\n" + "  </bsmodal>\n" + "\n" + '  <bsmodal id="addGroupToUser"\n' + '           title="Add user to group"\n' + '           close="hideModal"\n' + '           closelabel="Cancel"\n' + '           extrabutton="addGroupToUserDialog"\n' + '           extrabuttonlabel="Add"\n' + "           ng-cloak>\n" + '    <div class="btn-group">\n' + '      <a class="btn dropdown-toggle filter-selector" data-toggle="dropdown">\n' + "        <span class=\"filter-label\">{{$parent.user != '' ? $parent.user.username 
 : 'Select a user...'}}</span>\n" + '        <span class="caret"></span>\n' + "      </a>\n" + '      <ul class="dropdown-menu">\n' + '        <li ng-repeat="user in $parent.usersTypeaheadValues" class="filterItem"><a ng-click="$parent.$parent.user = user">{{user.username}}</a></li>\n' + "      </ul>\n" + "    </div>\n" + "  </bsmodal>\n" + "\n" + "\n" + '  <div class="button-strip">\n' + '    <button class="btn btn-primary"  ng-click="showModal(\'addGroupToUser\')">Add User to Group</button>\n' + '    <button class="btn btn-primary" ng-disabled="!hasMembers || !valueSelected(groupsCollection.users._list)" ng-click="showModal(\'removeFromGroup\')">Remove User(s) from Group</button>\n' + "  </div>\n" + '  <table class="table table-striped">\n' + '    <tr class="table-header">\n' + '      <td style="width: 30px;"><input type="checkbox" ng-show="hasMembers" id="selectAllCheckbox" ng-model="groupMembersSelected" ng-click="selectAllEntities(groupsCollection.users._list,this,\'groupMembers
 Selected\')"></td>\n' + '      <td style="width: 50px;"></td>\n' + "      <td>Username</td>\n" + "      <td>Display Name</td>\n" + "    </tr>\n" + '    <tr class="zebraRows" ng-repeat="user in groupsCollection.users._list">\n' + "      <td>\n" + "        <input\n" + '          type="checkbox"\n' + '          ng-model="user.checked"\n' + "          >\n" + "      </td>\n" + '      <td><img style="width:30px;height:30px;" ng-src="{{user._portal_image_icon}}"></td>\n' + "      <td>{{user.get('username')}}</td>\n" + "      <td>{{user.get('name')}}</td>\n" + "    </tr>\n" + "  </table>\n" + '  <div style="padding: 10px 5px 10px 5px">\n' + '    <button class="btn btn-primary" ng-click="getPrevious()" style="display:{{previous_display}}">< Previous</button>\n' + '    <button class="btn btn-primary" ng-click="getNext()" style="display:{{next_display}}; float:right;">Next ></button>\n' + "  </div>\n" + "</div>");
@@ -4342,12 +4385,12 @@
         $templateCache.put("groups/groups.html", '<div class="content-page">\n' + "\n" + '  <page-title title=" Groups" icon="&#128101;"></page-title>\n' + '  <bsmodal id="newGroup"\n' + '           title="New Group"\n' + '           close="hideModal"\n' + '           closelabel="Cancel"\n' + '           extrabutton="newGroupDialog"\n' + '           extrabuttonlabel="Add"\n' + '           ng-model="dialog"\n' + "           ng-cloak>\n" + "    <fieldset>\n" + '      <div class="control-group">\n' + '        <label for="title">Title</label>\n' + '        <div class="controls">\n' + '          <input type="text" id="title" ng-pattern="titleRegex" ng-attr-title="{{titleRegexDescription}}" required ng-model="newGroup.title"class="input-xlarge" ug-validate/>\n' + "        </div>\n" + "      </div>\n" + '      <div class="control-group">\n' + '        <label for="path">Path</label>\n' + '        <div class="controls">\n' + '          <input id="path" type="text" ng-attr-title="{{pathRegexD
 escription}}" placeholder="ex: /mydata" ng-pattern="pathRegex" required ng-model="newGroup.path" class="input-xlarge" ug-validate/>\n' + "        </div>\n" + "      </div>\n" + "    </fieldset>\n" + "  </bsmodal>\n" + "\n" + '  <bsmodal id="deleteGroup"\n' + '           title="Delete Group"\n' + '           close="hideModal"\n' + '           closelabel="Cancel"\n' + '           extrabutton="deleteGroupsDialog"\n' + '           extrabuttonlabel="Delete"\n' + "           ng-cloak>\n" + "    <p>Are you sure you want to delete the group(s)?</p>\n" + "  </bsmodal>\n" + "\n" + "\n" + '  <section class="row-fluid">\n' + '    <div class="span3 user-col">\n' + "\n" + '      <div class="button-toolbar span12">\n' + '        <a title="Select All" class="btn btn-primary select-all toolbar" ng-show="hasGroups" ng-click="selectAllEntities(groupsCollection._list,this,\'groupBoxesSelected\',true)"> <i class="pictogram">&#8863;</i></a>\n' + '        <button title="Delete" class="btn btn-primary tool
 bar" ng-disabled="!hasGroups || !valueSelected(groupsCollection._list)" ng-click="showModal(\'deleteGroup\')"><i class="pictogram">&#9749;</i></button>\n' + '        <button title="Add" class="btn btn-primary toolbar" ng-click="showModal(\'newGroup\')"><i class="pictogram">&#59136;</i></button>\n' + "      </div>\n" + '      <ul class="user-list">\n' + '        <li ng-class="selectedGroup._data.uuid === group._data.uuid ? \'selected\' : \'\'" ng-repeat="group in groupsCollection._list" ng-click="selectGroup(group._data.uuid)">\n' + "          <input\n" + '              type="checkbox"\n' + '              ng-value="group._data.uuid"\n' + '              ng-checked="group.checked"\n' + '              ng-model="group.checked"\n' + "              >\n" + "          <a href=\"javaScript:void(0)\" >{{group.get('title')}}</a>\n" + "          <br/>\n" + "          <span ng-if=\"group.get('path')\" class=\"label\">Path:</span>/{{group.get('path')}}\n" + "        </li>\n" + "      </ul>\n" + "\
 n" + "\n" + '      <div style="padding: 10px 5px 10px 5px">\n' + '        <button class="btn btn-primary" ng-click="getPrevious()" style="display:{{previous_display}}">< Previous</button>\n' + '        <button class="btn btn-primary" ng-click="getNext()" style="display:{{next_display}}; float:right;">Next ></button>\n' + "      </div>\n" + "\n" + "    </div>\n" + "\n" + '    <div class="span9 tab-content" ng-show="selectedGroup.get" >\n' + '      <div class="menu-toolbar">\n' + '        <ul class="inline" >\n' + '          <li class="tab" ng-class="currentGroupsPage.route === \'/groups/details\' ? \'selected\' : \'\'"><a class="btn btn-primary toolbar" ng-click="selectGroupPage(\'/groups/details\')"><i class="pictogram">&#59170;</i>Details</a></li>\n' + '          <li class="tab" ng-class="currentGroupsPage.route === \'/groups/members\' ? \'selected\' : \'\'"><a class="btn btn-primary toolbar" ng-click="selectGroupPage(\'/groups/members\')"><i class="pictogram">&#128101;</i>Users</a
 ></li>\n' + '          <li class="tab" ng-class="currentGroupsPage.route === \'/groups/activities\' ? \'selected\' : \'\'"><a class="btn btn-primary toolbar" ng-click="selectGroupPage(\'/groups/activities\')"><i class="pictogram">&#59194;</i>Activities</a></li>\n' + '          <li class="tab" ng-class="currentGroupsPage.route === \'/groups/roles\' ? \'selected\' : \'\'"><a class="btn btn-primary toolbar" ng-click="selectGroupPage(\'/groups/roles\')"><i class="pictogram">&#127758;</i>Roles &amp; Permissions</a></li>\n' + "        </ul>\n" + "      </div>\n" + '      <span ng-include="currentGroupsPage.template"></span>\n' + "\n" + "  </section>\n" + "</div>\n");
         $templateCache.put("login/forgot-password.html", '<div class="login-content" ng-controller="ForgotPasswordCtrl">\n' + '	<iframe class="container" ng-src="{{forgotPWiframeURL}}" id="forgot-password-frame" border="0" style="border:0;width:600px;height:620px;">\n' + '	<p>Email Address: <input id="resetPasswordEmail" name="resetPasswordEmail" /></p>\n' + '	<button class="btn btn-primary" ng-click="">Reset Password</button>\n' + "</div>\n");
         $templateCache.put("login/loading.html", "\n" + "\n" + "<h1>Loading...</h1>");
-        $templateCache.put("login/login.html", '<div class="login-content">\r' + "\n" + '  <bsmodal id="sendActivationLink"\r' + "\n" + '           title="Resend Activation Link"\r' + "\n" + '           close="hideModal"\r' + "\n" + '           closelabel="Cancel"\r' + "\n" + '           extrabutton="resendActivationLink"\r' + "\n" + '           extrabuttonlabel="Send Activation"\r' + "\n" + "           ng-cloak>\r" + "\n" + "    <fieldset>\r" + "\n" + '      <p>Email to send to: <input type="email" required ng-model="$parent.activation.id" ng-pattern="emailRegex" ng-attr-title="{{emailRegexDescription}}" name="activationId" id="user-activationId" class="input-xlarge"/></p>\r' + "\n" + "    </fieldset>\r" + "\n" + "  </bsmodal>\r" + "\n" + '  <div class="login-holder">\r' + "\n" + '  <form name="loginForm" id="login-form"  ng-submit="login()" class="form-horizontal" novalidate>\r' + "\n" + '    <h1 class="title">Enter your credentials</h1>\r' + "\n" + '    <div class="alert-error" n
 g-if="loginMessage">{{loginMessage}}</div>\r' + "\n" + '    <div class="control-group">\r' + "\n" + '      <label class="control-label" for="login-username">Email or Username:</label>\r' + "\n" + '      <div class="controls">\r' + "\n" + '        <input type="text" ng-model="login.username"  title="Please add a username or email."  class="" id="login-username" required ng-value="login.username" size="20" ug-validate>\r' + "\n" + "      </div>\r" + "\n" + "    </div>\r" + "\n" + '    <div class="control-group">\r' + "\n" + '      <label class="control-label" for="login-password">Password:</label>\r' + "\n" + '      <div class="controls">\r' + "\n" + '        <input type="password" ng-model="login.password"  required id="login-password" class="" ng-value="login.password" size="20" ug-validate>\r' + "\n" + "      </div>\r" + "\n" + "    </div>\r" + "\n" + '    <div class="form-actions">\r' + "\n" + '      <div class="submit">\r' + "\n" + '        <input type="submit" name="button-login
 " id="button-login" ng-disabled="!loginForm.$valid || loading" value="{{loading ? loadingText : \'Log In\'}}" class="btn btn-primary pull-right">\r' + "\n" + "      </div>\r" + "\n" + "    </div>\r" + "\n" + "  </form>\r" + "\n" + "  </div>\r" + "\n" + '  <div class="extra-actions">\r' + "\n" + '    <div class="submit">\r' + "\n" + '      <a ng-click="gotoSignUp()"   name="button-signUp" id="button-signUp" value="Sign Up"\r' + "\n" + '         class="btn btn-primary pull-left">Register</a>\r' + "\n" + "    </div>\r" + "\n" + '    <div class="submit">\r' + "\n" + '      <a ng-click="gotoForgotPasswordPage()" name="button-forgot-password" id="button-forgot-password"\r' + "\n" + '         value="" class="btn btn-primary pull-left">Forgot Password?</a>\r' + "\n" + "    </div>\r" + "\n" + '    <a ng-click="showModal(\'sendActivationLink\')"  name="button-resend-activation" id="button-resend-activation"\r' + "\n" + '       value="" class="btn btn-primary pull-left">Resend Activation Link<
 /a>\r' + "\n" + "  </div>\r" + "\n" + "</div>\r" + "\n");
+        $templateCache.put("login/login.html", '<div class="login-content">\r' + "\n" + '  <bsmodal id="sendActivationLink"\r' + "\n" + '           title="Resend Activation Link"\r' + "\n" + '           close="hideModal"\r' + "\n" + '           closelabel="Cancel"\r' + "\n" + '           extrabutton="resendActivationLink"\r' + "\n" + '           extrabuttonlabel="Send Activation"\r' + "\n" + "           ng-cloak>\r" + "\n" + "    <fieldset>\r" + "\n" + '      <p>Email to send to: <input type="email" required ng-model="$parent.activation.id" ng-pattern="emailRegex" ng-attr-title="{{emailRegexDescription}}" name="activationId" id="user-activationId" class="input-xlarge"/></p>\r' + "\n" + "    </fieldset>\r" + "\n" + "  </bsmodal>\r" + "\n" + '  <div class="login-holder">\r' + "\n" + '  <form name="loginForm" id="login-form"  ng-submit="login()" class="form-horizontal" novalidate>\r' + "\n" + '    <h1 class="title">Enter your credentials</h1>\r' + "\n" + '    <div class="alert-error" n
 g-if="loginMessage">{{loginMessage}}</div>\r' + "\n" + '    <div class="control-group">\r' + "\n" + '      <label class="control-label" for="login-username">Email or Username:</label>\r' + "\n" + '      <div class="controls">\r' + "\n" + '        <input type="text" ng-model="login.username"  title="Please add a username or email."  class="" id="login-username" required ng-value="login.username" size="20" ug-validate>\r' + "\n" + "      </div>\r" + "\n" + "    </div>\r" + "\n" + '    <div class="control-group">\r' + "\n" + '      <label class="control-label" for="login-password">Password:</label>\r' + "\n" + '      <div class="controls">\r' + "\n" + '        <input type="password" ng-model="login.password"  required id="login-password" class="" ng-value="login.password" size="20" ug-validate>\r' + "\n" + "      </div>\r" + "\n" + "    </div>\r" + "\n" + '    <div class="control-group" ng-show="requiresDeveloperKey">\r' + "\n" + '      <label class="control-label" for="login-developer
 key">Developer Key:</label>\r' + "\n" + '      <div class="controls">\r' + "\n" + '        <input type="text" ng-model="login.developerkey" id="login-developerkey" class="" ng-value="login.developerkey" size="20" ug-validate>\r' + "\n" + "      </div>\r" + "\n" + "    </div>\r" + "\n" + '    <div class="form-actions">\r' + "\n" + '      <div class="submit">\r' + "\n" + '        <input type="submit" name="button-login" id="button-login" ng-disabled="!loginForm.$valid || loading" value="{{loading ? loadingText : \'Log In\'}}" class="btn btn-primary pull-right">\r' + "\n" + "      </div>\r" + "\n" + "    </div>\r" + "\n" + "  </form>\r" + "\n" + "  </div>\r" + "\n" + '  <div class="extra-actions">\r' + "\n" + '    <div class="submit">\r' + "\n" + '      <a ng-click="gotoSignUp()"   name="button-signUp" id="button-signUp" value="Sign Up"\r' + "\n" + '         class="btn btn-primary pull-left">Register</a>\r' + "\n" + "    </div>\r" + "\n" + '    <div class="submit">\r' + "\n" + '      <
 a ng-click="gotoForgotPasswordPage()" name="button-forgot-password" id="button-forgot-password"\r' + "\n" + '         value="" class="btn btn-primary pull-left">Forgot Password?</a>\r' + "\n" + "    </div>\r" + "\n" + '    <a ng-click="showModal(\'sendActivationLink\')"  name="button-resend-activation" id="button-resend-activation"\r' + "\n" + '       value="" class="btn btn-primary pull-left">Resend Activation Link</a>\r' + "\n" + "  </div>\r" + "\n" + "</div>\r" + "\n");
         $templateCache.put("login/logout.html", '<div id="logut">Logging out...</div>');
         $templateCache.put("login/register.html", '<div class="signUp-content">\n' + '  <div class="signUp-holder">\n' + '    <form name="signUpform" id="signUp-form" ng-submit="register()" class="form-horizontal" ng-show="!signUpSuccess" novalidate>\n' + '      <h1 class="title">Register</h1>\n' + "\n" + '      <div class="alert" ng-if="loginMessage">{{loginMessage}}</div>\n' + '      <div class="control-group">\n' + '        <label class="control-label" for="register-orgName">Organization:</label>\n' + "\n" + '        <div class="controls">\n' + '          <input type="text" ng-model="registeredUser.orgName" id="register-orgName" ng-pattern="appNameRegex" ng-attr-title="{{appNameRegexDescription}}" ug-validate  required class="" size="20">\n' + "        </div>\n" + "      </div>\n" + "\n" + '      <div class="control-group">\n' + '        <label class="control-label" for="register-name">Name:</label>\n' + "\n" + '        <div class="controls">\n' + '          <input type="text" ng
 -model="registeredUser.name" id="register-name" ng-pattern="nameRegex" ng-attr-title="{{nameRegexDescription}}" ug-validate required class="" size="20">\n' + "        </div>\n" + "      </div>\n" + "\n" + '      <div class="control-group">\n' + '        <label class="control-label" for="register-userName">Username:</label>\n' + "\n" + '        <div class="controls">\n' + '          <input type="text" ng-model="registeredUser.userName" id="register-userName" ng-pattern="usernameRegex" ng-attr-title="{{usernameRegexDescription}}" ug-validate required class="" size="20">\n' + "        </div>\n" + "      </div>\n" + "\n" + '      <div class="control-group">\n' + '        <label class="control-label" for="register-email">Email:</label>\n' + "\n" + '        <div class="controls">\n' + '          <input type="email" ng-model="registeredUser.email" id="register-email"  ng-pattern="emailRegex" ng-attr-title="{{emailRegexDescription}}"  required class="" ug-validate size="20">\n' + "        <
 /div>\n" + "      </div>\n" + "\n" + "\n" + '      <div class="control-group">\n' + '        <label class="control-label" for="register-password">Password:</label>\n' + "\n" + '        <div class="controls">\n' + '          <input type="password" ng-pattern="passwordRegex" ng-attr-title="{{passwordRegexDescription}}" ug-validate ng-model="registeredUser.password" id="register-password" required class=""\n' + '                 size="20">\n' + "        </div>\n" + "      </div>\n" + '      <div class="control-group">\n' + '        <label class="control-label" for="register-confirmPassword">Re-enter Password:</label>\n' + "\n" + '        <div class="controls">\n' + '          <input type="password" ng-model="registeredUser.confirmPassword" required id="register-confirmPassword" ug-validate class="" size="20">\n' + "        </div>\n" + "      </div>\n" + '      <div class="form-actions">\n' + '        <div class="submit">\n' + '          <input type="submit" name="button-login" ng-disab
 led="!signUpform.$valid" id="button-login" value="Register"\n' + '                 class="btn btn-primary pull-right">\n' + "        </div>\n" + '        <div class="submit">\n' + '          <a ng-click="cancel()" type="submit" name="button-cancel" id="button-cancel"\n' + '             class="btn btn-primary pull-right">Cancel</a>\n' + "        </div>\n" + "      </div>\n" + "    </form>\n" + '    <div class="console-section well thingy" ng-show="signUpSuccess">\n' + '      <span class="title">We\'re holding a seat for you!</span>\n' + "      <br><br>\n" + "\n" + "      <p>Thanks for signing up for a spot on our private beta. We will send you an email as soon as we're ready for\n" + "        you!</p>\n" + "\n" + "      <p>In the mean time, you can stay up to date with App Services on our <a\n" + '          href="https://groups.google.com/forum/?fromgroups#!forum/usergrid">GoogleGroup</a>.</p>\n' + "\n" + '      <p> <a href="#!/login">Back to login</a></p>\n' + "    </div>\n" + "  </
 div>\n" + "\n" + "</div>\n");
-        $templateCache.put("menus/appMenu.html", '<ul id="app-menu" class="nav top-nav span12">\n' + '    <li class="span7">\n' + '      <bsmodal id="newApplication"\n' + '               title="Create New Application"\n' + '               close="hideModal"\n' + '               closelabel="Cancel"\n' + '               extrabutton="newApplicationDialog"\n' + '               extrabuttonlabel="Create"\n' + '               buttonid="app"\n' + "               ng-cloak>\n" + '        <div ng-show="!hasApplications" class="modal-instructions" >You have no applications, please create one.</div>\n' + '        <div  ng-show="hasCreateApplicationError" class="alert-error">Application already exists!</div>\n' + '        <p>New application name: <input ng-model="$parent.newApp.name" id="app-name-input" ng-pattern="appNameRegex"  ng-attr-title="{{appNameRegexDescription}}" type="text" required ug-validate /></p>\n' + "      </bsmodal>\n" + '        <div class="btn-group">\n' + '            <a clas
 s="btn dropdown-toggle top-selector app-selector" id="current-app-selector" data-toggle="dropdown">\n' + '                <i class="pictogram">&#9881;</i> {{myApp.currentApp}}\n' + '                <span class="caret"></span>\n' + "            </a>\n" + '            <ul class="dropdown-menu app-nav">\n' + '                <li name="app-selector" ng-repeat="app in applications">\n' + '                    <a id="app-{{app.name}}-link-id" ng-click="appChange(app.name)">{{app.name}}</a>\n' + "                </li>\n" + "            </ul>\n" + "        </div>\n" + "    </li>\n" + '    <li class="span5">\n' + '      <a ng-if="activeUI"\n' + '         class="btn btn-create zero-out pull-right"\n' + '         ng-disabled="!addApplications"\n' + "         ng-click=\"addApplications ? showModal('newApplication') : ''\"\n" + '         analytics-on="click"\n' + '         analytics-category="App Services"\n' + '         analytics-label="Button"\n' + '         analytics-event="Add New App"\n' + "
         >\n" + "        <i class=\"pictogram\">{{addApplications ? '&#8862;' : '&#10060;'}}</i>\n" + "        {{!addApplications ? '10 app limit.' : 'Add New App'}}\n" + "      </a>\n" + "    </li>\n" + "</ul>");
+        $templateCache.put("menus/appMenu.html", '<ul id="app-menu" class="nav top-nav span12">\n' + '    <li class="span7">\n' + '      <bsmodal id="newApplication"\n' + '               title="Create New Application"\n' + '               close="hideModal"\n' + '               closelabel="Cancel"\n' + '               extrabutton="newApplicationDialog"\n' + '               extrabuttonlabel="Create"\n' + '               buttonid="app"\n' + "               ng-cloak>\n" + '        <div ng-show="!hasApplications" class="modal-instructions" >You have no applications, please create one.</div>\n' + '        <div  ng-show="hasCreateApplicationError" class="alert-error">Application already exists!</div>\n' + '        <p>New application name: <input ng-model="$parent.newApp.name" id="app-name-input" ng-pattern="appNameRegex"  ng-attr-title="{{appNameRegexDescription}}" type="text" required ug-validate /></p>\n' + "      </bsmodal>\n" + '        <div class="btn-group">\n' + '            <a clas
 s="btn dropdown-toggle top-selector app-selector" id="current-app-selector" data-toggle="dropdown">\n' + '                <i class="pictogram">&#9881;</i> {{myApp.currentApp}}\n' + '                <span class="caret"></span>\n' + "            </a>\n" + '            <ul class="dropdown-menu app-nav">\n' + '                <li name="app-selector" ng-repeat="app in applications">\n' + '                    <a id="app-{{app.name}}-link-id" ng-click="appChange(app.name)">{{app.name}}</a>\n' + "                </li>\n" + "            </ul>\n" + "        </div>\n" + "    </li>\n" + '    <li class="span5">\n' + '      <a ng-if="activeUI"\n' + '         class="btn btn-create zero-out pull-right"\n' + "         ng-click=\"showModal('newApplication')\"\n" + '         analytics-on="click"\n' + '         analytics-category="App Services"\n' + '         analytics-label="Button"\n' + '         analytics-event="Add New App"\n' + "        >\n" + '        <i class="pictogram">&#8862;</i>\n' + "      
   Add New App\n" + "      </a>\n" + "    </li>\n" + "</ul>");
         $templateCache.put("menus/orgMenu.html", '<ul class="nav top-nav org-nav">\n' + "  <li>\n" + '<div class="btn-group ">\n' + '    <a class="btn dropdown-toggle top-selector org-selector" id="current-org-selector" data-toggle="dropdown">\n' + '        <i class="pictogram">&#128193</i> {{currentOrg}}<span class="caret"></span>\n' + "        </a>\n" + '    <ul class="dropdown-menu org-nav">\n' + '          <li name="org-selector" ng-repeat="(k,v) in organizations">\n' + '              <a id="org-{{v.name}}-selector" class="org-overview" ng-click="orgChange(v.name)"> {{v.name}}</a>\n' + "            </li>\n" + "         </ul>\n" + "    </div>\n" + "  </li></ul>");
-        $templateCache.put("org-overview/org-overview.html", '<div class="org-overview-content" ng-show="activeUI">\n' + "\n" + '  <page-title title=" Org Administration" icon="&#128362;"></page-title>\n' + "\n" + '  <section class="row-fluid">\n' + "\n" + '  <div class="span6">\n' + "\n" + '    <h2 class="title">Current Organization </h2>\n' + '    <table class="table table-striped">\n' + "      <tr>\n" + '        <td id="org-overview-name">{{currentOrganization.name}}</td>\n' + '        <td style="text-align: right">{{currentOrganization.uuid}}</td>\n' + "      </tr>\n" + "    </table>\n" + "\n" + '    <bsmodal id="newApplication"\n' + '             title="Create New Application"\n' + '             close="hideModal"\n' + '             closelabel="Cancel"\n' + '             extrabutton="newApplicationDialog"\n' + '             extrabuttonlabel="Create"\n' + "             ng-cloak>\n" + '      <p>New application name: <input ng-model="$parent.newApp.name"  ug-validate required type=
 "text" ng-pattern="appNameRegex" ng-attr-title="{{appNameRegexDescription}}" /></p>\n' + "    </bsmodal>\n" + "\n" + '    <h2 class="title" > Applications\n' + '      <div class="header-button btn-group pull-right">\n' + "        <a class=\"btn filter-selector\" style=\"{{applicationsSize === 10 ? 'width:290px':''}}\"  ng-disabled=\"!addApplications\" ng-click=\"(addApplications ? showModal('newApplication') : '')\">\n" + "          <span class=\"filter-label\">{{!addApplications ? 'You have met your 10 app limit' : 'Add New App'}}</span>\n" + "        </a>\n" + "      </div>\n" + "    </h2>\n" + "\n" + '    <table class="table table-striped">\n' + '      <tr ng-repeat="application in applications">\n' + "        <td>{{application.name}}</td>\n" + '        <td style="text-align: right">{{application.uuid}}</td>\n' + "      </tr>\n" + "    </table>\n" + "\n" + '    <bsmodal id="regenerateCredentials"\n' + '             title="Confirmation"\n' + '             close="hideModal"\n' + ' 
             closelabel="Cancel"\n' + '             extrabutton="regenerateCredentialsDialog"\n' + '             extrabuttonlabel="Yes"\n' + "             ng-cloak>\n" + "      Are you sure you want to regenerate the credentials?\n" + "    </bsmodal>\n" + "\n" + '    <h2 class="title" >Organization API Credentials\n' + '      <div class="header-button btn-group pull-right">\n' + '        <a class="btn filter-selector" ng-click="showModal(\'regenerateCredentials\')">\n' + '          <span class="filter-label">Regenerate Org Credentials</span>\n' + "        </a>\n" + "      </div>\n" + "    </h2>\n" + "\n" + '    <table class="table table-striped">\n' + "      <tr>\n" + "        <td >Client ID</td>\n" + '        <td style="text-align: right" >{{orgAPICredentials.client_id}}</td>\n' + "      </tr>\n" + "      <tr>\n" + "        <td>Client Secret</td>\n" + '        <td style="text-align: right">{{orgAPICredentials.client_secret}}</td>\n' + "      </tr>\n" + "    </table>\n" + "\n" + '   
  <bsmodal id="newAdministrator"\n' + '             title="Create New Administrator"\n' + '             close="hideModal"\n' + '             closelabel="Cancel"\n' + '             extrabutton="newAdministratorDialog"\n' + '             extrabuttonlabel="Create"\n' + "             ng-cloak>\n" + '      <p>New administrator email: <input id="newAdminInput" ug-validate ng-model="$parent.admin.email" pattern="emailRegex" ng-attr-title="{{emailRegexDescription}}" required type="email" /></p>\n' + "    </bsmodal>\n" + "\n" + '    <h2 class="title" >Organization Administrators\n' + '      <div class="header-button btn-group pull-right">\n' + '        <a class="btn filter-selector" ng-click="showModal(\'newAdministrator\')">\n' + '          <span class="filter-label">Add New Administrator</span>\n' + "        </a>\n" + "      </div>\n" + "    </h2>\n" + "\n" + '    <table class="table table-striped">\n' + '      <tr ng-repeat="administrator in orgAdministrators">\n' + '        <td><img style
 ="width:30px;height:30px;" ng-src="{{administrator.image}}"> {{administrator.name}}</td>\n' + '        <td style="text-align: right">{{administrator.email}}</td>\n' + "      </tr>\n" + "    </table>\n" + "\n" + "\n" + "  </div>\n" + "\n" + '  <div class="span6">\n' + "\n" + '    <h2 class="title">Activities </h2>\n' + '    <table class="table table-striped">\n' + '      <tr ng-repeat="activity in activities">\n' + "        <td>{{activity.title}}</td>\n" + '        <td style="text-align: right">{{activity.date}}</td>\n' + "      </tr>\n" + "    </table>\n" + "\n" + "  </div>\n" + "\n" + "\n" + "  </section>\n" + "</div>");
+        $templateCache.put("org-overview/org-overview.html", '<div class="org-overview-content" ng-show="activeUI">\n' + "\n" + '  <page-title title=" Org Administration" icon="&#128362;"></page-title>\n' + "\n" + '  <section class="row-fluid">\n' + "\n" + '  <div class="span6">\n' + "\n" + '    <h2 class="title">Current Organization </h2>\n' + '    <table class="table table-striped">\n' + "      <tr>\n" + '        <td id="org-overview-name">{{currentOrganization.name}}</td>\n' + '        <td style="text-align: right">{{currentOrganization.uuid}}</td>\n' + "      </tr>\n" + "    </table>\n" + "\n" + '    <bsmodal id="newApplication"\n' + '             title="Create New Application"\n' + '             close="hideModal"\n' + '             closelabel="Cancel"\n' + '             extrabutton="newApplicationDialog"\n' + '             extrabuttonlabel="Create"\n' + "             ng-cloak>\n" + '      <p>New application name: <input ng-model="$parent.newApp.name"  ug-validate required type=
 "text" ng-pattern="appNameRegex" ng-attr-title="{{appNameRegexDescription}}" /></p>\n' + "    </bsmodal>\n" + "\n" + '    <h2 class="title" > Applications\n' + '      <div class="header-button btn-group pull-right">\n' + "        <a class=\"btn filter-selector\" style=\"{{applicationsSize === 10 ? 'width:290px':''}}\"  ng-click=\"showModal('newApplication')\">\n" + '          <span class="filter-label">Add New App</span>\n' + "        </a>\n" + "      </div>\n" + "    </h2>\n" + "\n" + '    <table class="table table-striped">\n' + '      <tr ng-repeat="application in applications">\n' + "        <td>{{application.name}}</td>\n" + '        <td style="text-align: right">{{application.uuid}}</td>\n' + "      </tr>\n" + "    </table>\n" + "\n" + '    <bsmodal id="regenerateCredentials"\n' + '             title="Confirmation"\n' + '             close="hideModal"\n' + '             closelabel="Cancel"\n' + '             extrabutton="regenerateCredentialsDialog"\n' + '             extrabut
 tonlabel="Yes"\n' + "             ng-cloak>\n" + "      Are you sure you want to regenerate the credentials?\n" + "    </bsmodal>\n" + "\n" + '    <h2 class="title" >Organization API Credentials\n' + '      <div class="header-button btn-group pull-right">\n' + '        <a class="btn filter-selector" ng-click="showModal(\'regenerateCredentials\')">\n' + '          <span class="filter-label">Regenerate Org Credentials</span>\n' + "        </a>\n" + "      </div>\n" + "    </h2>\n" + "\n" + '    <table class="table table-striped">\n' + "      <tr>\n" + "        <td >Client ID</td>\n" + '        <td style="text-align: right" >{{orgAPICredentials.client_id}}</td>\n' + "      </tr>\n" + "      <tr>\n" + "        <td>Client Secret</td>\n" + '        <td style="text-align: right">{{orgAPICredentials.client_secret}}</td>\n' + "      </tr>\n" + "    </table>\n" + "\n" + '    <bsmodal id="newAdministrator"\n' + '             title="Create New Administrator"\n' + '             close="hideModal"
 \n' + '             closelabel="Cancel"\n' + '             extrabutton="newAdministratorDialog"\n' + '             extrabuttonlabel="Create"\n' + "             ng-cloak>\n" + '      <p>New administrator email: <input id="newAdminInput" ug-validate ng-model="$parent.admin.email" pattern="emailRegex" ng-attr-title="{{emailRegexDescription}}" required type="email" /></p>\n' + "    </bsmodal>\n" + "\n" + '    <h2 class="title" >Organization Administrators\n' + '      <div class="header-button btn-group pull-right">\n' + '        <a class="btn filter-selector" ng-click="showModal(\'newAdministrator\')">\n' + '          <span class="filter-label">Add New Administrator</span>\n' + "        </a>\n" + "      </div>\n" + "    </h2>\n" + "\n" + '    <table class="table table-striped">\n' + '      <tr ng-repeat="administrator in orgAdministrators">\n' + '        <td><img style="width:30px;height:30px;" ng-src="{{administrator.image}}"> {{administrator.name}}</td>\n' + '        <td style="text-a
 lign: right">{{administrator.email}}</td>\n' + "      </tr>\n" + "    </table>\n" + "\n" + "\n" + "  </div>\n" + "\n" + '  <div class="span6">\n' + "\n" + '    <h2 class="title">Activities </h2>\n' + '    <table class="table table-striped">\n' + '      <tr ng-repeat="activity in activities">\n' + "        <td>{{activity.title}}</td>\n" + '        <td style="text-align: right">{{activity.date}}</td>\n' + "      </tr>\n" + "    </table>\n" + "\n" + "  </div>\n" + "\n" + "\n" + "  </section>\n" + "</div>");
         $templateCache.put("profile/account.html", '<page-title title=" Account Settings" icon="&#59170"></page-title>\n' + "\n" + '<section class="row-fluid">\n' + '  <div class="span12 tab-content">\n' + '    <div class="menu-toolbar">\n' + '      <ul class="inline">\n' + '        <li class="tab" ng-show="!use_sso" ng-class="currentAccountPage.route === \'/profile/profile\' ? \'selected\' : \'\'"><a class="btn btn-primary toolbar" id="profile-link" ng-click="selectAccountPage(\'/profile/profile\')"><i class="pictogram">&#59170;</i>Profile</a></li>\n' + '        <li class="tab" ng-class="currentAccountPage.route === \'/profile/organizations\' ? \'selected\' : \'\'"><a class="btn btn-primary toolbar" id="account-link" ng-click="selectAccountPage(\'/profile/organizations\')"><i class="pictogram">&#128101;</i>Organizations</a></li>\n' + "      </ul>\n" + "    </div>\n" + '    <span ng-include="currentAccountPage.template"></span>\n' + "  </div>\n" + "</section>");
         $templateCache.put("profile/organizations.html", '<div class="content-page"   ng-controller="OrgCtrl">\n' + "\n" + "\n" + "\n" + '  <bsmodal id="newOrganization"\n' + '           title="Create New Organization"\n' + '           close="hideModal"\n' + '           closelabel="Cancel"\n' + '           extrabutton="addOrganization"\n' + '           extrabuttonlabel="Create"\n' + "           ng-cloak>\n" + "    <fieldset>\n" + "\n" + '      <div class="control-group">\n' + '        <label for="new-user-orgname">Organization Name</label>\n' + "\n" + '        <div class="controls">\n' + '          <input type="text" required title="Name" ug-validate ng-pattern="nameRegex" ng-attr-title="{{nameRegexDescription}}" ng-model="$parent.org.name" name="name" id="new-user-orgname" class="input-xlarge"/>\n' + "\n" + '          <p class="help-block hide"></p>\n' + "        </div>\n" + "      </div>\n" + "\n" + "    </fieldset>\n" + "  </bsmodal>\n" + "\n" + "\n" + '      <div class="row-flui
 d" >\n' + '      <div class="span3 user-col ">\n' + "\n" + '        <div class="button-toolbar span12">\n' + "\n" + '          <button class="btn btn-primary toolbar" ng-click="showModal(\'newOrganization\')" ng-show="true"><i class="pictogram">&#59136;</i>\n' + "          </button>\n" + "        </div>\n" + '        <ul class="user-list">\n' + "          <li ng-class=\"selectedOrg.uuid === org.uuid ? 'selected' : ''\"\n" + '              ng-repeat="org in orgs" ng-click=" selectOrganization(org)">\n' + "\n" + '            <a href="javaScript:void(0)">{{org.name}}</a>\n' + "          </li>\n" + "        </ul>\n" + "      </div>\n" + '      <div class="span9">\n' + '        <div class="row-fluid" >\n' + "          <h4>Organization Information</h4>\n" + '          <div class="span11" ng-show="selectedOrg">\n' + '            <label  class="ui-dform-label">Applications</label>\n' + '            <table class="table table-striped">\n' + '              <tr ng-repeat="app in selectedOrg.app
 licationsArray">\n' + "                <td> {{app.name}}</td>\n" + '                <td style="text-align: right">{{app.uuid}}</td>\n' + "              </tr>\n" + "            </table>\n" + "            <br/>\n" + '            <label  class="ui-dform-label">Users</label>\n' + '            <table class="table table-striped">\n' + '              <tr ng-repeat="user in selectedOrg.usersArray">\n' + "                <td> {{user.name}}</td>\n" + '                <td style="text-align: right">{{user.email}}</td>\n' + "              </tr>\n" + "            </table>\n" + '            <form ng-submit="leaveOrganization(selectedOrg)">\n' + '              <input type="submit" name="button-leave-org" id="button-leave-org" title="Can only leave if organization has more than 1 user." ng-disabled="!doesOrgHaveUsers(selectedOrg)" value="Leave Organization" class="btn btn-primary pull-right">\n' + "            </form>\n" + "          </div>\n" + "        </div>\n" + "\n" + "      </div>\n" + "      
   </div>\n" + "</div>");
         $templateCache.put("profile/profile.html", '<div class="content-page" ng-controller="ProfileCtrl">\n' + "\n" + '  <div id="account-panels">\n' + '    <div class="panel-content">\n' + '      <div class="console-section">\n' + '        <div class="console-section-contents">\n' + '          <form name="updateAccountForm" id="update-account-form" ng-submit="saveUserInfo()" class="form-horizontal">\n' + "            <fieldset>\n" + '              <div class="control-group">\n' + '                <label id="update-account-id-label" class="control-label" for="update-account-id">UUID</label>\n' + '                <div class="controls">\n' + '                  <span id="update-account-id" class="monospace">{{user.uuid}}</span>\n' + "                </div>\n" + "              </div>\n" + '              <div class="control-group">\n' + '                <label class="control-label" for="update-account-username">Username </label>\n' + '                <div class="controls">\n' + '       
            <input type="text" ug-validate name="update-account-username" required ng-pattern="usernameRegex" id="update-account-username" ng-attr-title="{{usernameRegexDescription}}"  class="span4" ng-model="user.username" size="20"/>\n' + "                </div>\n" + "              </div>\n" + '              <div class="control-group">\n' + '                <label class="control-label" for="update-account-name">Name </label>\n' + '                <div class="controls">\n' + '                  <input type="text" ug-validate name="update-account-name" id="update-account-name" ng-pattern="nameRegex" ng-attr-title="{{nameRegexDescription}}" class="span4" ng-model="user.name" size="20"/>\n' + "                </div>\n" + "              </div>\n" + '              <div class="control-group">\n' + '                <label class="control-label" for="update-account-email"> Email</label>\n' + '                <div class="controls">\n' + '                  <input type="email" ug-validate requir
 ed name="update-account-email" ng-pattern="emailRegex" ng-attr-title="{{emailRegexDescription}}"  id="update-account-email" class="span4" ng-model="user.email" size="20"/>\n' + "                </div>\n" + "              </div>\n" + '              <div class="control-group">\n' + '                <label class="control-label" for="update-account-picture-img">Picture <br />(from <a href="http://gravatar.com">gravatar.com</a>) </label>\n' + '                <div class="controls">\n' + '                  <img id="update-account-picture-img" ng-src="{{user.profileImg}}" width="50" />\n' + "                </div>\n" + "              </div>\n" + '              <span class="help-block">Leave blank any of the following to keep the current password unchanged</span>\n' + "              <br />\n" + '              <div class="control-group">\n' + '                <label class="control-label" for="old-account-password">Old Password</label>\n' + '                <div class="controls">\n' + '      
             <input type="password" ug-validate name="old-account-password"  id="old-account-password" class="span4" ng-model="user.oldPassword" size="20"/>\n' + "                </div>\n" + "              </div>\n" + '              <div class="control-group">\n' + '                <label class="control-label" for="update-account-password">New Password</label>\n' + '                <div class="controls">\n' + '                  <input type="password"  ug-validate name="update-account-password" ng-pattern="passwordRegex" ng-attr-title="{{passwordRegexDescription}}" id="update-account-password" class="span4" ng-model="user.newPassword" size="20"/>\n' + "                </div>\n" + "              </div>\n" + '              <div class="control-group" style="display:none">\n' + '                <label class="control-label" for="update-account-password-repeat">Confirm New Password</label>\n' + '                <div class="controls">\n' + '                  <input type="password" ug-validat
 e name="update-account-password-repeat" ng-pattern="passwordRegex" ng-attr-title="{{passwordRegexDescription}}" id="update-account-password-repeat" class="span4" ng-model="user.newPasswordConfirm" size="20"/>\n' + "                </div>\n" + "              </div>\n" + "            </fieldset>\n" + '            <div class="form-actions">\n' + '              <input type="submit"  class="btn btn-primary"  name="button-update-account" ng-disabled="!updateAccountForm.$valid || loading" id="button-update-account" value="{{loading ? loadingText : \'Update\'}}"  class="btn btn-usergrid"/>\n' + "            </div>\n" + "          </form>\n" + "        </div>\n" + "      </div>\n" + "    </div>\n" + "  </div>\n" + "</div>");
@@ -4358,12 +4401,13 @@
         $templateCache.put("roles/roles.html", '<div class="content-page">\n' + "\n" + '  <page-title title=" Roles" icon="&#59170;"></page-title>\n' + "\n" + '  <bsmodal id="newRole"\n' + '           title="New Role"\n' + '           close="hideModal"\n' + '           closelabel="Cancel"\n' + '           extrabutton="newRoleDialog"\n' + '           extrabuttonlabel="Create"\n' + "           ng-cloak>\n" + "          <fieldset>\n" + '            <div class="control-group">\n' + '              <label for="new-role-roletitle">Title</label>\n' + '              <div class="controls">\n' + '                <input type="text" ng-pattern="titleRegex" ng-attr-title="{{titleRegexDescription}}" required ng-model="$parent.newRole.title" name="roletitle" id="new-role-roletitle" class="input-xlarge" ug-validate/>\n' + '                <p class="help-block hide"></p>\n' + "              </div>\n" + "            </div>\n" + '            <div class="control-group">\n' + '              <label for="n
 ew-role-rolename">Role Name</label>\n' + '              <div class="controls">\n' + '                <input type="text" required ng-pattern="roleNameRegex" ng-attr-title="{{roleNameRegexDescription}}" ng-model="$parent.newRole.name" name="rolename" id="new-role-rolename" class="input-xlarge" ug-validate/>\n' + '                <p class="help-block hide"></p>\n' + "              </div>\n" + "            </div>\n" + "          </fieldset>\n" + "  </bsmodal>\n" + "\n" + '  <bsmodal id="deleteRole"\n' + '           title="Delete Role"\n' + '           close="hideModal"\n' + '           closelabel="Cancel"\n' + '           extrabutton="deleteRoleDialog"\n' + '           extrabuttonlabel="Delete"\n' + "           ng-cloak>\n" + "    <p>Are you sure you want to delete the role(s)?</p>\n" + "  </bsmodal>\n" + "\n" + '  <section class="row-fluid">\n' + '    <div class="span3 user-col">\n' + "\n" + '      <div class="button-toolbar span12">\n' + '        <a title="Select All" class="btn btn-p
 rimary select-all toolbar" ng-show="hasRoles" ng-click="selectAllEntities(rolesCollection._list,this,\'rolesSelected\',true)"> <i class="pictogram">&#8863;</i></a>\n' + '        <button title="Delete" class="btn btn-primary toolbar"  ng-disabled="!hasRoles || !valueSelected(rolesCollection._list)" ng-click="showModal(\'deleteRole\')"><i class="pictogram">&#9749;</i></button>\n' + '        <button title="Add" class="btn btn-primary toolbar" ng-click="showModal(\'newRole\')"><i class="pictogram">&#59136;</i></button>\n' + "      </div>\n" + "\n" + '      <ul class="user-list">\n' + '        <li ng-class="selectedRole._data.uuid === role._data.uuid ? \'selected\' : \'\'" ng-repeat="role in rolesCollection._list" ng-click="selectRole(role._data.uuid)">\n' + "          <input\n" + '              type="checkbox"\n' + "              ng-value=\"role.get('uuid')\"\n" + '              ng-checked="master"\n' + '              ng-model="role.checked"\n' + "              >\n" + "          <a >{{r
 ole.get('title')}}</a>\n" + "          <br/>\n" + "          <span ng-if=\"role.get('name')\" class=\"label\">Role Name:</span>{{role.get('name')}}\n" + "        </li>\n" + "      </ul>\n" + "\n" + "\n" + "\n" + '  <div style="padding: 10px 5px 10px 5px">\n' + '    <button class="btn btn-primary" ng-click="getPrevious()" style="display:{{previous_display}}">< Previous</button>\n' + '    <button class="btn btn-primary" ng-click="getNext()" style="display:{{next_display}};float:right;">Next ></button>\n' + "  </div>\n" + "\n" + "    </div>\n" + "\n" + '    <div class="span9 tab-content" ng-show="hasRoles">\n' + '      <div class="menu-toolbar">\n' + '        <ul class="inline">\n' + '          <li class="tab" ng-class="currentRolesPage.route === \'/roles/settings\' ? \'selected\' : \'\'"><a class="btn btn-primary toolbar" ng-click="selectRolePage(\'/roles/settings\')"><i class="pictogram">&#59170;</i>Settings</a></li>\n' + '          <li class="tab" ng-class="currentRolesPage.route ==
 = \'/roles/users\' ? \'selected\' : \'\'"><a class="btn btn-primary toolbar" ng-click="selectRolePage(\'/roles/users\')"><i class="pictogram">&#128101;</i>Users</a></li>\n' + '          <li class="tab" ng-class="currentRolesPage.route === \'/roles/groups\' ? \'selected\' : \'\'"><a class="btn btn-primary toolbar" ng-click="selectRolePage(\'/roles/groups\')"><i class="pictogram">&#59194;</i>Groups</a></li>\n' + "        </ul>\n" + "      </div>\n" + '      <span ng-include="currentRolesPage.template"></span>\n' + "    </div>\n" + "  </section>\n" + "</div>");
         $templateCache.put("shell/shell.html", '<page-title title=" Shell" icon="&#128241;"></page-title>\n' + "\n" + '<section class="row-fluid">\n' + '  <div class="console-section-contents" id="shell-panel">\n' + '    <div id="shell-input-div">\n' + '      <p> Type "help" to view a list of the available commands.</p>\n' + "      <hr>\n" + "\n" + '      <form name="shellForm" ng-submit="submitCommand()" >\n' + "        <span>&nbsp;&gt;&gt; </span>\n" + '        <input  type="text" id="shell-input"  ng-model="shell.input" autofocus="autofocus" required\n' + '                  ng-form="shellForm">\n' + '        <input style="display: none" type="submit" ng-form="shellForm" value="submit" ng-disabled="!shell.input"/>\n' + "      </form>\n" + "    </div>\n" + '    <pre id="shell-output" class="prettyprint lang-js" style="overflow-x: auto; height: 400px;" ng-bind-html="shell.output">\n' + "\n" + "    </pre>\n" + "  </div>\n" + "</section>\n");
         $templateCache.put("users/users-activities.html", '<div class="content-page" ng-controller="UsersActivitiesCtrl" >\n' + "\n" + '  <bsmodal id="addActivityToUser"\n' + '           title="Add activity to user"\n' + '           close="hideModal"\n' + '           closelabel="Cancel"\n' + '           extrabutton="addActivityToUserDialog"\n' + '           extrabuttonlabel="Add"\n' + "           ng-cloak>\n" + '      <p>Content: <input id="activityMessage" ng-model="$parent.newActivity.activityToAdd" required name="activityMessage" ug-validate /></p>\n' + "  </bsmodal>\n" + "\n" + "\n" + "  <div ng:include=\"'users/users-tabs.html'\"></div>\n" + "  <br>\n" + '  <div class="button-strip">\n' + '    <button class="btn btn-primary" ng-click="showModal(\'addActivityToUser\')">Add activity to user</button>\n' + "  </div>\n" + "  <div>\n" + '    <table class="table table-striped">\n' + "      <tbody>\n" + '      <tr class="table-header">\n' + "        <td>Date</td>\n" + "        <td>Cont
 ent</td>\n" + "        <td>Verb</td>\n" + "        <td>UUID</td>\n" + "      </tr>\n" + '      <tr class="zebraRows" ng-repeat="activity in activities">\n' + "        <td>{{activity.createdDate}}</td>\n" + "        <td>{{activity.content}}</td>\n" + "        <td>{{activity.verb}}</td>\n" + "        <td>{{activity.uuid}}</td>\n" + "      </tr>\n" + "      </tbody>\n" + "    </table>\n" + "  </div>\n" + "\n" + "\n" + "</div>\n");
+        $templateCache.put("users/users-feed.html", '<div class="content-page" ng-controller="UsersFeedCtrl" >\n' + "\n" + "    <div ng:include=\"'users/users-tabs.html'\"></div>\n" + "    <br>\n" + "    <div>\n" + '        <table class="table table-striped">\n' + "            <tbody>\n" + '            <tr class="table-header">\n' + "                <td>Date</td>\n" + "                <td>User</td>\n" + "                <td>Content</td>\n" + "                <td>Verb</td>\n" + "                <td>UUID</td>\n" + "            </tr>\n" + '            <tr class="zebraRows" ng-repeat="activity in activities">\n' + "                <td>{{activity.createdDate}}</td>\n" + "                <td>{{activity.actor.displayName}}</td>\n" + "                <td>{{activity.content}}</td>\n" + "                <td>{{activity.verb}}</td>\n" + "                <td>{{activity.uuid}}</td>\n" + "            </tr>\n" + "            </tbody>\n" + "        </table>\n" + "    </div>\n" + "\n" + "\n" + "</div
 >\n");
         $templateCache.put("users/users-graph.html", '<div class="content-page" ng-controller="UsersGraphCtrl">\n' + "\n" + "  <div ng:include=\"'users/users-tabs.html'\"></div>\n" + "\n" + "  <div>\n" + "\n" + '    <bsmodal id="followUser"\n' + '             title="Follow User"\n' + '             close="hideModal"\n' + '             closelabel="Cancel"\n' + '             extrabutton="followUserDialog"\n' + '             extrabuttonlabel="Add"\n' + "             ng-cloak>\n" + '      <div class="btn-group">\n' + '        <a class="btn dropdown-toggle filter-selector" data-toggle="dropdown">\n' + "          <span class=\"filter-label\">{{$parent.user != '' ? $parent.user.username : 'Select a user...'}}</span>\n" + '          <span class="caret"></span>\n' + "        </a>\n" + '        <ul class="dropdown-menu">\n' + '          <li ng-repeat="user in $parent.usersTypeaheadValues" class="filterItem"><a ng-click="$parent.$parent.user = user">{{user.username}}</a></li>\n' + "        </ul
 >\n" + "      </div>\n" + "    </bsmodal>\n" + "\n" + "\n" + '    <div class="button-strip">\n' + '      <button class="btn btn-primary" ng-click="showModal(\'followUser\')">Follow User</button>\n' + "    </div>\n" + "    <br>\n" + "    <h4>Following</h4>\n" + '    <table class="table table-striped">\n' + "      <tbody>\n" + '      <tr class="table-header">\n' + "        <td>Image</td>\n" + "        <td>Username</td>\n" + "        <td>Email</td>\n" + "        <td>UUID</td>\n" + "      </tr>\n" + '      <tr class="zebraRows" ng-repeat="user in selectedUser.following">\n' + '        <td><img style="width:30px;height:30px;" ng-src="{{user._portal_image_icon}}"></td>\n' + "        <td>{{user.username}}</td>\n" + "        <td>{{user.email}}</td>\n" + "        <td>{{user.uuid}}</td>\n" + "      </tr>\n" + "      </tbody>\n" + "    </table>\n" + "\n" + "    <h4>Followers</h4>\n" + '    <table class="table table-striped">\n' + "      <tbody>\n" + '      <tr class="table-header">\n' + "     
    <td>Image</td>\n" + "        <td>Username</td>\n" + "        <td>Email</td>\n" + "        <td>UUID</td>\n" + "      </tr>\n" + '      <tr class="zebraRows" ng-repeat="user in selectedUser.followers">\n' + '        <td><img style="width:30px;height:30px;" ng-src="{{user._portal_image_icon}}"></td>\n' + "        <td>{{user.username}}</td>\n" + "        <td>{{user.email}}</td>\n" + "        <td>{{user.uuid}}</td>\n" + "      </tr>\n" + "      </tbody>\n" + "    </table>\n" + "\n" + "  </div>\n" + "</div>");
         $templateCache.put("users/users-groups.html", '<div class="content-page" ng-controller="UsersGroupsCtrl">\n' + "\n" + "  <div ng:include=\"'users/users-tabs.html'\"></div>\n" + "\n" + "  <div>\n" + "\n" + '    <bsmodal id="addUserToGroup"\n' + '             title="Add user to group"\n' + '             close="hideModal"\n' + '             closelabel="Cancel"\n' + '             extrabutton="addUserToGroupDialog"\n' + '             extrabuttonlabel="Add"\n' + "             ng-cloak>\n" + '      <div class="btn-group">\n' + '        <a class="btn dropdown-toggle filter-selector" data-toggle="dropdown">\n' + "          <span class=\"filter-label\">{{$parent.title && $parent.title !== '' ? $parent.title : 'Select a group...'}}</span>\n" + '          <span class="caret"></span>\n' + "        </a>\n" + '        <ul class="dropdown-menu">\n' + '          <li ng-repeat="group in $parent.groupsTypeaheadValues" class="filterItem"><a ng-click="selectGroup(group)">{{group.title}}</a></li>
 \n' + "        </ul>\n" + "      </div>\n" + "    </bsmodal>\n" + "\n" + '    <bsmodal id="leaveGroup"\n' + '             title="Confirmation"\n' + '             close="hideModal"\n' + '             closelabel="Cancel"\n' + '             extrabutton="leaveGroupDialog"\n' + '             extrabuttonlabel="Leave"\n' + "             ng-cloak>\n" + "      <p>Are you sure you want to remove the user from the seleted group(s)?</p>\n" + "    </bsmodal>\n" + "\n" + '    <div class="button-strip">\n' + '      <button class="btn btn-primary" ng-click="showModal(\'addUserToGroup\')">Add to group</button>\n' + '      <button class="btn btn-primary" ng-disabled="!hasGroups || !valueSelected(userGroupsCollection._list)" ng-click="showModal(\'leaveGroup\')">Leave group(s)</button>\n' + "    </div>\n" + '    <table class="table table-striped">\n' + "      <tbody>\n" + '      <tr class="table-header">\n' + "        <td>\n" + '          <input type="checkbox" ng-show="hasGroups" id="selectAllCheckBox
 " ng-model="userGroupsSelected" ng-click="selectAllEntities(userGroupsCollection._list,this,\'userGroupsSelected\')" >\n' + "        </td>\n" + "        <td>Group Name</td>\n" + "        <td>Path</td>\n" + "      </tr>\n" + '      <tr class="zebraRows" ng-repeat="group in userGroupsCollection._list">\n' + "        <td>\n" + "          <input\n" + '            type="checkbox"\n' + "            ng-value=\"group.get('uuid')\"\n" + '            ng-model="group.checked"\n' + "            >\n" + "        </td>\n" + "        <td>{{group.get('title')}}</td>\n" + "        <td>{{group.get('path')}}</td>\n" + "      </tr>\n" + "      </tbody>\n" + "    </table>\n" + "  </div>\n" + '  <div style="padding: 10px 5px 10px 5px">\n' + '    <button class="btn btn-primary" ng-click="getPrevious()" style="display:{{previous_display}}">< Previous</button>\n' + '    <button class="btn btn-primary" ng-click="getNext()" style="display:{{next_display}}; float:right;">Next ></button>\n' + "  </div>\n" + "\n"
  + "</div>\n");
         $templateCache.put("users/users-profile.html", '<div class="content-page" ng-controller="UsersProfileCtrl">\n' + "\n" + "  <div ng:include=\"'users/users-tabs.html'\"></div>\n" + "\n" + '  <div class="row-fluid">\n' + "\n" + '  <form ng-submit="saveSelectedUser()" name="profileForm" novalidate>\n' + '    <div class="span6">\n' + "      <h4>User Information</h4>\n" + '      <label for="ui-form-username" class="ui-dform-label">Username</label>\n' + '      <input type="text" ug-validate required  name="ui-form-username" ng-pattern="usernameRegex" ng-attr-title="{{usernameRegexDescription}}" id="ui-form-username" class="ui-dform-text" ng-model="user.username">\n' + "      <br/>\n" + '      <label for="ui-form-name" class="ui-dform-label">Full Name</label>\n' + '      <input type="text" ug-validate ng-pattern="nameRegex" ng-attr-title="{{nameRegexDescription}}" required name="ui-form-name" id="ui-form-name" class="ui-dform-text" ng-model="user.name">\n' + "      <br/>\n" + '     
  <label for="ui-form-title" class="ui-dform-label">Title</label>\n' + '      <input type="text" ug-validate name="ui-form-title" id="ui-form-title" class="ui-dform-text" ng-model="user.title">\n' + "      <br/>\n" + '      <label for="ui-form-url" class="ui-dform-label">Home Page</label>\n' + '      <input type="url" ug-validate name="ui-form-url" id="ui-form-url" title="Please enter a valid url." class="ui-dform-text" ng-model="user.url">\n' + "      <br/>\n" + '      <label for="ui-form-email" class="ui-dform-label">Email</label>\n' + '      <input type="email" ug-validate required name="ui-form-email" id="ui-form-email"  ng-pattern="emailRegex" ng-attr-title="{{emailRegexDescription}}" class="ui-dform-text" ng-model="user.email">\n' + "      <br/>\n" + '      <label for="ui-form-tel" class="ui-dform-label">Telephone</label>\n' + '      <input type="tel" ug-validate name="ui-form-tel" id="ui-form-tel" class="ui-dform-text" ng-model="user.tel">\n' + "      <br/>\n" + '      <label 
 for="ui-form-picture" class="ui-dform-label">Picture URL</label>\n' + '      <input type="url" ug-validate name="ui-form-picture" id="ui-form-picture" title="Please enter a valid url." ng class="ui-dform-text" ng-model="user.picture">\n' + "      <br/>\n" + '      <label for="ui-form-bday" class="ui-dform-label">Birthday</label>\n' + '      <input type="date" ug-validate name="ui-form-bday" id="ui-form-bday" class="ui-dform-text" ng-model="user.bday">\n' + "      <br/>\n" + "    </div>\n" + '    <div class="span6">\n' + "      <h4>Address</h4>\n" + '      <label for="ui-form-addr1" class="ui-dform-label">Street 1</label>\n' + '      <input type="text" ug-validate name="ui-form-addr1" id="ui-form-addr1" class="ui-dform-text" ng-model="user.adr.addr1">\n' + "      <br/>\n" + '      <label for="ui-form-addr2" class="ui-dform-label">Street 2</label>\n' + '      <input type="text" ug-validate name="ui-form-addr2" id="ui-form-addr2" class="ui-dform-text" ng-model="user.adr.addr2">\n' + " 
      <br/>\n" + '      <label for="ui-form-city" class="ui-dform-label">City</label>\n' + '      <input type="text" ug-validate name="ui-form-city" id="ui-form-city" class="ui-dform-text" ng-model="user.adr.city">\n' + "      <br/>\n" + '      <label for="ui-form-state" class="ui-dform-label">State</label>\n' + '      <input type="text" ug-validate name="ui-form-state" id="ui-form-state"  ng-attr-title="{{stateRegexDescription}}" ng-pattern="stateRegex" class="ui-dform-text" ng-model="user.adr.state">\n' + "      <br/>\n" + '      <label for="ui-form-zip" class="ui-dform-label">Zip</label>\n' + '      <input type="text" ug-validate name="ui-form-zip" ng-pattern="zipRegex" ng-attr-title="{{zipRegexDescription}}" id="ui-form-zip" class="ui-dform-text" ng-model="user.adr.zip">\n' + "      <br/>\n" + '      <label for="ui-form-country" class="ui-dform-label">Country</label>\n' + '      <input type="text" ug-validate name="ui-form-country" ng-attr-title="{{countryRegexDescription}}" ng-p
 attern="countryRegex" id="ui-form-country" class="ui-dform-text" ng-model="user.adr.country">\n' + "      <br/>\n" + "    </div>\n" + "\n" + '      <div class="span6">\n' + '        <input type="submit" class="btn btn-primary margin-35" ng-disabled="!profileForm.$valid"  value="Save User"/>\n' + "      </div>\n" + "\n" + "\n" + '    <div class="content-container">\n' + "      <legend>JSON User Object</legend>\n" + "      <pre>{{user.json}}</pre>\n" + "    </div>\n" + "    </form>\n" + "  </div>\n" + "\n" + "\n" + "</div>\n");
         $templateCache.put("users/users-roles.html", '<div class="content-page" ng-controller="UsersRolesCtrl">\n' + "\n" + "  <div ng:include=\"'users/users-tabs.html'\"></div>\n" + "\n" + "  <div>\n" + "\n" + '    <bsmodal id="addRole"\n' + '             title="Add user to role"\n' + '             close="hideModal"\n' + '             closelabel="Cancel"\n' + '             extrabutton="addUserToRoleDialog"\n' + '             extrabuttonlabel="Add"\n' + "             ng-cloak>\n" + '      <div class="btn-group">\n' + '        <a class="btn dropdown-toggle filter-selector" data-toggle="dropdown">\n' + "          <span class=\"filter-label\">{{$parent.name != '' ? $parent.name : 'Select a Role...'}}</span>\n" + '          <span class="caret"></span>\n' + "        </a>\n" + '        <ul class="dropdown-menu">\n' + '          <li ng-repeat="role in $parent.rolesTypeaheadValues" class="filterItem"><a ng-click="$parent.$parent.name = role.name">{{role.name}}</a></li>\n' + "        </ul>\n
 " + "      </div>\n" + "    </bsmodal>\n" + "\n" + '    <bsmodal id="leaveRole"\n' + '             title="Confirmation"\n' + '             close="hideModal"\n' + '             closelabel="Cancel"\n' + '             extrabutton="leaveRoleDialog"\n' + '             extrabuttonlabel="Leave"\n' + "             ng-cloak>\n" + "      <p>Are you sure you want to remove the user from the role(s)?</p>\n" + "    </bsmodal>\n" + "\n" + '<div ng-controller="UsersRolesCtrl">\n' + "\n" + '    <div class="button-strip">\n' + '      <button class="btn btn-primary" ng-click="showModal(\'addRole\')">Add Role</button>\n' + '      <button class="btn btn-primary" ng-disabled="!hasRoles || !valueSelected(selectedUser.roles)" ng-click="showModal(\'leaveRole\')">Leave role(s)</button>\n' + "    </div>\n" + "    <br>\n" + "    <h4>Roles</h4>\n" + '    <table class="table table-striped">\n' + "      <tbody>\n" + '      <tr class="table-header">\n' + '        <td style="width: 30px;"><input type="checkbox" ng
 -show="hasRoles" id="rolesSelectAllCheckBox" ng-model="usersRolesSelected" ng-click="selectAllEntities(selectedUser.roles,this,\'usersRolesSelected\',true)" ></td>\n' + "        <td>Role Name</td>\n" + "        <td>Role title</td>\n" + "      </tr>\n" + '      <tr class="zebraRows" ng-repeat="role in selectedUser.roles">\n' + "        <td>\n" + "          <input\n" + '            type="checkbox"\n' + '            ng-model="role.checked"\n' + "            >\n" + "        </td>\n" + "        <td>{{role.name}}</td>\n" + "        <td>{{role.title}}</td>\n" + "      </tr>\n" + "      </tbody>\n" + "    </table>\n" + "\n" + '    <bsmodal id="deletePermission"\n' + '             title="Confirmation"\n' + '             close="hideModal"\n' + '             closelabel="Cancel"\n' + '             extrabutton="deletePermissionDialog"\n' + '             extrabuttonlabel="Delete"\n' + "             ng-cloak>\n" + "      <p>Are you sure you want to delete the permission(s)?</p>\n" + "    </bsmodal
 >\n" + "\n" + '    <bsmodal id="addPermission"\n' + '             title="New Permission"\n' + '             close="hideModal"\n' + '             closelabel="Cancel"\n' + '             extrabutton="addUserPermissionDialog"\n' + '             extrabuttonlabel="Add"\n' + "             ng-cloak>\n" + '      <p>Path: <input ng-model="$parent.permissions.path" placeholder="ex: /mydata" id="usersRolePermissions" type="text" ng-pattern="pathRegex" required ug-validate ng-attr-title="{{pathRegexDescription}}" /></p>\n' + '      <div class="control-group">\n' + '        <input type="checkbox" ng-model="$parent.permissions.getPerm"> GET\n' + "      </div>\n" + '      <div class="control-group">\n' + '        <input type="checkbox" ng-model="$parent.permissions.postPerm"> POST\n' + "      </div>\n" + '      <div class="control-group">\n' + '        <input type="checkbox" ng-model="$parent.permissions.putPerm"> PUT\n' + "      </div>\n" + '      <div class="control-group">\n' + '        <input t
 ype="checkbox" ng-model="$parent.permissions.deletePerm"> DELETE\n' + "      </div>\n" + "    </bsmodal>\n" + "\n" + '    <div class="button-strip">\n' + '      <button class="btn btn-primary" ng-click="showModal(\'addPermission\')">Add Permission</button>\n' + '      <button class="btn btn-primary" ng-disabled="!hasPermissions || !valueSelected(selectedUser.permissions)" ng-click="showModal(\'deletePermission\')">Delete Permission(s)</button>\n' + "    </div>\n" + "    <br>\n" + "    <h4>Permissions</h4>\n" + '    <table class="table table-striped">\n' + "      <tbody>\n" + '      <tr class="table-header">\n' + '        <td style="width: 30px;"><input type="checkbox" ng-show="hasPermissions"  id="permissionsSelectAllCheckBox" ng-model="usersPermissionsSelected" ng-click="selectAllEntities(selectedUser.permissions,this,\'usersPermissionsSelected\',true)"  ></td>\n' + "        <td>Path</td>\n" + "        <td>GET</td>\n" + "        <td>POST</td>\n" + "        <td>PUT</td>\n" + "      
   <td>DELETE</td>\n" + "      </tr>\n" + '      <tr class="zebraRows" ng-repeat="permission in selectedUser.permissions">\n' + "        <td>\n" + "          <input\n" + '            type="checkbox"\n' + '            ng-model="permission.checked"\n' + "            >\n" + "        </td>\n" + "        <td>{{permission.path}}</td>\n" + "        <td>{{permission.operations.get}}</td>\n" + "        <td>{{permission.operations.post}}</td>\n" + "        <td>{{permission.operations.put}}</td>\n" + "        <td>{{permission.operations.delete}}</td>\n" + "      </tr>\n" + "      </tbody>\n" + "    </table>\n" + "  </div>\n" + " </div>\n" + "\n" + "</div>\n");
         $templateCache.put("users/users-tabs.html", "\n" + "\n" + "\n");
-        $templateCache.put("users/users.html", '<div class="content-page">\n' + "\n" + '  <page-title title=" Users" icon="&#128100;"></page-title>\n' + '  <bsmodal id="newUser"\n' + '           title="Create New User"\n' + '           close="hideModal"\n' + '           closelabel="Cancel"\n' + '           buttonid="users"\n' + '           extrabutton="newUserDialog"\n' + '           extrabuttonlabel="Create"\n' + "           ng-cloak>\n" + "    <fieldset>\n" + '      <div class="control-group">\n' + '        <label for="new-user-username">Username</label>\n' + "\n" + '        <div class="controls">\n' + '          <input type="text" required ng-model="$parent.newUser.newusername" ng-pattern="usernameRegex" ng-attr-title=

<TRUNCATED>