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:31 UTC
[37/50] [abbrv] adding help framework adding google analytics
framework bug fixes
http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/097fd3bd/portal/index-debug.html
----------------------------------------------------------------------
diff --git a/portal/index-debug.html b/portal/index-debug.html
index 0aaf485..3435072 100644
--- a/portal/index-debug.html
+++ b/portal/index-debug.html
@@ -8,14 +8,15 @@
<meta name="description" content="">
<meta name="author" content="">
- <link id="libScript" href="2.0.0/js/libs/bootstrap/custom/css/bootstrap.min.css" rel="stylesheet">
- <link id="libScript" href="2.0.0/css/dash.min.css" rel="stylesheet">
+ <link id="libScript" href="2.0.1/js/libs/bootstrap/custom/css/bootstrap.min.css" rel="stylesheet">
+ <link id="libScript" rel="stylesheet" href="2.0.1/bower_components/intro.js/introjs.css">
+ <link id="libScript" href="2.0.1/css/dash.min.css" rel="stylesheet">
<!--styles for jquery ui calendar component-->
- <link id="libScript" rel="stylesheet" type="text/css" href="2.0.0/js/libs/jqueryui/jquery-ui-1.8.9.custom.css">
- <link id="libScript" rel="stylesheet" type="text/css" href="2.0.0/js/libs/jqueryui/jquery-ui-timepicker.css">
+ <link id="libScript" rel="stylesheet" type="text/css" href="2.0.1/js/libs/jqueryui/jquery-ui-1.8.9.custom.css">
+ <link id="libScript" rel="stylesheet" type="text/css" href="2.0.1/js/libs/jqueryui/jquery-ui-timepicker.css">
</head>
-<body ng-controller="PageCtrl">
+<body ng-controller="PageCtrl" ng-intro-onchange="help.introjs_ChangeEvent" ng-intro-options="help.IntroOptions" ng-intro-onexit="help.introjs_ExitEvent" ng-intro-method="startHelp" ng-intro-autostart="false">
<!-- Google Tag Manager -->
<noscript><iframe src="//www.googletagmanager.com/ns.html?id=GTM-N52333" height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript>
<script>(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start':
@@ -32,18 +33,20 @@
<span class="icon-bar"></span>
<span class="icon-bar"></span>
</button>
- <a class="brand" href="#"><img src="img/logo.gif"></a>
-
+ <a class="brand" href="#"><img src="img/logo.gif"></a>
<div appswitcher=""></div>
<div class="nav-collapse collapse" ng-show="loaded">
-
+ <div class="navbar-text pull-left" ng-if="activeUI">
+ <button class="helpButton" ng-class="{helpButtonClicked:help.helpTooltipsEnabled}" ng-click="help.toggleTooltips()" ng-show="help.showHelpButtons">{{help.helpButtonStatus}}</button>
+ <button class="helpButton" ng-click="startHelp(); help.introjs_StartEvent();" ng-show="help.showHelpButtons">Take the Tour</button>
+ </div>
<div class="navbar-text pull-right" ng-if="activeUI">
<span class="navbar-text" id="userEmail">{{userEmail}}</span> |
<span ng-controller="LoginCtrl"><a id="logout-link" ng-click="logout()" title="logout"><i class="pictogram"></i></a></span>
<span><a ng-click="profile()" title="profile"><i class="pictogram"></i></a></span> |
- <span><a href="archive/" target="_blank">Legacy Portal</a></span>
+ <span><a href="archive/" target="_blank">Legacy Portal</a></span> |
</div>
</div>
@@ -52,13 +55,15 @@
</header>
<section class="side-menu" ng-cloak="" ng-show="activeUI">
<div class="sidebar-nav">
- <div class="nav-collapse collapse">
+ <div id="intro-1-org" class="nav-collapse collapse">
<org-menu context="orgmenu"></org-menu>
</div>
- <div class="nav-collapse collapse" id="sideMenu">
- <ul class="nav nav-list" menu="sideMenu"><li class="option active" ng-cloak=""><a data-ng-href="#!/org-overview"><i class="pictogram">🕪</i>Org Administration</a></li><li class="option " ng-cloak=""><a data-ng-href="#!/getting-started/setup"><i class="pictogram">🚀</i>Getting Started</a></li><li class="option " ng-cloak=""><a data-ng-href="#!/app-overview/summary"><i class="pictogram"></i>App Overview</a><ul class="nav nav-list"><li><a data-ng-href="#!/app-overview/summary"><i class="pictogram sub">📱</i>Summary</a></li></ul></li><li class="option " ng-cloak=""><a data-ng-href="#!/users"><i class="pictogram">👤</i>Users</a><ul class="nav nav-list"><li><a data-ng-href="#!/users"><i class="pictogram sub">👤</i>Users</a></li></ul><ul class="nav nav-list"><li><a data-ng-href="#!/groups"><i class="pictogram sub">👥</i>Groups</a></li></ul><ul class="nav nav-list"><li><a data-ng-href="#!/roles"><i class="pictogram sub"></i>Roles
</a></li></ul></li><li class="option " ng-cloak=""><a data-ng-href="#!/data"><i class="pictogram">📸</i>Data</a><ul class="nav nav-list"><li><a data-ng-href="#!/data"><i class="pictogram sub">📾</i>Collections</a></li></ul></li><li class="option " ng-cloak=""><a data-ng-href="#!/activities"><i class="pictogram"></i>Activities</a></li><li class="option " ng-cloak=""><a data-ng-href="#!/shell"><i class="pictogram">⌨</i>Shell</a></li></ul></div>
+ <div id="intro-3-side-menu">
+ <div class="nav-collapse collapse" id="sideMenu">
+ <ul class="nav nav-list" menu="sideMenu"><li class="option active" ng-cloak=""><a data-ng-href="#!/org-overview"><i class="pictogram">🕪</i>Org Administration</a></li><li class="option " ng-cloak=""><a data-ng-href="#!/getting-started/setup"><i class="pictogram">🚀</i>Getting Started</a></li><li class="option " ng-cloak=""><a data-ng-href="#!/app-overview/summary"><i class="pictogram"></i>App Overview</a><ul class="nav nav-list"><li><a data-ng-href="#!/app-overview/summary"><i class="pictogram sub">📱</i>Summary</a></li></ul></li><li class="option " ng-cloak=""><a data-ng-href="#!/users"><i class="pictogram">👤</i>Users</a><ul class="nav nav-list"><li><a data-ng-href="#!/users"><i class="pictogram sub">👤</i>Users</a></li></ul><ul class="nav nav-list"><li><a data-ng-href="#!/groups"><i class="pictogram sub">👥</i>Groups</a></li></ul><ul class="nav nav-list"><li><a data-ng-href="#!/roles"><i class="pictogram sub"></i>Role
s</a></li></ul></li><li class="option " ng-cloak=""><a data-ng-href="#!/data"><i class="pictogram">📸</i>Data</a><ul class="nav nav-list"><li><a data-ng-href="#!/data"><i class="pictogram sub">📾</i>Collections</a></li></ul></li><li class="option " ng-cloak=""><a data-ng-href="#!/activities"><i class="pictogram"></i>Activities</a></li><li class="option " ng-cloak=""><a data-ng-href="#!/shell"><i class="pictogram">⌨</i>Shell</a></li></ul></div>
+ </div>
</div>
</section>
@@ -66,21 +71,23 @@
<div class="container-fluid">
<div class="row-fluid">
<div class="span12">
-
+ <bsmodal id="tooltips" title="Help Tooltips Enabled" close="hideModal" closelabel="OK" ng-cloak="">
+ <p>Hover your cursor over the '(?)' icons to get helpful tips and information.</p>
+ </bsmodal>
<!--header app/org context nav-->
<nav class="navbar secondary" ng-show="activeUI">
<div class="container-fluid">
<div class="row-fluid">
<div class="span12">
- <div class="span5">
+ <div class="span5" id="intro-2-app-menu">
<app-menu></app-menu>
</div>
<div class="span7 button-area">
<div class="nav-collapse collapse">
<ul class="helper-links nav span12">
<li class="sdks span12">
- <ul class="pull-right">
+ <ul id="intro-9-sdks" class="pull-right">
<li class="title"><label>SDKs and Modules</label></li>
<li><a target="_blank" href="http://apigee.com/docs/usergrid/content/sdks-and-examples#ios"><i class="sdk-icon-ios"></i></a></li>
<li><a target="_blank" href="http://apigee.com/docs/usergrid/content/sdks-and-examples#android"><i class="sdk-icon-android"></i></a></li>
@@ -115,14 +122,13 @@
</div>
</div>
</section>
-<script id="libScript" src="2.0.0/js/libs/usergrid-libs.min.js"></script>
-<script id="libScript" src="2.0.0/js/libs/bootstrap/custom/js/bootstrap.min.js"></script>
+<script id="libScript" src="2.0.1/js/libs/usergrid-libs.min.js"></script>
+<script id="libScript" src="2.0.1/js/libs/bootstrap/custom/js/bootstrap.min.js"></script>
<!--todo - remove this. temporarily including jquery ui for calendar in push-->
-<script id="libScript" src="2.0.0/js/libs/jqueryui/jquery.ui.timepicker.min.js" type="text/javascript"></script>
+<script id="libScript" src="2.0.1/js/libs/jqueryui/jquery.ui.timepicker.min.js" type="text/javascript"></script>
<!-- In dev use: <script src="js/libs/angular-1.1.5.js"></script> -->
<!--<script type="text/javascript" src="js/libs/angular-ui-ng-grid/ng-grid-2.0.2.debug.js"></script>-->
<script src="config.js"></script>
-<script id="main-script" src="2.0.0/js/usergrid-dev.min.js"></script>
-
+<script id="main-script" src="2.0.1/js/usergrid-dev.min.js"></script>
</body>
</html>
http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/097fd3bd/portal/index-template.html
----------------------------------------------------------------------
diff --git a/portal/index-template.html b/portal/index-template.html
index 650ef42..4a8c103 100644
--- a/portal/index-template.html
+++ b/portal/index-template.html
@@ -9,13 +9,14 @@
<meta name="author" content="">
<link id="libScript" href="js/libs/bootstrap/custom/css/bootstrap.min.css" rel="stylesheet"/>
+ <link id="libScript" rel="stylesheet" href="bower_components/intro.js/introjs.css">
<link id="libScript" href="css/dash.min.css" rel="stylesheet"/>
<!--styles for jquery ui calendar component-->
<link id="libScript" rel="stylesheet" type="text/css" href="js/libs/jqueryui/jquery-ui-1.8.9.custom.css"/>
<link id="libScript" rel="stylesheet" type="text/css" href="js/libs/jqueryui/jquery-ui-timepicker.css"/>
</head>
-<body ng-controller="PageCtrl" >
+<body ng-controller="PageCtrl" ng-intro-onchange="help.introjs_ChangeEvent" ng-intro-options="help.IntroOptions" ng-intro-onexit="help.introjs_ExitEvent" ng-intro-method="startHelp" ng-intro-autostart="false">
<!-- Google Tag Manager -->
<noscript><iframe src="//www.googletagmanager.com/ns.html?id=GTM-N52333"
height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript>
@@ -33,18 +34,20 @@
<span class="icon-bar"></span>
<span class="icon-bar"></span>
</button>
- <a class="brand" href="#"><img src="img/logo.gif"/></a>
-
+ <a class="brand" href="#"><img src="img/logo.gif"/></a>
<div appswitcher ></div>
<div class="nav-collapse collapse" ng-show="loaded">
-
+ <div class="navbar-text pull-left" ng-if="activeUI">
+ <button class="helpButton" ng-class='{helpButtonClicked:help.helpTooltipsEnabled}' ng-click="help.toggleTooltips()" ng-show="help.showHelpButtons">{{help.helpButtonStatus}}</button>
+ <button class="helpButton" ng-click="startHelp(); help.introjs_StartEvent();" ng-show="help.showHelpButtons">Take the Tour</button>
+ </div>
<div class="navbar-text pull-right" ng-if="activeUI">
<span class="navbar-text" id="userEmail" >{{userEmail}}</span> |
<span ng-controller="LoginCtrl"><a id="logout-link" ng-click="logout()" title="logout"><i class="pictogram"></i></a></span>
<span ><a ng-click="profile()" title="profile"><i class="pictogram"></i></a></span> |
- <span><a href="archive/" target="_blank">Legacy Portal</a></span>
+ <span><a href="archive/" target="_blank">Legacy Portal</a></span> |
</div>
</div>
@@ -53,13 +56,15 @@
</header>
<section class="side-menu" ng-cloak ng-show="activeUI">
<div class="sidebar-nav">
- <div class="nav-collapse collapse">
+ <div id="intro-1-org" class="nav-collapse collapse">
<org-menu context="orgmenu" ></org-menu>
</div>
- <div class="nav-collapse collapse" id="sideMenu">
- </div>
+ <div id="intro-3-side-menu">
+ <div class="nav-collapse collapse" id="sideMenu">
+ </div>
+ </div>
</div>
</section>
@@ -67,21 +72,27 @@
<div class="container-fluid">
<div class="row-fluid">
<div class="span12">
-
+ <bsmodal id="tooltips"
+ title="Help Tooltips Enabled"
+ close="hideModal"
+ closelabel="OK"
+ ng-cloak>
+ <p>Hover your cursor over the '(?)' icons to get helpful tips and information.</p>
+ </bsmodal>
<!--header app/org context nav-->
<nav class="navbar secondary" ng-show="activeUI">
<div class="container-fluid">
<div class="row-fluid">
<div class="span12">
- <div class="span5">
+ <div class="span5" id="intro-2-app-menu">
<app-menu></app-menu>
</div>
<div class="span7 button-area">
<div class="nav-collapse collapse">
<ul class="helper-links nav span12">
<li class="sdks span12">
- <ul class="pull-right">
+ <ul id="intro-9-sdks" class="pull-right">
<li class="title"><label>SDKs and Modules</label></li>
<li><a target="_blank" href="http://apigee.com/docs/usergrid/content/sdks-and-examples#ios"><i class="sdk-icon-ios"></i></a></li>
<li><a target="_blank" href="http://apigee.com/docs/usergrid/content/sdks-and-examples#android"><i class="sdk-icon-android"></i></a></li>
@@ -124,6 +135,5 @@
<!--<script type="text/javascript" src="js/libs/angular-ui-ng-grid/ng-grid-2.0.2.debug.js"></script>-->
<script src="config.js"></script>
<script id="main-script" src="js/usergrid.min.js"></script>
-
</body>
</html>
http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/097fd3bd/portal/index.html
----------------------------------------------------------------------
diff --git a/portal/index.html b/portal/index.html
index 6a00379..883c077 100644
--- a/portal/index.html
+++ b/portal/index.html
@@ -8,14 +8,15 @@
<meta name="description" content="">
<meta name="author" content="">
- <link id="libScript" href="2.0.0/js/libs/bootstrap/custom/css/bootstrap.min.css" rel="stylesheet">
- <link id="libScript" href="2.0.0/css/dash.min.css" rel="stylesheet">
+ <link id="libScript" href="2.0.1/js/libs/bootstrap/custom/css/bootstrap.min.css" rel="stylesheet">
+ <link id="libScript" rel="stylesheet" href="2.0.1/bower_components/intro.js/introjs.css">
+ <link id="libScript" href="2.0.1/css/dash.min.css" rel="stylesheet">
<!--styles for jquery ui calendar component-->
- <link id="libScript" rel="stylesheet" type="text/css" href="2.0.0/js/libs/jqueryui/jquery-ui-1.8.9.custom.css">
- <link id="libScript" rel="stylesheet" type="text/css" href="2.0.0/js/libs/jqueryui/jquery-ui-timepicker.css">
+ <link id="libScript" rel="stylesheet" type="text/css" href="2.0.1/js/libs/jqueryui/jquery-ui-1.8.9.custom.css">
+ <link id="libScript" rel="stylesheet" type="text/css" href="2.0.1/js/libs/jqueryui/jquery-ui-timepicker.css">
</head>
-<body ng-controller="PageCtrl">
+<body ng-controller="PageCtrl" ng-intro-onchange="help.introjs_ChangeEvent" ng-intro-options="help.IntroOptions" ng-intro-onexit="help.introjs_ExitEvent" ng-intro-method="startHelp" ng-intro-autostart="false">
<!-- Google Tag Manager -->
<noscript><iframe src="//www.googletagmanager.com/ns.html?id=GTM-N52333" height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript>
<script>(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start':
@@ -32,18 +33,20 @@
<span class="icon-bar"></span>
<span class="icon-bar"></span>
</button>
- <a class="brand" href="#"><img src="img/logo.gif"></a>
-
+ <a class="brand" href="#"><img src="img/logo.gif"></a>
<div appswitcher=""></div>
<div class="nav-collapse collapse" ng-show="loaded">
-
+ <div class="navbar-text pull-left" ng-if="activeUI">
+ <button class="helpButton" ng-class="{helpButtonClicked:help.helpTooltipsEnabled}" ng-click="help.toggleTooltips()" ng-show="help.showHelpButtons">{{help.helpButtonStatus}}</button>
+ <button class="helpButton" ng-click="startHelp(); help.introjs_StartEvent();" ng-show="help.showHelpButtons">Take the Tour</button>
+ </div>
<div class="navbar-text pull-right" ng-if="activeUI">
<span class="navbar-text" id="userEmail">{{userEmail}}</span> |
<span ng-controller="LoginCtrl"><a id="logout-link" ng-click="logout()" title="logout"><i class="pictogram"></i></a></span>
<span><a ng-click="profile()" title="profile"><i class="pictogram"></i></a></span> |
- <span><a href="archive/" target="_blank">Legacy Portal</a></span>
+ <span><a href="archive/" target="_blank">Legacy Portal</a></span> |
</div>
</div>
@@ -52,13 +55,15 @@
</header>
<section class="side-menu" ng-cloak="" ng-show="activeUI">
<div class="sidebar-nav">
- <div class="nav-collapse collapse">
+ <div id="intro-1-org" class="nav-collapse collapse">
<org-menu context="orgmenu"></org-menu>
</div>
- <div class="nav-collapse collapse" id="sideMenu">
- <ul class="nav nav-list" menu="sideMenu"><li class="option active" ng-cloak=""><a data-ng-href="#!/org-overview"><i class="pictogram">🕪</i>Org Administration</a></li><li class="option " ng-cloak=""><a data-ng-href="#!/getting-started/setup"><i class="pictogram">🚀</i>Getting Started</a></li><li class="option " ng-cloak=""><a data-ng-href="#!/app-overview/summary"><i class="pictogram"></i>App Overview</a><ul class="nav nav-list"><li><a data-ng-href="#!/app-overview/summary"><i class="pictogram sub">📱</i>Summary</a></li></ul></li><li class="option " ng-cloak=""><a data-ng-href="#!/users"><i class="pictogram">👤</i>Users</a><ul class="nav nav-list"><li><a data-ng-href="#!/users"><i class="pictogram sub">👤</i>Users</a></li></ul><ul class="nav nav-list"><li><a data-ng-href="#!/groups"><i class="pictogram sub">👥</i>Groups</a></li></ul><ul class="nav nav-list"><li><a data-ng-href="#!/roles"><i class="pictogram sub"></i>Roles
</a></li></ul></li><li class="option " ng-cloak=""><a data-ng-href="#!/data"><i class="pictogram">📸</i>Data</a><ul class="nav nav-list"><li><a data-ng-href="#!/data"><i class="pictogram sub">📾</i>Collections</a></li></ul></li><li class="option " ng-cloak=""><a data-ng-href="#!/activities"><i class="pictogram"></i>Activities</a></li><li class="option " ng-cloak=""><a data-ng-href="#!/shell"><i class="pictogram">⌨</i>Shell</a></li></ul></div>
+ <div id="intro-3-side-menu">
+ <div class="nav-collapse collapse" id="sideMenu">
+ <ul class="nav nav-list" menu="sideMenu"><li class="option active" ng-cloak=""><a data-ng-href="#!/org-overview"><i class="pictogram">🕪</i>Org Administration</a></li><li class="option " ng-cloak=""><a data-ng-href="#!/getting-started/setup"><i class="pictogram">🚀</i>Getting Started</a></li><li class="option " ng-cloak=""><a data-ng-href="#!/app-overview/summary"><i class="pictogram"></i>App Overview</a><ul class="nav nav-list"><li><a data-ng-href="#!/app-overview/summary"><i class="pictogram sub">📱</i>Summary</a></li></ul></li><li class="option " ng-cloak=""><a data-ng-href="#!/users"><i class="pictogram">👤</i>Users</a><ul class="nav nav-list"><li><a data-ng-href="#!/users"><i class="pictogram sub">👤</i>Users</a></li></ul><ul class="nav nav-list"><li><a data-ng-href="#!/groups"><i class="pictogram sub">👥</i>Groups</a></li></ul><ul class="nav nav-list"><li><a data-ng-href="#!/roles"><i class="pictogram sub"></i>Role
s</a></li></ul></li><li class="option " ng-cloak=""><a data-ng-href="#!/data"><i class="pictogram">📸</i>Data</a><ul class="nav nav-list"><li><a data-ng-href="#!/data"><i class="pictogram sub">📾</i>Collections</a></li></ul></li><li class="option " ng-cloak=""><a data-ng-href="#!/activities"><i class="pictogram"></i>Activities</a></li><li class="option " ng-cloak=""><a data-ng-href="#!/shell"><i class="pictogram">⌨</i>Shell</a></li></ul></div>
+ </div>
</div>
</section>
@@ -66,21 +71,23 @@
<div class="container-fluid">
<div class="row-fluid">
<div class="span12">
-
+ <bsmodal id="tooltips" title="Help Tooltips Enabled" close="hideModal" closelabel="OK" ng-cloak="">
+ <p>Hover your cursor over the '(?)' icons to get helpful tips and information.</p>
+ </bsmodal>
<!--header app/org context nav-->
<nav class="navbar secondary" ng-show="activeUI">
<div class="container-fluid">
<div class="row-fluid">
<div class="span12">
- <div class="span5">
+ <div class="span5" id="intro-2-app-menu">
<app-menu></app-menu>
</div>
<div class="span7 button-area">
<div class="nav-collapse collapse">
<ul class="helper-links nav span12">
<li class="sdks span12">
- <ul class="pull-right">
+ <ul id="intro-9-sdks" class="pull-right">
<li class="title"><label>SDKs and Modules</label></li>
<li><a target="_blank" href="http://apigee.com/docs/usergrid/content/sdks-and-examples#ios"><i class="sdk-icon-ios"></i></a></li>
<li><a target="_blank" href="http://apigee.com/docs/usergrid/content/sdks-and-examples#android"><i class="sdk-icon-android"></i></a></li>
@@ -115,14 +122,13 @@
</div>
</div>
</section>
-<script id="libScript" src="2.0.0/js/libs/usergrid-libs.min.js"></script>
-<script id="libScript" src="2.0.0/js/libs/bootstrap/custom/js/bootstrap.min.js"></script>
+<script id="libScript" src="2.0.1/js/libs/usergrid-libs.min.js"></script>
+<script id="libScript" src="2.0.1/js/libs/bootstrap/custom/js/bootstrap.min.js"></script>
<!--todo - remove this. temporarily including jquery ui for calendar in push-->
-<script id="libScript" src="2.0.0/js/libs/jqueryui/jquery.ui.timepicker.min.js" type="text/javascript"></script>
+<script id="libScript" src="2.0.1/js/libs/jqueryui/jquery.ui.timepicker.min.js" type="text/javascript"></script>
<!-- In dev use: <script src="js/libs/angular-1.1.5.js"></script> -->
<!--<script type="text/javascript" src="js/libs/angular-ui-ng-grid/ng-grid-2.0.2.debug.js"></script>-->
<script src="config.js"></script>
-<script id="main-script" src="2.0.0/js/usergrid.min.js"></script>
-
+<script id="main-script" src="2.0.1/js/usergrid.min.js"></script>
</body>
</html>
http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/097fd3bd/portal/js/app.js
----------------------------------------------------------------------
diff --git a/portal/js/app.js b/portal/js/app.js
index 274d50e..cb81fc4 100644
--- a/portal/js/app.js
+++ b/portal/js/app.js
@@ -1,21 +1,21 @@
'use strict';
//todo - where does angular recommend we put polyfills????
-var polyfills = function(window,Object){
- window.requestAnimFrame = (function(){
- return window.requestAnimationFrame ||
- window.webkitRequestAnimationFrame ||
- window.mozRequestAnimationFrame ||
- window.oRequestAnimationFrame ||
- window.msRequestAnimationFrame ||
- function(/* function */ callback, /* DOMElement */ element){
- window.setTimeout(callback, 1000 / 60);
- };
+var polyfills = function(window, Object) {
+ window.requestAnimFrame = (function() {
+ return window.requestAnimationFrame ||
+ window.webkitRequestAnimationFrame ||
+ window.mozRequestAnimationFrame ||
+ window.oRequestAnimationFrame ||
+ window.msRequestAnimationFrame ||
+ function( /* function */ callback, /* DOMElement */ element) {
+ window.setTimeout(callback, 1000 / 60);
+ };
})();
Object.defineProperty(Object.prototype, "clone", {
enumerable: false,
writable: true,
- value: function () {
+ value: function() {
var i, newObj = (this instanceof Array) ? [] : {};
for (i in this) {
if (i === 'clone') {
@@ -34,15 +34,15 @@ var polyfills = function(window,Object){
Object.defineProperty(Object.prototype, "stringifyJSON", {
enumerable: false,
writable: true,
- value: function () {
- return JSON.stringify(this, null, '\t') ;
+ value: function() {
+ return JSON.stringify(this, null, '\t');
}
});
};
polyfills(window,Object);
-
+var global=global||this;
var AppServices = AppServices || {};
global.AppServices = global.AppServices || AppServices;
@@ -52,69 +52,172 @@ AppServices.Controllers = angular.module('appservices.controllers', []);
AppServices.Filters = angular.module('appservices.filters', []);
AppServices.Directives = angular.module('appservices.directives', []);
AppServices.Performance = angular.module('appservices.performance', []);
-AppServices.Push = angular.module('appservices.push', []);
+AppServices.MAX = angular.module('appservices.max', []);
+
+angular.module('appservices', ['ngRoute',
+ 'ngResource',
+ 'ngSanitize',
+ 'ui.bootstrap',
+ 'angulartics',
+ 'angulartics.google.analytics',
+ 'appservices.filters',
+ 'appservices.services',
+ 'appservices.directives',
+ 'appservices.constants',
+ 'appservices.controllers',
+ 'appservices.max',
+ 'angular-intro',
+]).config(['$routeProvider', '$locationProvider', '$sceDelegateProvider', '$analyticsProvider',
+ function($routeProvider, $locationProvider, $sceDelegateProvider, $analyticsProvider) {
+ $routeProvider
+ .when('/org-overview', {
+ templateUrl: 'org-overview/org-overview.html',
+ controller: 'OrgOverviewCtrl'
+ })
+ .when('/login', {
+ templateUrl: 'login/login.html',
+ controller: 'LoginCtrl'
+ })
+ .when('/login/loading', {
+ templateUrl: 'login/loading.html',
+ controller: 'LoginCtrl'
+ })
+ .when('/app-overview/summary', {
+ templateUrl: 'app-overview/app-overview.html',
+ controller: 'AppOverviewCtrl'
+ })
+ .when('/getting-started/setup', {
+ templateUrl: 'app-overview/getting-started.html',
+ controller: 'GettingStartedCtrl'
+ })
+ .when('/forgot-password', {
+ templateUrl: 'login/forgot-password.html',
+ controller: 'ForgotPasswordCtrl'
+ })
+ .when('/register', {
+ templateUrl: 'login/register.html',
+ controller: 'RegisterCtrl'
+ })
+ .when('/users', {
+ templateUrl: 'users/users.html',
+ controller: 'UsersCtrl'
+ })
+ .when('/users/profile', {
+ templateUrl: 'users/users-profile.html',
+ controller: 'UsersProfileCtrl'
+ })
+ .when('/users/groups', {
+ templateUrl: 'users/users-groups.html',
+ controller: 'UsersGroupsCtrl'
+ })
+ .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'
+ })
+ .when('/users/roles', {
+ templateUrl: 'users/users-roles.html',
+ controller: 'UsersRolesCtrl'
+ })
+ .when('/groups', {
+ templateUrl: 'groups/groups.html',
+ controller: 'GroupsCtrl'
+ })
+ .when('/groups/details', {
+ templateUrl: 'groups/groups-details.html',
+ controller: 'GroupsDetailsCtrl'
+ })
+ .when('/groups/members', {
+ templateUrl: 'groups/groups-members.html',
+ controller: 'GroupsMembersCtrl'
+ })
+ .when('/groups/activities', {
+ templateUrl: 'groups/groups-activities.html',
+ controller: 'GroupsActivitiesCtrl'
+ })
+ .when('/groups/roles', {
+ templateUrl: 'groups/groups-roles.html',
+ controller: 'GroupsRolesCtrl'
+ })
+ .when('/roles', {
+ templateUrl: 'roles/roles.html',
+ controller: 'RolesCtrl'
+ })
+ .when('/roles/settings', {
+ templateUrl: 'roles/roles-settings.html',
+ controller: 'RolesSettingsCtrl'
+ })
+ .when('/roles/users', {
+ templateUrl: 'roles/roles-users.html',
+ controller: 'RolesUsersCtrl'
+ })
+ .when('/roles/groups', {
+ templateUrl: 'roles/roles-groups.html',
+ controller: 'RolesGroupsCtrl'
+ })
+ .when('/data', {
+ templateUrl: 'data/data.html',
+ controller: 'DataCtrl'
+ })
+ .when('/data/entity', {
+ templateUrl: 'data/entity.html',
+ controller: 'EntityCtrl'
+ })
+ .when('/data/shell', {
+ templateUrl: 'data/shell.html',
+ controller: 'ShellCtrl'
+ })
+ .when('/profile/organizations', {
+ templateUrl: 'profile/organizations.html',
+ controller: 'OrgCtrl'
+ })
+ .when('/profile/profile', {
+ templateUrl: 'profile/profile.html',
+ controller: 'ProfileCtrl'
+ })
+ .when('/profile', {
+ templateUrl: 'profile/account.html',
+ controller: 'AccountCtrl'
+ })
+ .when('/activities', {
+ templateUrl: 'activities/activities.html',
+ controller: 'ActivitiesCtrl'
+ })
+ .when('/shell', {
+ templateUrl: 'shell/shell.html',
+ controller: 'ShellCtrl'
+ })
+ .when('/logout', {
+ templateUrl: 'login/logout.html',
+ controller: 'LogoutCtrl'
+ })
+ .otherwise({
+ redirectTo: '/org-overview'
+ });
-angular.module('appservices',
- [ 'ngRoute',
- 'ngResource',
- 'ngSanitize',
- 'ui.bootstrap',
- 'appservices.filters',
- 'appservices.services',
- 'appservices.directives',
- 'appservices.constants',
- 'appservices.controllers',
- 'appservices.performance',
- 'appservices.push'
- ]).config(['$routeProvider', '$locationProvider','$sceDelegateProvider',
- function ($routeProvider,$locationProvider,$sceDelegateProvider) {
- $routeProvider
- .when('/org-overview', {templateUrl: 'org-overview/org-overview.html', controller: 'OrgOverviewCtrl'})
- .when('/login', {templateUrl: 'login/login.html', controller: 'LoginCtrl'})
- .when('/login/loading', {templateUrl: 'login/loading.html', controller: 'LoginCtrl'})
- .when('/app-overview/summary', {templateUrl: 'app-overview/app-overview.html', controller: 'AppOverviewCtrl'})
- .when('/getting-started/setup', {templateUrl: 'app-overview/getting-started.html', controller: 'GettingStartedCtrl'})
- .when('/forgot-password', {templateUrl: 'login/forgot-password.html', controller: 'ForgotPasswordCtrl'})
- .when('/register', {templateUrl: 'login/register.html', controller: 'RegisterCtrl'})
- .when('/users', {templateUrl: 'users/users.html', controller: 'UsersCtrl'})
- .when('/users/profile', {templateUrl: 'users/users-profile.html', controller: 'UsersProfileCtrl'})
- .when('/users/groups', {templateUrl: 'users/users-groups.html', controller: 'UsersGroupsCtrl'})
- .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'})
- .when('/users/roles', {templateUrl: 'users/users-roles.html', controller: 'UsersRolesCtrl'})
- .when('/groups', {templateUrl: 'groups/groups.html', controller: 'GroupsCtrl'})
- .when('/groups/details', {templateUrl: 'groups/groups-details.html', controller: 'GroupsDetailsCtrl'})
- .when('/groups/members', {templateUrl: 'groups/groups-members.html', controller: 'GroupsMembersCtrl'})
- .when('/groups/activities', {templateUrl: 'groups/groups-activities.html', controller: 'GroupsActivitiesCtrl'})
- .when('/groups/roles', {templateUrl: 'groups/groups-roles.html', controller: 'GroupsRolesCtrl'})
- .when('/roles', {templateUrl: 'roles/roles.html', controller: 'RolesCtrl'})
- .when('/roles/settings', {templateUrl: 'roles/roles-settings.html', controller: 'RolesSettingsCtrl'})
- .when('/roles/users', {templateUrl: 'roles/roles-users.html', controller: 'RolesUsersCtrl'})
- .when('/roles/groups', {templateUrl: 'roles/roles-groups.html', controller: 'RolesGroupsCtrl'})
- .when('/data', {templateUrl: 'data/data.html', controller: 'DataCtrl'})
- .when('/data/entity', {templateUrl: 'data/entity.html', controller: 'EntityCtrl'})
- .when('/data/shell', {templateUrl: 'data/shell.html', controller: 'ShellCtrl'})
- .when('/profile/organizations', {templateUrl: 'profile/organizations.html', controller: 'OrgCtrl'})
- .when('/profile/profile', {templateUrl: 'profile/profile.html', controller: 'ProfileCtrl'})
- .when('/profile', {templateUrl: 'profile/account.html', controller: 'AccountCtrl'})
- .when('/activities', {templateUrl: 'activities/activities.html', controller: 'ActivitiesCtrl'})
- .when('/shell', {templateUrl: 'shell/shell.html', controller: 'ShellCtrl'})
- .when('/logout', {templateUrl: 'login/logout.html', controller: 'LogoutCtrl'})
- .otherwise({redirectTo: '/org-overview'});
+ $locationProvider
+ .html5Mode(false)
+ .hashPrefix('!');
- $locationProvider
- .html5Mode(false)
- .hashPrefix('!');
+ $sceDelegateProvider.resourceUrlWhitelist([
+ // Allow same origin resource loads.
+ 'self',
+ // Allow loading from our assets domain. Notice the difference between * and **.
+ 'http://apigee-internal-prod.jupiter.apigee.net/**',
+ 'http://apigee-internal-prod.mars.apigee.net/**',
+ 'https://appservices.apigee.com/**',
+ 'https://api.usergrid.com/**'
+ ]);
- $sceDelegateProvider.resourceUrlWhitelist([
- // Allow same origin resource loads.
- 'self',
- // Allow loading from our assets domain. Notice the difference between * and **.
- '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);
- }]);
+ }
+]);
http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/097fd3bd/portal/js/data/shell-controller.js
----------------------------------------------------------------------
diff --git a/portal/js/data/shell-controller.js b/portal/js/data/shell-controller.js
index b06bd9b..e69de29 100644
--- a/portal/js/data/shell-controller.js
+++ b/portal/js/data/shell-controller.js
@@ -1,9 +0,0 @@
-'use strict'
-
-AppServices.Controllers.controller('ShellCtrl', ['ug', '$scope', '$rootScope', '$location',
- function (ug, $scope, $rootScope, $location) {
-
-
-
-
- }]);
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/097fd3bd/portal/js/global/help-service.js
----------------------------------------------------------------------
diff --git a/portal/js/global/help-service.js b/portal/js/global/help-service.js
new file mode 100644
index 0000000..5e472a9
--- /dev/null
+++ b/portal/js/global/help-service.js
@@ -0,0 +1,140 @@
+'use strict';
+
+AppServices.Services.factory('help', function($rootScope, $http, $analytics) {
+
+ $rootScope.help = {};
+ $rootScope.help.helpButtonStatus = 'Enable Help';
+ $rootScope.help.helpTooltipsEnabled = false;
+ $rootScope.help.clicked = false;
+ $rootScope.help.showHelpButtons = false;
+ var tooltipStartTime;
+ var helpStartTime;
+ var introjs_step;
+
+ $rootScope.help.sendTooltipGA = function (tooltipName) {
+ $analytics.eventTrack('tooltip - ' + $rootScope.currentPath, {
+ category: 'App Services',
+ label: tooltipName
+ });
+ }
+
+ $rootScope.help.toggleTooltips = function() {
+ if ($rootScope.help.helpTooltipsEnabled == false) {
+ //turn on help tooltips
+ $rootScope.help.helpButtonStatus = 'Disable Help';
+ $rootScope.help.helpTooltipsEnabled = true;
+ showHelpModal('tooltips');
+ } else {
+ //turn off help tooltips
+ $rootScope.help.helpButtonStatus = 'Enable Help';
+ $rootScope.help.helpTooltipsEnabled = false;
+ }
+ };
+
+ $rootScope.help.IntroOptions = {
+ steps: [],
+ showStepNumbers: false,
+ exitOnOverlayClick: true,
+ exitOnEsc: true,
+ nextLabel: 'Next',
+ prevLabel: 'Back',
+ skipLabel: 'Got It',
+ doneLabel: 'Got it'
+ };
+
+ $rootScope.$on("$routeChangeSuccess", function(event, current) {
+ //hide the help buttons if not on org-overview page
+ var path = current.$$route.originalPath;
+ if (path == '/org-overview') {
+
+ $rootScope.help.showHelpButtons = true;
+
+ //retrieve the introjs and tooltip json for the current route
+ getHelpJson(path).success(function(json) {
+
+ var helpJson = json;
+
+ //set help strings
+ setHelpStrings(helpJson);
+
+ //show tour modal if first time user
+ showHelpModal('tour');
+ });
+ } else {
+ $rootScope.help.showHelpButtons = false;
+ }
+ });
+
+ //pop modal if local storage 'ftu_tour'/'ftu_tooltip' is not set
+ var showHelpModal = function(helpType) {
+ //visitor is first time user
+ var shouldHelp = location.search.indexOf('noHelp') <= 0;
+ if (helpType == 'tour' && !getHelpStatus(helpType)) {
+ shouldHelp && $rootScope.showModal('introjs');
+ } else if (helpType == 'tooltips' && !getHelpStatus(helpType)) {
+ shouldHelp && $rootScope.showModal('tooltips');
+ }
+ };
+
+ //set help strings
+ var setHelpStrings = function(helpJson) {
+ //Intro.js steps
+ $rootScope.help.IntroOptions.steps = helpJson.introjs;
+
+ //Tooltips
+ angular.forEach(helpJson.tooltip, function(value, binding) {
+ $rootScope[binding] = value;
+ });
+ }
+
+
+
+ //user starts introjs
+ $rootScope.help.introjs_StartEvent = function() {
+ helpStartTime = Date.now();
+ introjs_step = 1;
+ }
+
+ //user exits introjs
+ $rootScope.help.introjs_ExitEvent = function() {
+ var introjs_time = Math.round((Date.now() - helpStartTime) / 1000);
+
+ //capture time spent in introjs
+ $analytics.eventTrack('introjs timing - ' + $rootScope.currentPath, {
+ category: 'App Services',
+ label: introjs_time + 's'
+ });
+
+ //capture what introjs step user exited on
+ $analytics.eventTrack('introjs exit - ' + $rootScope.currentPath, {
+ category: 'App Services',
+ label: 'step' + introjs_step
+ });
+ };
+
+ //increment the step tracking when user goes to next introjs step
+ $rootScope.help.introjs_ChangeEvent = function() {
+ introjs_step++;
+ };
+
+ //In-portal help end
+
+
+
+ var getHelpJson = function(path) {
+ return $http.jsonp('http://sdk.apigee.com.s3.amazonaws.com/portal_help' + path + '/helpJson.json?callback=JSON_CALLBACK');
+ };
+
+ var getHelpStatus = function(helpType) {
+ var status;
+ if (helpType == 'tour') {
+ status = localStorage.getItem('ftu_tour');
+ localStorage.setItem('ftu_tour', 'false');
+ } else if (helpType == 'tooltips') {
+ status = localStorage.getItem('ftu_tooltips');
+ localStorage.setItem('ftu_tooltips', 'false');
+ }
+ return status;
+ }
+
+});
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/097fd3bd/portal/js/global/page-controller.js
----------------------------------------------------------------------
diff --git a/portal/js/global/page-controller.js b/portal/js/global/page-controller.js
index 5de913b..a1be1ad 100644
--- a/portal/js/global/page-controller.js
+++ b/portal/js/global/page-controller.js
@@ -1,119 +1,125 @@
'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) {
-
- var initScopeVariables = function(){
- //$rootScope.urls()... will determine which URL should be used for a given environment
- $scope.loadingText = 'Loading...';
- $scope.use_sso = false;
- $scope.newApp = {name: ''};
- $scope.getPerm = '';
- $scope.postPerm = '';
- $scope.putPerm = '';
- $scope.deletePerm = '';
- $scope.usersTypeaheadValues = [];
- $scope.groupsTypeaheadValues = [];
- $scope.rolesTypeaheadValues = [];
- $rootScope.sdkActive = false;
- $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];
- }
+AppServices.Controllers.controller('PageCtrl', [
+ 'ug',
+ 'help',
+ 'utility',
+ '$scope',
+ '$rootScope',
+ '$location',
+ '$routeParams',
+ '$q',
+ '$route',
+ '$log',
+ '$analytics',
+ function(
+ ug,
+ help,
+ utility,
+ $scope,
+ $rootScope,
+ $location,
+ $routeParams,
+ $q,
+ $route,
+ $log,
+ $analytics) {
+
+ var initScopeVariables = function() {
+ //$rootScope.urls()... will determine which URL should be used for a given environment
+ $scope.loadingText = 'Loading...';
+ $scope.use_sso = false;
+ $scope.newApp = {
+ name: ''
+ };
+ $scope.getPerm = '';
+ $scope.postPerm = '';
+ $scope.putPerm = '';
+ $scope.deletePerm = '';
+ $scope.usersTypeaheadValues = [];
+ $scope.groupsTypeaheadValues = [];
+ $scope.rolesTypeaheadValues = [];
+ $rootScope.sdkActive = false;
+ $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];
+ }
- $scope.options = Usergrid.options;
+ $scope.options = Usergrid.options;
- var getQuery = function () {
- var result = {}, queryString = location.search.slice(1),
- re = /([^&=]+)=([^&]*)/g, m;
- while (m = re.exec(queryString)) {
- result[decodeURIComponent(m[1])] = decodeURIComponent(m[2]);
- }
- return result;
+ var getQuery = function() {
+ var result = {}, queryString = location.search.slice(1),
+ re = /([^&=]+)=([^&]*)/g,
+ m;
+ while (m = re.exec(queryString)) {
+ result[decodeURIComponent(m[1])] = decodeURIComponent(m[2]);
+ }
+ return result;
+ };
+ $scope.queryString = getQuery();
};
- $scope.queryString = getQuery();
- };
- initScopeVariables();
+ initScopeVariables();
- $rootScope.urls = function(){
- var urls = ug.getUrls()
- $scope.apiUrl = urls.apiUrl;
- $scope.use_sso = urls.use_sso;
- return urls;
- };
+ $rootScope.urls = function() {
+ var urls = ug.getUrls()
+ $scope.apiUrl = urls.apiUrl;
+ $scope.use_sso = urls.use_sso;
+ return urls;
+ };
- //used in users
- $rootScope.gotoPage = function(path){
- $location.path(path);
- }
+ //used in users
+ $rootScope.gotoPage = function(path) {
+ $location.path(path);
+ }
- var notRegistration = function(){
- return "/forgot-password"!==$location.path() && "/register"!==$location.path();
- };
+ var notRegistration = function() {
+ return "/forgot-password" !== $location.path() && "/register" !== $location.path();
+ };
//called in ng-init on main index page (first method called at app startup and every main navigation)
- var verifyUser = function(){
- //avoid polluting our target route with login path
- if ($location.path().slice(0, '/login'.length) !== '/login') {
- $rootScope.currentPath = $location.path();
- //show loading screen during verify process
- // $location.path('/login/loading');
- }
-
- //first check to see if there is a token in the query string, if so, save it
- if ($routeParams.access_token && $routeParams.admin_email && $routeParams.uuid) {
- ug.set('token', $routeParams.access_token);
- ug.set('email', $routeParams.admin_email);
- ug.set('uuid', $routeParams.uuid);
- $location.search('access_token', null);
- $location.search('admin_email', null);
- $location.search('uuid', null);
- }
-
- //use a promise so we can update afterwards in other UI areas
- //next try to quick login
- ug.checkAuthentication(true);
- };
-
-
- $scope.profile = function(){
- if($scope.use_sso){
+ var verifyUser = function() {
+ //avoid polluting our target route with login path
+ if ($location.path().slice(0, '/login'.length) !== '/login') {
+ $rootScope.currentPath = $location.path();
+ //show loading screen during verify process
+ // $location.path('/login/loading');
+ }
+
+ //first check to see if there is a token in the query string, if so, save it
+ if ($routeParams.access_token && $routeParams.admin_email && $routeParams.uuid) {
+ ug.set('token', $routeParams.access_token);
+ ug.set('email', $routeParams.admin_email);
+ ug.set('uuid', $routeParams.uuid);
+ $location.search('access_token', null);
+ $location.search('admin_email', null);
+ $location.search('uuid', null);
+ }
+
+ //use a promise so we can update afterwards in other UI areas
+ //next try to quick login
+ ug.checkAuthentication(true);
+ };
+
+
+ $scope.profile = function() {
+ if ($scope.use_sso) {
window.location = $rootScope.urls().PROFILE_URL + '?callback=' + encodeURIComponent($location.absUrl());
- }else{
+ } else {
$location.path('/profile')
}
};
- $scope.showModal = function(id){
+ $rootScope.showModal = function(id) {
$('#' + id).modal('show')
};
- $scope.hideModal = function(id){
+ $rootScope.hideModal = function(id) {
$('#' + id).modal('hide')
};
@@ -123,26 +129,27 @@ AppServices.Controllers.controller('PageCtrl',
$scope.deleteEntities = function(collection, successBroadcast, errorMessage) {
collection.resetEntityPointer();
var entitiesToDelete = []
- while(collection.hasNextEntity()) {
+ while (collection.hasNextEntity()) {
var entity = collection.getNextEntity();
var checked = entity.checked;
- if(checked){
+ if (checked) {
entitiesToDelete.push(entity);
}
}
- var count = 0,success=false;
- for(var i=0; i<entitiesToDelete.length; i++) {
+ var count = 0,
+ success = false;
+ for (var i = 0; i < entitiesToDelete.length; i++) {
var entity = entitiesToDelete[i];
- collection.destroyEntity(entity, function(err){
+ collection.destroyEntity(entity, function(err) {
count++;
- if(err){
+ if (err) {
$rootScope.$broadcast('alert', 'error', errorMessage);
- $rootScope.$broadcast(successBroadcast+'-error',err);
- }else{
- success=true;
+ $rootScope.$broadcast(successBroadcast + '-error', err);
+ } else {
+ success = true;
}
- if(count===entitiesToDelete.length){
+ if (count === entitiesToDelete.length) {
success && $rootScope.$broadcast(successBroadcast);
$scope.applyScope();
}
@@ -150,17 +157,17 @@ AppServices.Controllers.controller('PageCtrl',
}
};
- $scope.selectAllEntities = function(list,that,varName,setValue){
+ $scope.selectAllEntities = function(list, that, varName, setValue) {
varName = varName || 'master';
- var val = that[varName] ;
- if(setValue == undefined){
+ var val = that[varName];
+ if (setValue == undefined) {
setValue = true;
}
- if(setValue){
+ if (setValue) {
that[varName] = val = !val;
}
- list.forEach(function(entitiy){
+ list.forEach(function(entitiy) {
entitiy.checked = val;
});
};
@@ -168,10 +175,10 @@ AppServices.Controllers.controller('PageCtrl',
$scope.createPermission = function(type, entity, path, permissions) {
//e.g.: "get,post,put:/mypermission"
-// var path = $scope.path;
+ // var path = $scope.path;
- if(path.charAt(0) != '/') {
- path = '/'+path;
+ if (path.charAt(0) != '/') {
+ path = '/' + path;
}
var ops = "";
var s = "";
@@ -184,11 +191,11 @@ AppServices.Controllers.controller('PageCtrl',
s = ",";
}
if (permissions.putPerm) {
- ops = ops + s + "put";
+ ops = ops + s + "put";
s = ",";
}
if (permissions.deletePerm) {
- ops = ops + s + "delete";
+ ops = ops + s + "delete";
s = ",";
}
var permission = ops + ":" + path;
@@ -196,39 +203,43 @@ AppServices.Controllers.controller('PageCtrl',
return permission
};
- $scope.formatDate = function(date){
+ $scope.formatDate = function(date) {
return new Date(date).toUTCString();
};
- $scope.clearCheckbox = function(id){
- if($('#'+id).attr('checked')){
- $('#'+id).click();
+ $scope.clearCheckbox = function(id) {
+ if ($('#' + id).attr('checked')) {
+ $('#' + id).click();
}
};
- $scope.removeFirstSlash = function(path){
- return path.indexOf('/') === 0 ? path.substring(1,path.length): path;
+ $scope.removeFirstSlash = function(path) {
+ return path.indexOf('/') === 0 ? path.substring(1, path.length) : path;
};
- $scope.applyScope = function(cb){
- cb = typeof cb === 'function' ? cb : function(){};
- if(!this.$$phase) {
+ $scope.applyScope = function(cb) {
+ cb = typeof cb === 'function' ? cb : function() {};
+ if (!this.$$phase) {
return this.$apply(cb);
- }else{
+ } else {
cb();
}
}
- $scope.valueSelected = function(list){
- return list && (list.some(function(item){return item.checked;}));
+ $scope.valueSelected = function(list) {
+ return list && (list.some(function(item) {
+ return item.checked;
+ }));
};
- $scope.sendHelp = function (modalId) {
- ug.jsonpRaw('apigeeuihelpemail', '', {useremail: $rootScope.userEmail}).then(
- function () {
+ $scope.sendHelp = function(modalId) {
+ ug.jsonpRaw('apigeeuihelpemail', '', {
+ useremail: $rootScope.userEmail
+ }).then(
+ function() {
$rootScope.$broadcast('alert', 'success', 'Email sent. Our team will be in touch with you shortly.');
},
- function () {
+ function() {
$rootScope.$broadcast('alert', 'error', 'Problem Sending Email. Try sending an email to mobile@apigee.com.');
}
);
@@ -237,24 +248,24 @@ AppServices.Controllers.controller('PageCtrl',
$scope.$on('users-typeahead-received', function(event, users) {
$scope.usersTypeaheadValues = users;
- if(!$scope.$$phase) {
+ if (!$scope.$$phase) {
$scope.$apply();
}
});
$scope.$on('groups-typeahead-received', function(event, groups) {
$scope.groupsTypeaheadValues = groups;
- if(!$scope.$$phase) {
+ if (!$scope.$$phase) {
$scope.$apply();
}
});
$scope.$on('roles-typeahead-received', function(event, roles) {
$scope.rolesTypeaheadValues = roles;
- if(!$scope.$$phase) {
+ if (!$scope.$$phase) {
$scope.$apply();
}
});
- $scope.$on('checkAuthentication-success', function () {
+ $scope.$on('checkAuthentication-success', function() {
sessionStorage.setItem('authenticateAttempts', 0);
//all is well - repopulate objects
@@ -263,12 +274,12 @@ AppServices.Controllers.controller('PageCtrl',
$scope.applyScope();
- if(!$scope.queryStringApplied){
+ if (!$scope.queryStringApplied) {
$scope.queryStringApplied = true;
- setTimeout(function(){
+ setTimeout(function() {
//if querystring exists then operate on it.
if ($scope.queryString.org) {
- $rootScope.$broadcast('change-org',$scope.queryString.org);
+ $rootScope.$broadcast('change-org', $scope.queryString.org);
}
}, 1000)
}
@@ -277,7 +288,7 @@ AppServices.Controllers.controller('PageCtrl',
});
- $scope.$on('checkAuthentication-error', function (args,err, missingData,email) {
+ $scope.$on('checkAuthentication-error', function(args, err, missingData, email) {
$scope.loaded = true;
if (err && !$scope.use_sso && notRegistration()) {
//there was an error on re-auth lite, immediately send to login
@@ -287,7 +298,7 @@ AppServices.Controllers.controller('PageCtrl',
} else {
if (missingData && notRegistration()) {
if (!email && $scope.use_sso) {
- window.location = $rootScope.urls().LOGIN_URL + '?callback=' + encodeURIComponent($location.absUrl().split('?')[0]);
+ window.location = $rootScope.urls().LOGIN_URL + '?callback=' + encodeURIComponent($location.absUrl().split('?')[0]);
return;
}
ug.reAuthenticate(email);
@@ -295,31 +306,31 @@ AppServices.Controllers.controller('PageCtrl',
}
});
- $scope.$on('reAuthenticate-success', function (args,err, data, user, organizations, applications) {
+ $scope.$on('reAuthenticate-success', function(args, err, data, user, organizations, applications) {
sessionStorage.setItem('authenticateAttempts', 0);
//the user is authenticated
$rootScope.$broadcast('loginSuccesful', user, organizations, applications);
$rootScope.$emit('loginSuccesful', user, organizations, applications);
$rootScope.$broadcast('checkAuthentication-success');
- $scope.applyScope(function () {
+ $scope.applyScope(function() {
$scope.deferredLogin.resolve();
$location.path('/org-overview');
})
});
- var authenticateAttempts = parseInt( sessionStorage.getItem('authenticateAttempts') || 0);
- $scope.$on('reAuthenticate-error', function () {
+ var authenticateAttempts = parseInt(sessionStorage.getItem('authenticateAttempts') || 0);
+ $scope.$on('reAuthenticate-error', function() {
//user is not authenticated, send to SSO if enabled
if ($scope.use_sso) {
//go to sso
- if(authenticateAttempts++>5){
+ if (authenticateAttempts++ > 5) {
$rootScope.$broadcast('alert', 'error', 'There is an issue with authentication. Please contact support.');
return;
}
- console.error('Failed to login via sso '+authenticateAttempts);
+ console.error('Failed to login via sso ' + authenticateAttempts);
sessionStorage.setItem('authenticateAttempts', authenticateAttempts);
- window.location = $rootScope.urls().LOGIN_URL + '?callback=' + encodeURIComponent($location.absUrl().split('?')[0]);
+ window.location = $rootScope.urls().LOGIN_URL + '?callback=' + encodeURIComponent($location.absUrl().split('?')[0]);
} else {
//go to login page
if (notRegistration()) {
@@ -330,39 +341,45 @@ AppServices.Controllers.controller('PageCtrl',
}
});
- $scope.$on('loginSuccessful',function(){
+ $scope.$on('loginSuccessful', function() {
$rootScope.activeUI = true;
});
- $scope.$on('app-changed',function(args,oldVal,newVal,preventReload){
- if(newVal!==oldVal && !preventReload){
+ $scope.$on('app-changed', function(args, oldVal, newVal, preventReload) {
+ if (newVal !== oldVal && !preventReload) {
$route.reload();
}
});
- $scope.$on('org-changed',function(args, oldOrg,newOrg){
+ $scope.$on('org-changed', function(args, oldOrg, newOrg) {
ug.getApplications();
$route.reload();
});
- $scope.$on('app-settings-received',function(evt,data){
- });
+ $scope.$on('app-settings-received', function(evt, data) {});
- $scope.$on('request-times-slow', function (evt, averageRequestTimes) {
+ $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 = "";
//verify on every route change
- $scope.$on('$routeChangeSuccess', function () {
+ $scope.$on('$routeChangeSuccess', function() {
//todo possibly do a date check here for token expiry
//so we don't call this on every nav change
verifyUser();
- $scope.showDemoBar = $location.path().slice(0,'/performance'.length) === '/performance';
- if(!$scope.showDemoBar){
+ $scope.showDemoBar = $location.path().slice(0, '/performance'.length) === '/performance';
+ if (!$scope.showDemoBar) {
$rootScope.demoData = false;
}
+ setTimeout(function() {
+ lastPage = ""; //remove the double load event
+ }, 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.$on('applications-received', function(event, applications) {
$scope.applications = applications;
$scope.hasApplications = Object.keys(applications).length > 0;
});
@@ -370,5 +387,16 @@ AppServices.Controllers.controller('PageCtrl',
//init app
ug.getAppSettings();
- }]);
+ //first time user takes the tour
+ $rootScope.startFirstTimeUser = function() {
+ $rootScope.hideModal('introjs');
+
+ //for GA
+ $rootScope.help.introjs_StartEvent();
+
+ //call introjs start
+ $scope.startHelp();
+ }
+ }
+]);
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/097fd3bd/portal/js/global/ug-service.js
----------------------------------------------------------------------
diff --git a/portal/js/global/ug-service.js b/portal/js/global/ug-service.js
index b9c1d3b..73838be 100644
--- a/portal/js/global/ug-service.js
+++ b/portal/js/global/ug-service.js
@@ -1,6 +1,6 @@
'use strict';
-AppServices.Services.factory('ug', function (configuration, $rootScope,utility, $q, $http, $resource, $log,$location) {
+AppServices.Services.factory('ug', function (configuration, $rootScope,utility, $q, $http, $resource, $log, $analytics,$location) {
var requestTimes = [],
running = false,
@@ -8,7 +8,9 @@ AppServices.Services.factory('ug', function (configuration, $rootScope,utility,
function reportError(data,config){
try {
-
+ $analytics.eventTrack('error', {
+ category: 'App Services', label: data + ':' + config.url + ':' + (sessionStorage['apigee_uuid'] || 'na')
+ });
} catch (e) {
console.log(e)
}
@@ -497,7 +499,7 @@ AppServices.Services.factory('ug', function (configuration, $rootScope,utility,
getIndexes: function (path) {
var options = {
method:'GET',
- endpoint: path.split('/').concat('indexes').filter(function(bit){return bit && bit.length}).join('/')
+ endpoint: path.split('/').concat('indexes').filter(function(bit){return bit && bit.length}).join('/')
}
this.client().request(options, function (err, data) {
if (err) {
@@ -755,7 +757,7 @@ AppServices.Services.factory('ug', function (configuration, $rootScope,utility,
this.client().request(options, function (err, data) {
if (err) {
console.error(data);
- $rootScope.$broadcast('alert', 'error', 'error creating notifier.' );
+ $rootScope.$broadcast('alert', 'error', data.error_description || 'error creating notifier');
} else {
$rootScope.$broadcast('alert', 'success', 'New notifier created successfully.');
$rootScope.$broadcast('notifier-update');
@@ -1006,9 +1008,10 @@ AppServices.Services.factory('ug', function (configuration, $rootScope,utility,
});
},
runShellQuery:function(method,path,payload){
+ var path = path.replace(/^\//, ''); //remove leading slash if it does
var options = {
- "verb": method,
- "endpoint":path
+ "method": method,
+ "endpoint":path
};
if(payload){
options["body"]=payload;
@@ -1147,7 +1150,7 @@ AppServices.Services.factory('ug', function (configuration, $rootScope,utility,
};
successCallback && $rootScope.$broadcast("ajax_loading", objectType);
- var reqCount = currentRequests[uri] || 0;
+ var reqCount = currentRequests[uri] || 0;
if(self.averageRequestTimes > 5 && reqCount>1){
setTimeout(function(){
deferred.reject(new Error('query in progress'));