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/27 23:21:28 UTC

[34/50] [abbrv] adding help framework adding google analytics framework bug fixes

http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/097fd3bd/portal/js/libs/usergrid.sdk.js
----------------------------------------------------------------------
diff --git a/portal/js/libs/usergrid.sdk.js b/portal/js/libs/usergrid.sdk.js
index 78354b1..b9f7d91 100755
--- a/portal/js/libs/usergrid.sdk.js
+++ b/portal/js/libs/usergrid.sdk.js
@@ -98,9 +98,9 @@ Usergrid.Client.prototype.request = function (options, callback) {
   if (self.getToken()) {
     qs.access_token = self.getToken();
   }
-  var developerkey=this.get("developerkey");
+  var developerkey=self.get("developerkey");
   if (developerkey) {
-    qs.developer_key = developerkey;
+    qs.key = developerkey;
   }
   //append params to the path
   var encoded_params = encodeParams(qs);

http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/097fd3bd/portal/js/login/login-controller.js
----------------------------------------------------------------------
diff --git a/portal/js/login/login-controller.js b/portal/js/login/login-controller.js
index b253d77..3d0e515 100755
--- a/portal/js/login/login-controller.js
+++ b/portal/js/login/login-controller.js
@@ -6,6 +6,9 @@ AppServices.Controllers.controller('LoginCtrl', ['ug', '$scope', '$rootScope', '
   $scope.login = {};
   $scope.activation = {};
   $scope.requiresDeveloperKey=$scope.options.client.requiresDeveloperKey||false;
+  if(!$scope.requiresDeveloperKey && $scope.options.client.apiKey){
+    ug.setClientProperty('developerkey', $scope.options.client.apiKey);    
+  }
   $rootScope.gotoForgotPasswordPage = function(){
     $location.path("/forgot-password");
   };
@@ -20,6 +23,9 @@ AppServices.Controllers.controller('LoginCtrl', ['ug', '$scope', '$rootScope', '
     var password = $scope.login.password;
     $scope.loginMessage = "";
     $scope.loading = true;
+    if($scope.requiresDeveloperKey){
+      ug.setClientProperty('developerkey', $scope.login.developerkey);
+    }
 
     ug.orgLogin(username, password);
 
@@ -27,6 +33,7 @@ AppServices.Controllers.controller('LoginCtrl', ['ug', '$scope', '$rootScope', '
   $scope.$on('loginFailed',function(){
     $scope.loading = false;
     //let the user know the login was not valid
+    ug.setClientProperty('developerkey', null);
     $scope.loginMessage = "Error: the username / password combination was not valid";
     $scope.applyScope();
   });
@@ -53,9 +60,6 @@ AppServices.Controllers.controller('LoginCtrl', ['ug', '$scope', '$rootScope', '
 
   $scope.$on('loginSuccesful', function(event, user, organizations, applications) {
     $scope.loading = false;
-    if($scope.requiresDeveloperKey){
-      ug.setClientProperty('developerkey', $scope.login.developerkey);
-    }
     $scope.login = {};
 
     //if on login page, send to org overview page.  if on a different page, let them stay there

http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/097fd3bd/portal/js/login/login.html
----------------------------------------------------------------------
diff --git a/portal/js/login/login.html b/portal/js/login/login.html
index d0286b1..7b0055a 100755
--- a/portal/js/login/login.html
+++ b/portal/js/login/login.html
@@ -13,7 +13,7 @@
   <div class="login-holder">
   <form name="loginForm" id="login-form"  ng-submit="login()" class="form-horizontal" novalidate>
     <h1 class="title">Enter your credentials</h1>
-    <div class="alert-error" ng-if="loginMessage">{{loginMessage}}</div>
+    <div class="alert-error" id="loginError" ng-if="loginMessage">{{loginMessage}}</div>
     <div class="control-group">
       <label class="control-label" for="login-username">Email or Username:</label>
       <div class="controls">
@@ -51,4 +51,5 @@
     <a ng-click="showModal('sendActivationLink')"  name="button-resend-activation" id="button-resend-activation"
        value="" class="btn btn-primary pull-left">Resend Activation Link</a>
   </div>
+  <div id="gtm" style="width: 450px;margin-top: 4em;" />
 </div>

http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/097fd3bd/portal/js/org-overview/org-overview-controller.js
----------------------------------------------------------------------
diff --git a/portal/js/org-overview/org-overview-controller.js b/portal/js/org-overview/org-overview-controller.js
index 47fa8ea..75b8ffb 100644
--- a/portal/js/org-overview/org-overview-controller.js
+++ b/portal/js/org-overview/org-overview-controller.js
@@ -1,6 +1,6 @@
 'use strict'
 
-AppServices.Controllers.controller('OrgOverviewCtrl', ['ug', '$scope','$rootScope', '$routeParams', '$location', function (ug, $scope, $rootScope, $routeParams, $location) {
+AppServices.Controllers.controller('OrgOverviewCtrl', ['ug', 'help', '$scope','$rootScope', '$routeParams', '$location', function (ug, help, $scope, $rootScope, $routeParams, $location) {
 
   var init = function(oldOrg){
     //deal with double firing initialization logic
@@ -83,4 +83,4 @@ AppServices.Controllers.controller('OrgOverviewCtrl', ['ug', '$scope','$rootScop
     init();
   }
 
-}]);
+}]);
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/097fd3bd/portal/js/org-overview/org-overview.html
----------------------------------------------------------------------
diff --git a/portal/js/org-overview/org-overview.html b/portal/js/org-overview/org-overview.html
index 5e4891d..2f6e1b1 100644
--- a/portal/js/org-overview/org-overview.html
+++ b/portal/js/org-overview/org-overview.html
@@ -5,14 +5,24 @@
   <section class="row-fluid">
 
   <div class="span6">
-
-    <h2 class="title">Current Organization </h2>
-    <table class="table table-striped">
-      <tr>
-        <td id="org-overview-name">{{currentOrganization.name}}</td>
-        <td style="text-align: right">{{currentOrganization.uuid}}</td>
-      </tr>
-    </table>
+  	<bsmodal id="introjs"
+             title="Welcome to the API BaaS Admin Portal"
+             close="hideModal"
+             closelabel="Skip"
+             extrabutton="startFirstTimeUser"
+             extrabuttonlabel="Take the tour"
+             ng-cloak>
+      <p>To get started, click 'Take the tour' for a full walkthrough of the admin portal, or click 'Skip' to start working right away.</p>
+    </bsmodal>
+		<div id="intro-4-current-org">	
+	    <h2 class="title">Current Organization <a class="help_tooltip" ng-mouseover="help.sendTooltipGA('current org')" ng-show="help.helpTooltipsEnabled" href="#" ng-attr-tooltip="{{tooltip_current_org}}" tooltip-placement="right">(?)</a></h2>
+	    <table class="table table-striped">
+	      <tr>
+	        <td id="org-overview-name">{{currentOrganization.name}}</td>
+	        <td style="text-align: right">{{currentOrganization.uuid}}</td>
+	      </tr>
+	    </table>
+		</div>
 
     <bsmodal id="newApplication"
              title="Create New Application"
@@ -23,22 +33,22 @@
              ng-cloak>
       <p>New application name: <input ng-model="$parent.newApp.name"  ug-validate required type="text" ng-pattern="appNameRegex" ng-attr-title="{{appNameRegexDescription}}" /></p>
     </bsmodal>
-
-    <h2 class="title" > Applications
-      <div class="header-button btn-group pull-right">
-        <a class="btn filter-selector" style="{{applicationsSize === 10 ? 'width:290px':''}}"  ng-click="showModal('newApplication')">
-          <span class="filter-label">Add New App</span>
-        </a>
-      </div>
-    </h2>
-
-    <table class="table table-striped">
-      <tr ng-repeat="application in applications">
-        <td>{{application.name}}</td>
-        <td style="text-align: right">{{application.uuid}}</td>
-      </tr>
-    </table>
-
+		<div id="intro-5-applications">		
+	    <h2 class="title" > Applications <a class="help_tooltip" ng-show="help.helpTooltipsEnabled" ng-mouseover="help.sendTooltipGA('applications')" href="#" ng-attr-tooltip="{{tooltip_applications}}" tooltip-placement="right">(?)</a>
+	      <div class="header-button btn-group pull-right">
+	        <a class="btn filter-selector" style="{{applicationsSize === 10 ? 'width:290px':''}}"  ng-click="showModal('newApplication')">
+	          <span class="filter-label">Add New App</span>
+	        </a>
+	      </div>
+	    </h2>
+		
+	    <table class="table table-striped">
+	      <tr ng-repeat="application in applications">
+	        <td>{{application.name}}</td>
+	        <td style="text-align: right">{{application.uuid}}</td>
+	      </tr>
+	    </table>
+		</div>
     <bsmodal id="regenerateCredentials"
              title="Confirmation"
              close="hideModal"
@@ -48,26 +58,26 @@
              ng-cloak>
       Are you sure you want to regenerate the credentials?
     </bsmodal>
-
-    <h2 class="title" >Organization API Credentials
-      <div class="header-button btn-group pull-right">
-        <a class="btn filter-selector" ng-click="showModal('regenerateCredentials')">
-          <span class="filter-label">Regenerate Org Credentials</span>
-        </a>
-      </div>
-    </h2>
-
-    <table class="table table-striped">
-      <tr>
-        <td >Client ID</td>
-        <td style="text-align: right" >{{orgAPICredentials.client_id}}</td>
-      </tr>
-      <tr>
-        <td>Client Secret</td>
-        <td style="text-align: right">{{orgAPICredentials.client_secret}}</td>
-      </tr>
-    </table>
-
+		<div id="intro-6-org-api-creds">
+	    <h2 class="title" >Organization API Credentials <a class="help_tooltip" ng-mouseover="help.sendTooltipGA('api org credentials')" ng-show="help.helpTooltipsEnabled" href="#" ng-attr-tooltip="{{tooltip_org_api_creds}}" tooltip-placement="right">(?)</a>
+	      <div class="header-button btn-group pull-right">
+	        <a class="btn filter-selector" ng-click="showModal('regenerateCredentials')">
+	          <span class="filter-label">Regenerate Org Credentials</span>
+	        </a>
+	      </div>
+	    </h2>
+	
+	    <table class="table table-striped">
+	      <tr>
+	        <td >Client ID</td>
+	        <td style="text-align: right" >{{orgAPICredentials.client_id}}</td>
+	      </tr>
+	      <tr>
+	        <td>Client Secret</td>
+	        <td style="text-align: right">{{orgAPICredentials.client_secret}}</td>
+	      </tr>
+	    </table>
+		</div>
     <bsmodal id="newAdministrator"
              title="Create New Administrator"
              close="hideModal"
@@ -77,35 +87,34 @@
              ng-cloak>
       <p>New administrator email: <input id="newAdminInput" ug-validate ng-model="$parent.admin.email" pattern="emailRegex" ng-attr-title="{{emailRegexDescription}}" required type="email" /></p>
     </bsmodal>
-
-    <h2 class="title" >Organization Administrators
-      <div class="header-button btn-group pull-right">
-        <a class="btn filter-selector" ng-click="showModal('newAdministrator')">
-          <span class="filter-label">Add New Administrator</span>
-        </a>
-      </div>
-    </h2>
-
-    <table class="table table-striped">
-      <tr ng-repeat="administrator in orgAdministrators">
-        <td><img style="width:30px;height:30px;" ng-src="{{administrator.image}}"> {{administrator.name}}</td>
-        <td style="text-align: right">{{administrator.email}}</td>
-      </tr>
-    </table>
-
-
+		<div id="intro-7-org-admins">
+	    <h2 class="title" >Organization Administrators <a class="help_tooltip" ng-mouseover="help.sendTooltipGA('org admins')" ng-show="help.helpTooltipsEnabled" href="#" ng-attr-tooltip="{{tooltip_org_admins}}" tooltip-placement="right">(?)</a>
+	      <div class="header-button btn-group pull-right">
+	        <a class="btn filter-selector" ng-click="showModal('newAdministrator')">
+	          <span class="filter-label">Add New Administrator</span>
+	        </a>
+	      </div>
+	    </h2>
+	
+	    <table class="table table-striped">
+	      <tr ng-repeat="administrator in orgAdministrators">
+	        <td><img style="width:30px;height:30px;" ng-src="{{administrator.image}}"> {{administrator.name}}</td>
+	        <td style="text-align: right">{{administrator.email}}</td>
+	      </tr>
+	    </table>
+			</div>
   </div>
 
   <div class="span6">
-
-    <h2 class="title">Activities </h2>
-    <table class="table table-striped">
-      <tr ng-repeat="activity in activities">
-        <td>{{activity.title}}</td>
-        <td style="text-align: right">{{activity.date}}</td>
-      </tr>
-    </table>
-
+  	<div id="intro-8-activities">
+	    <h2 class="title">Activities <a class="help_tooltip" ng-mouseover="help.sendTooltipGA('activities')" ng-show="help.helpTooltipsEnabled" href="#" ng-attr-tooltip="{{tooltip_activities}}" tooltip-placement="right">(?)</a></h2>
+	    <table class="table table-striped">
+	      <tr ng-repeat="activity in activities">
+	        <td>{{activity.title}}</td>
+	        <td style="text-align: right">{{activity.date}}</td>
+	      </tr>
+	    </table>
+	</div>
   </div>
 
 

http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/097fd3bd/portal/js/org-overview/org-overview.html.orig
----------------------------------------------------------------------
diff --git a/portal/js/org-overview/org-overview.html.orig b/portal/js/org-overview/org-overview.html.orig
new file mode 100644
index 0000000..416019f
--- /dev/null
+++ b/portal/js/org-overview/org-overview.html.orig
@@ -0,0 +1,188 @@
+<div class="org-overview-content" ng-show="activeUI" ng-controller="OrgOverviewCtrl">
+
+  <page-title title=" Org Administration" icon="&#128362;"></page-title>
+  <section class="row-fluid">
+  <div class="span6">
+	<div id="intro-4-current-org">	
+	    <h2 class="title">Current Organization <a class="help_tooltip" ng-show="help.helpTooltip" href="#" ng-attr-tooltip="{{tooltip_current_org}}" tooltip-placement="right">(?)</a></h2>
+	    <table class="table table-striped">
+	      <tr>
+	        <td id="org-overview-name">{{currentOrganization.name}}</td>
+	        <td style="text-align: right">{{currentOrganization.uuid}}</td>
+	      </tr>
+	    </table>
+	</div>
+    <bsmodal id="newApplication"
+             title="Create New Application"
+             close="hideModal"
+             closelabel="Cancel"
+             extrabutton="newApplicationDialog"
+             extrabuttonlabel="Create"
+             ng-cloak>
+      <p>New application name: <input ng-model="$parent.newApp.name"  ug-validate required type="text" ng-pattern="appNameRegex" ng-attr-title="{{appNameRegexDescription}}" /></p>
+    </bsmodal>
+<<<<<<< HEAD
+	<div id="intro-5-applications">
+	    <h2 class="title" > Applications <a class="help_tooltip" ng-show="help.helpTooltip" href="#" ng-attr-tooltip="{{tooltip_applications}}" tooltip-placement="right">(?)</a>
+	      <div class="header-button btn-group pull-right">
+	        <a class="btn filter-selector" style="{{applicationsSize === 10 ? 'width:290px':''}}"  ng-disabled="!addApplications" ng-click="(addApplications ? showModal('newApplication') : '')">
+	          <span class="filter-label">{{!addApplications ? 'You have met your 10 app limit' : 'Add New App'}}</span>
+	        </a>
+	      </div>
+	    </h2>
+	
+	    <table class="table table-striped">
+	      <tr ng-repeat="application in applications">
+	        <td>{{application.name}}</td>
+	        <td style="text-align: right">{{application.uuid}}</td>
+	      </tr>
+	    </table>
+	</div>
+	
+	<div id="intro-6-org-api-creds">		
+	    <bsmodal id="regenerateCredentials"
+	             title="Confirmation"
+	             close="hideModal"
+	             closelabel="Cancel"
+	             extrabutton="regenerateCredentialsDialog"
+	             extrabuttonlabel="Yes"
+	             ng-cloak>
+	      Are you sure you want to regenerate the credentials?
+	    </bsmodal>
+	
+	    <h2 class="title" >Organization API Credentials <a class="help_tooltip" ng-show="help.helpTooltip" href="#" ng-attr-tooltip="{{tooltip_org_api_creds}}" tooltip-placement="right">(?)</a>
+	      <div class="header-button btn-group pull-right">
+	        <a class="btn filter-selector" ng-click="showModal('regenerateCredentials')">
+	          <span class="filter-label">Regenerate Org Credentials</span>
+	        </a>
+	      </div>
+	    </h2>
+	
+	    <table class="table table-striped">
+	      <tr>
+	        <td >Client ID</td>
+	        <td style="text-align: right" >{{orgAPICredentials.client_id}}</td>
+	      </tr>
+	      <tr>
+	        <td>Client Secret</td>
+	        <td style="text-align: right">{{orgAPICredentials.client_secret}}</td>
+	      </tr>
+	    </table>
+	</div>
+ 	<div id="intro-7-org-admins">   
+	    <bsmodal id="newAdministrator"
+	             title="Create New Administrator"
+	             close="hideModal"
+	             closelabel="Cancel"
+	             extrabutton="newAdministratorDialog"
+	             extrabuttonlabel="Create"
+	             ng-cloak>
+	      <p>New administrator email: <input id="newAdminInput" ug-validate ng-model="$parent.admin.email" pattern="emailRegex" ng-attr-title="{{emailRegexDescription}}" required type="email" /></p>
+	    </bsmodal>
+	
+	    <h2 class="title" >Organization Administrators <a class="help_tooltip" ng-show="help.helpTooltip" href="#" ng-attr-tooltip="{{tooltip_org_admins}}" tooltip-placement="right">(?)</a>
+	      <div class="header-button btn-group pull-right">
+	        <a class="btn filter-selector" ng-click="showModal('newAdministrator')">
+	          <span class="filter-label">Add New Administrator</span>
+	        </a>
+	      </div>
+	    </h2>
+	
+	    <table class="table table-striped">
+	      <tr ng-repeat="administrator in orgAdministrators">
+	        <td><img style="width:30px;height:30px;" ng-src="{{administrator.image}}"> {{administrator.name}}</td>
+	        <td style="text-align: right">{{administrator.email}}</td>
+	      </tr>
+	    </table>
+
+	</div>
+=======
+
+    <h2 class="title" > Applications
+      <div class="header-button btn-group pull-right">
+        <a class="btn filter-selector" style="{{applicationsSize === 10 ? 'width:290px':''}}"  ng-click="showModal('newApplication')">
+          <span class="filter-label">Add New App</span>
+        </a>
+      </div>
+    </h2>
+
+    <table class="table table-striped">
+      <tr ng-repeat="application in applications">
+        <td>{{application.name}}</td>
+        <td style="text-align: right">{{application.uuid}}</td>
+      </tr>
+    </table>
+
+    <bsmodal id="regenerateCredentials"
+             title="Confirmation"
+             close="hideModal"
+             closelabel="Cancel"
+             extrabutton="regenerateCredentialsDialog"
+             extrabuttonlabel="Yes"
+             ng-cloak>
+      Are you sure you want to regenerate the credentials?
+    </bsmodal>
+
+    <h2 class="title" >Organization API Credentials
+      <div class="header-button btn-group pull-right">
+        <a class="btn filter-selector" ng-click="showModal('regenerateCredentials')">
+          <span class="filter-label">Regenerate Org Credentials</span>
+        </a>
+      </div>
+    </h2>
+
+    <table class="table table-striped">
+      <tr>
+        <td >Client ID</td>
+        <td style="text-align: right" >{{orgAPICredentials.client_id}}</td>
+      </tr>
+      <tr>
+        <td>Client Secret</td>
+        <td style="text-align: right">{{orgAPICredentials.client_secret}}</td>
+      </tr>
+    </table>
+
+    <bsmodal id="newAdministrator"
+             title="Create New Administrator"
+             close="hideModal"
+             closelabel="Cancel"
+             extrabutton="newAdministratorDialog"
+             extrabuttonlabel="Create"
+             ng-cloak>
+      <p>New administrator email: <input id="newAdminInput" ug-validate ng-model="$parent.admin.email" pattern="emailRegex" ng-attr-title="{{emailRegexDescription}}" required type="email" /></p>
+    </bsmodal>
+
+    <h2 class="title" >Organization Administrators
+      <div class="header-button btn-group pull-right">
+        <a class="btn filter-selector" ng-click="showModal('newAdministrator')">
+          <span class="filter-label">Add New Administrator</span>
+        </a>
+      </div>
+    </h2>
+
+    <table class="table table-striped">
+      <tr ng-repeat="administrator in orgAdministrators">
+        <td><img style="width:30px;height:30px;" ng-src="{{administrator.image}}"> {{administrator.name}}</td>
+        <td style="text-align: right">{{administrator.email}}</td>
+      </tr>
+    </table>
+
+
+>>>>>>> upstream/master
+  </div>
+
+  <div class="span6">
+  	<div id="intro-8-activities">
+	    <h2 class="title">Activities <a class="help_tooltip" ng-show="help.helpTooltip" href="#" ng-attr-tooltip="{{tooltip_activities}}" tooltip-placement="right">(?)</a></h2>
+	    <table class="table table-striped">
+	      <tr ng-repeat="activity in activities">
+	        <td>{{activity.title}}</td>
+	        <td style="text-align: right">{{activity.date}}</td>
+	      </tr>
+	    </table>
+	</div>
+  </div>
+
+
+  </section>
+</div>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/097fd3bd/portal/js/roles/roles.html
----------------------------------------------------------------------
diff --git a/portal/js/roles/roles.html b/portal/js/roles/roles.html
index 9070ff5..9fbd6f0 100644
--- a/portal/js/roles/roles.html
+++ b/portal/js/roles/roles.html
@@ -8,6 +8,7 @@
            closelabel="Cancel"
            extrabutton="newRoleDialog"
            extrabuttonlabel="Create"
+           buttonid="roles"
            ng-cloak>
           <fieldset>
             <div class="control-group">
@@ -31,6 +32,7 @@
            title="Delete Role"
            close="hideModal"
            closelabel="Cancel"
+           buttonid="deleteroles"
            extrabutton="deleteRoleDialog"
            extrabuttonlabel="Delete"
            ng-cloak>
@@ -42,8 +44,8 @@
 
       <div class="button-toolbar span12">
         <a title="Select All" class="btn btn-primary select-all toolbar" ng-show="hasRoles" ng-click="selectAllEntities(rolesCollection._list,this,'rolesSelected',true)"> <i class="pictogram">&#8863;</i></a>
-        <button title="Delete" class="btn btn-primary toolbar"  ng-disabled="!hasRoles || !valueSelected(rolesCollection._list)" ng-click="showModal('deleteRole')"><i class="pictogram">&#9749;</i></button>
-        <button title="Add" class="btn btn-primary toolbar" ng-click="showModal('newRole')"><i class="pictogram">&#59136;</i></button>
+        <button id="delete-role-btn" title="Delete" class="btn btn-primary toolbar"  ng-disabled="!hasRoles || !valueSelected(rolesCollection._list)" ng-click="showModal('deleteRole')"><i class="pictogram">&#9749;</i></button>
+        <button id="add-role-btn" title="Add" class="btn btn-primary toolbar" ng-click="showModal('newRole')"><i class="pictogram">&#59136;</i></button>
       </div>
 
       <ul class="user-list">
@@ -53,8 +55,9 @@
               ng-value="role.get('uuid')"
               ng-checked="master"
               ng-model="role.checked"
+              id="role-{{role.get('title')}}-cb"
               >
-          <a >{{role.get('title')}}</a>
+          <a id="role-{{role.get('title')}}-link">{{role.get('title')}}</a>
           <br/>
           <span ng-if="role.get('name')" class="label">Role Name:</span>{{role.get('name')}}
         </li>

http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/097fd3bd/portal/js/shell/shell-controller.js
----------------------------------------------------------------------
diff --git a/portal/js/shell/shell-controller.js b/portal/js/shell/shell-controller.js
index 22ef75d..e5058e7 100644
--- a/portal/js/shell/shell-controller.js
+++ b/portal/js/shell/shell-controller.js
@@ -8,7 +8,7 @@ AppServices.Controllers.controller('ShellCtrl', ['ug', '$scope', '$log','$sce',
         return ;
       }
       handleShellCommand($scope.shell.input);
-      $scope.shell.input ="";
+     // $scope.shell.input ="";
     };
 
     var handleShellCommand = function (s) {
@@ -80,10 +80,11 @@ AppServices.Controllers.controller('ShellCtrl', ['ug', '$scope', '$log','$sce',
 
     var  printLnToShell =  function (s) {
       if (!s) s = "&nbsp;";
+      $scope.shell.outputhidden = s;
       var html = '<div class="shell-output-line"><div class="shell-output-line-content">' + s + '</div></div>';
       html += ' ';
       var trustedHtml = $sce.trustAsHtml( html);
-      $scope.shell.output += trustedHtml.toString()
+      $scope.shell.output += trustedHtml.toString();
     }
 
     $scope.$on('shell-success',function(evt,data){

http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/097fd3bd/portal/js/shell/shell.html
----------------------------------------------------------------------
diff --git a/portal/js/shell/shell.html b/portal/js/shell/shell.html
index b1261b9..b14682e 100644
--- a/portal/js/shell/shell.html
+++ b/portal/js/shell/shell.html
@@ -16,5 +16,6 @@
     <pre id="shell-output" class="prettyprint lang-js" style="overflow-x: auto; height: 400px;" ng-bind-html="shell.output">
 
     </pre>
+    <div id="lastshelloutput" ng-bind-html="shell.outputhidden" style="visibility:hidden"></div>
   </div>
 </section>

http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/097fd3bd/portal/js/templates.js
----------------------------------------------------------------------
diff --git a/portal/js/templates.js b/portal/js/templates.js
index ba8724d..03116e3 100644
--- a/portal/js/templates.js
+++ b/portal/js/templates.js
@@ -1584,7 +1584,7 @@ angular.module('appservices').run(['$templateCache', function($templateCache) {
     "\n" +
     "    <h1 class=\"title\">Enter your credentials</h1>\r" +
     "\n" +
-    "    <div class=\"alert-error\" ng-if=\"loginMessage\">{{loginMessage}}</div>\r" +
+    "    <div class=\"alert-error\" id=\"loginError\" ng-if=\"loginMessage\">{{loginMessage}}</div>\r" +
     "\n" +
     "    <div class=\"control-group\">\r" +
     "\n" +
@@ -1660,6 +1660,8 @@ angular.module('appservices').run(['$templateCache', function($templateCache) {
     "\n" +
     "  </div>\r" +
     "\n" +
+    "  <div id=\"gtm\" style=\"width: 450px;margin-top: 4em;\" />\r" +
+    "\n" +
     "</div>\r" +
     "\n"
   );
@@ -1823,14 +1825,24 @@ angular.module('appservices').run(['$templateCache', function($templateCache) {
     "  <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" +
+    "  \t<bsmodal id=\"introjs\"\n" +
+    "             title=\"Welcome to the API BaaS Admin Portal\"\n" +
+    "             close=\"hideModal\"\n" +
+    "             closelabel=\"Skip\"\n" +
+    "             extrabutton=\"startFirstTimeUser\"\n" +
+    "             extrabuttonlabel=\"Take the tour\"\n" +
+    "             ng-cloak>\n" +
+    "      <p>To get started, click 'Take the tour' for a full walkthrough of the admin portal, or click 'Skip' to start working right away.</p>\n" +
+    "    </bsmodal>\n" +
+    "\t\t<div id=\"intro-4-current-org\">\t\n" +
+    "\t    <h2 class=\"title\">Current Organization <a class=\"help_tooltip\" ng-mouseover=\"help.sendTooltipGA('current org')\" ng-show=\"help.helpTooltipsEnabled\" href=\"#\" ng-attr-tooltip=\"{{tooltip_current_org}}\" tooltip-placement=\"right\">(?)</a></h2>\n" +
+    "\t    <table class=\"table table-striped\">\n" +
+    "\t      <tr>\n" +
+    "\t        <td id=\"org-overview-name\">{{currentOrganization.name}}</td>\n" +
+    "\t        <td style=\"text-align: right\">{{currentOrganization.uuid}}</td>\n" +
+    "\t      </tr>\n" +
+    "\t    </table>\n" +
+    "\t\t</div>\n" +
     "\n" +
     "    <bsmodal id=\"newApplication\"\n" +
     "             title=\"Create New Application\"\n" +
@@ -1841,22 +1853,22 @@ angular.module('appservices').run(['$templateCache', function($templateCache) {
     "             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" +
+    "\t\t<div id=\"intro-5-applications\">\t\t\n" +
+    "\t    <h2 class=\"title\" > Applications <a class=\"help_tooltip\" ng-show=\"help.helpTooltipsEnabled\" ng-mouseover=\"help.sendTooltipGA('applications')\" href=\"#\" ng-attr-tooltip=\"{{tooltip_applications}}\" tooltip-placement=\"right\">(?)</a>\n" +
+    "\t      <div class=\"header-button btn-group pull-right\">\n" +
+    "\t        <a class=\"btn filter-selector\" style=\"{{applicationsSize === 10 ? 'width:290px':''}}\"  ng-click=\"showModal('newApplication')\">\n" +
+    "\t          <span class=\"filter-label\">Add New App</span>\n" +
+    "\t        </a>\n" +
+    "\t      </div>\n" +
+    "\t    </h2>\n" +
+    "\t\t\n" +
+    "\t    <table class=\"table table-striped\">\n" +
+    "\t      <tr ng-repeat=\"application in applications\">\n" +
+    "\t        <td>{{application.name}}</td>\n" +
+    "\t        <td style=\"text-align: right\">{{application.uuid}}</td>\n" +
+    "\t      </tr>\n" +
+    "\t    </table>\n" +
+    "\t\t</div>\n" +
     "    <bsmodal id=\"regenerateCredentials\"\n" +
     "             title=\"Confirmation\"\n" +
     "             close=\"hideModal\"\n" +
@@ -1866,26 +1878,26 @@ angular.module('appservices').run(['$templateCache', function($templateCache) {
     "             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" +
+    "\t\t<div id=\"intro-6-org-api-creds\">\n" +
+    "\t    <h2 class=\"title\" >Organization API Credentials <a class=\"help_tooltip\" ng-mouseover=\"help.sendTooltipGA('api org credentials')\" ng-show=\"help.helpTooltipsEnabled\" href=\"#\" ng-attr-tooltip=\"{{tooltip_org_api_creds}}\" tooltip-placement=\"right\">(?)</a>\n" +
+    "\t      <div class=\"header-button btn-group pull-right\">\n" +
+    "\t        <a class=\"btn filter-selector\" ng-click=\"showModal('regenerateCredentials')\">\n" +
+    "\t          <span class=\"filter-label\">Regenerate Org Credentials</span>\n" +
+    "\t        </a>\n" +
+    "\t      </div>\n" +
+    "\t    </h2>\n" +
+    "\t\n" +
+    "\t    <table class=\"table table-striped\">\n" +
+    "\t      <tr>\n" +
+    "\t        <td >Client ID</td>\n" +
+    "\t        <td style=\"text-align: right\" >{{orgAPICredentials.client_id}}</td>\n" +
+    "\t      </tr>\n" +
+    "\t      <tr>\n" +
+    "\t        <td>Client Secret</td>\n" +
+    "\t        <td style=\"text-align: right\">{{orgAPICredentials.client_secret}}</td>\n" +
+    "\t      </tr>\n" +
+    "\t    </table>\n" +
+    "\t\t</div>\n" +
     "    <bsmodal id=\"newAdministrator\"\n" +
     "             title=\"Create New Administrator\"\n" +
     "             close=\"hideModal\"\n" +
@@ -1895,35 +1907,34 @@ angular.module('appservices').run(['$templateCache', function($templateCache) {
     "             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" +
+    "\t\t<div id=\"intro-7-org-admins\">\n" +
+    "\t    <h2 class=\"title\" >Organization Administrators <a class=\"help_tooltip\" ng-mouseover=\"help.sendTooltipGA('org admins')\" ng-show=\"help.helpTooltipsEnabled\" href=\"#\" ng-attr-tooltip=\"{{tooltip_org_admins}}\" tooltip-placement=\"right\">(?)</a>\n" +
+    "\t      <div class=\"header-button btn-group pull-right\">\n" +
+    "\t        <a class=\"btn filter-selector\" ng-click=\"showModal('newAdministrator')\">\n" +
+    "\t          <span class=\"filter-label\">Add New Administrator</span>\n" +
+    "\t        </a>\n" +
+    "\t      </div>\n" +
+    "\t    </h2>\n" +
+    "\t\n" +
+    "\t    <table class=\"table table-striped\">\n" +
+    "\t      <tr ng-repeat=\"administrator in orgAdministrators\">\n" +
+    "\t        <td><img style=\"width:30px;height:30px;\" ng-src=\"{{administrator.image}}\"> {{administrator.name}}</td>\n" +
+    "\t        <td style=\"text-align: right\">{{administrator.email}}</td>\n" +
+    "\t      </tr>\n" +
+    "\t    </table>\n" +
+    "\t\t\t</div>\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" +
+    "  \t<div id=\"intro-8-activities\">\n" +
+    "\t    <h2 class=\"title\">Activities <a class=\"help_tooltip\" ng-mouseover=\"help.sendTooltipGA('activities')\" ng-show=\"help.helpTooltipsEnabled\" href=\"#\" ng-attr-tooltip=\"{{tooltip_activities}}\" tooltip-placement=\"right\">(?)</a></h2>\n" +
+    "\t    <table class=\"table table-striped\">\n" +
+    "\t      <tr ng-repeat=\"activity in activities\">\n" +
+    "\t        <td>{{activity.title}}</td>\n" +
+    "\t        <td style=\"text-align: right\">{{activity.date}}</td>\n" +
+    "\t      </tr>\n" +
+    "\t    </table>\n" +
+    "\t</div>\n" +
     "  </div>\n" +
     "\n" +
     "\n" +
@@ -2352,6 +2363,7 @@ angular.module('appservices').run(['$templateCache', function($templateCache) {
     "           closelabel=\"Cancel\"\n" +
     "           extrabutton=\"newRoleDialog\"\n" +
     "           extrabuttonlabel=\"Create\"\n" +
+    "           buttonid=\"roles\"\n" +
     "           ng-cloak>\n" +
     "          <fieldset>\n" +
     "            <div class=\"control-group\">\n" +
@@ -2375,6 +2387,7 @@ angular.module('appservices').run(['$templateCache', function($templateCache) {
     "           title=\"Delete Role\"\n" +
     "           close=\"hideModal\"\n" +
     "           closelabel=\"Cancel\"\n" +
+    "           buttonid=\"deleteroles\"\n" +
     "           extrabutton=\"deleteRoleDialog\"\n" +
     "           extrabuttonlabel=\"Delete\"\n" +
     "           ng-cloak>\n" +
@@ -2386,8 +2399,8 @@ angular.module('appservices').run(['$templateCache', function($templateCache) {
     "\n" +
     "      <div class=\"button-toolbar span12\">\n" +
     "        <a title=\"Select All\" class=\"btn btn-primary 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" +
+    "        <button id=\"delete-role-btn\" 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 id=\"add-role-btn\" 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" +
@@ -2397,8 +2410,9 @@ angular.module('appservices').run(['$templateCache', function($templateCache) {
     "              ng-value=\"role.get('uuid')\"\n" +
     "              ng-checked=\"master\"\n" +
     "              ng-model=\"role.checked\"\n" +
+    "              id=\"role-{{role.get('title')}}-cb\"\n" +
     "              >\n" +
-    "          <a >{{role.get('title')}}</a>\n" +
+    "          <a id=\"role-{{role.get('title')}}-link\">{{role.get('title')}}</a>\n" +
     "          <br/>\n" +
     "          <span ng-if=\"role.get('name')\" class=\"label\">Role Name:</span>{{role.get('name')}}\n" +
     "        </li>\n" +
@@ -2447,6 +2461,7 @@ angular.module('appservices').run(['$templateCache', function($templateCache) {
     "    <pre id=\"shell-output\" class=\"prettyprint lang-js\" style=\"overflow-x: auto; height: 400px;\" ng-bind-html=\"shell.output\">\n" +
     "\n" +
     "    </pre>\n" +
+    "    <div id=\"lastshelloutput\" ng-bind-html=\"shell.outputhidden\" style=\"visibility:hidden\"></div>\n" +
     "  </div>\n" +
     "</section>\n"
   );