mno-enterprise-frontend 2.0.9 → 3.0.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/app/assets/javascripts/mno_enterprise/angular/app.js.coffee.erb +0 -120
- data/app/assets/javascripts/mno_enterprise/angular/directives/maestrano-components/maestrano-components.js.coffee +0 -11
- data/app/assets/javascripts/mno_enterprise/application.js +0 -2
- data/app/assets/javascripts/mno_enterprise/lib/xeditable.js +0 -0
- data/app/assets/stylesheets/mno_enterprise/main.less +0 -28
- data/app/views/layouts/mno_enterprise/_application_js.html.haml +0 -4
- data/app/views/layouts/mno_enterprise/_common_cdn_lib_js.html.haml +0 -5
- data/app/views/layouts/mno_enterprise/_header_files.html.haml +0 -3
- data/app/views/layouts/mno_enterprise/application.html.haml +1 -1
- data/app/views/mno_enterprise/provision/_provision_apps.html.haml +7 -8
- data/config/routes.rb +1 -10
- data/lib/mno_enterprise/frontend/engine.rb +12 -0
- data/lib/mno_enterprise/frontend/locales_generator.rb +57 -0
- data/lib/tasks/mnoe_admin_tasks.rake +67 -0
- data/lib/tasks/mnoe_frontend_tasks.rake +138 -0
- data/lib/tasks/mnoe_locales.rake +14 -0
- data/lib/tasks/templates/bower.json +10 -0
- data/spec/controllers/mno_enterprise/auth/confirmations_controller_spec.rb +2 -2
- data/spec/controllers/mno_enterprise/webhook/o_auth_controller_spec.rb +1 -1
- data/spec/lib/mno_enterprise/locales_generator_spec.rb +14 -0
- data/spec/lib/tasks/mnoe_locales_rake_spec.rb +25 -0
- metadata +35 -145
- data/app/assets/images/mno_enterprise/impac/close-widget-pink.png +0 -0
- data/app/assets/images/mno_enterprise/impac/close-widget.png +0 -0
- data/app/assets/javascripts/mno_enterprise/angular/controllers/maestrano-controllers.js.coffee +0 -4
- data/app/assets/javascripts/mno_enterprise/angular/controllers/modals/modals-ctrl.js.coffee +0 -62
- data/app/assets/javascripts/mno_enterprise/angular/directives/dashboard/dashboard-account.js.coffee +0 -157
- data/app/assets/javascripts/mno_enterprise/angular/directives/dashboard/dashboard-app-deletion-request.js.coffee +0 -62
- data/app/assets/javascripts/mno_enterprise/angular/directives/dashboard/dashboard-apps-list.js.coffee +0 -127
- data/app/assets/javascripts/mno_enterprise/angular/directives/dashboard/dashboard-components.js.coffee +0 -25
- data/app/assets/javascripts/mno_enterprise/angular/directives/dashboard/dashboard-marketplace-app.js.coffee +0 -77
- data/app/assets/javascripts/mno_enterprise/angular/directives/dashboard/dashboard-marketplace.js.coffee +0 -51
- data/app/assets/javascripts/mno_enterprise/angular/directives/dashboard/dashboard-menu.js.coffee +0 -174
- data/app/assets/javascripts/mno_enterprise/angular/directives/dashboard/organization/arrears.js.coffee +0 -70
- data/app/assets/javascripts/mno_enterprise/angular/directives/dashboard/organization/billing.js.coffee +0 -48
- data/app/assets/javascripts/mno_enterprise/angular/directives/dashboard/organization/credit-card.js.coffee +0 -142
- data/app/assets/javascripts/mno_enterprise/angular/directives/dashboard/organization/index.js.coffee +0 -61
- data/app/assets/javascripts/mno_enterprise/angular/directives/dashboard/organization/invoices.js.coffee +0 -42
- data/app/assets/javascripts/mno_enterprise/angular/directives/dashboard/organization/members.js.coffee +0 -280
- data/app/assets/javascripts/mno_enterprise/angular/directives/dashboard/organization/settings.js.coffee +0 -91
- data/app/assets/javascripts/mno_enterprise/angular/directives/dashboard/organization/team-list.js.coffee +0 -179
- data/app/assets/javascripts/mno_enterprise/angular/directives/dashboard/organization/teams.js.coffee +0 -268
- data/app/assets/javascripts/mno_enterprise/angular/directives/maestrano-components/file-model.js.coffee +0 -33
- data/app/assets/javascripts/mno_enterprise/angular/directives/maestrano-components/mno-autostop-app.js.coffee +0 -123
- data/app/assets/javascripts/mno_enterprise/angular/directives/maestrano-components/mno-currency-widget.js.coffee +0 -43
- data/app/assets/javascripts/mno_enterprise/angular/directives/maestrano-components/mno-current-currency.js.coffee +0 -22
- data/app/assets/javascripts/mno_enterprise/angular/directives/maestrano-components/mno-editable.js.coffee +0 -68
- data/app/assets/javascripts/mno_enterprise/angular/directives/maestrano-components/mno-helptext.js.coffee +0 -38
- data/app/assets/javascripts/mno_enterprise/angular/directives/maestrano-components/mno-match.js.coffee +0 -14
- data/app/assets/javascripts/mno_enterprise/angular/directives/maestrano-components/mno-message-modal.js.coffee +0 -56
- data/app/assets/javascripts/mno_enterprise/angular/directives/maestrano-components/mno-partner-code-popup.js.coffee +0 -74
- data/app/assets/javascripts/mno_enterprise/angular/directives/maestrano-components/mno-partner-contact.js.coffee +0 -59
- data/app/assets/javascripts/mno_enterprise/angular/directives/maestrano-components/mno-price-converter.js.coffee +0 -49
- data/app/assets/javascripts/mno_enterprise/angular/directives/maestrano-components/mno-scroll-to.js.coffee +0 -14
- data/app/assets/javascripts/mno_enterprise/angular/directives/maestrano-components/mno-typeahead.js.coffee +0 -89
- data/app/assets/javascripts/mno_enterprise/angular/directives/user-setup/components.js.coffee +0 -7
- data/app/assets/javascripts/mno_enterprise/angular/directives/user-setup/index.js.coffee +0 -256
- data/app/assets/javascripts/mno_enterprise/angular/filters/maestrano-app-by-category.js.coffee +0 -5
- data/app/assets/javascripts/mno_enterprise/angular/filters/maestrano-currency.js.coffee +0 -30
- data/app/assets/javascripts/mno_enterprise/angular/filters/maestrano-filters.js.coffee +0 -7
- data/app/assets/javascripts/mno_enterprise/angular/filters/maestrano-replace-underscore-with-space.js.coffee +0 -4
- data/app/assets/javascripts/mno_enterprise/angular/filters/maestrano-titleize.js.coffee +0 -7
- data/app/assets/javascripts/mno_enterprise/angular/filters/maestrano-truncate.js.coffee +0 -24
- data/app/assets/javascripts/mno_enterprise/angular/services/dashboard/maestrano-app-instance.js.coffee +0 -15
- data/app/assets/javascripts/mno_enterprise/angular/services/dashboard/maestrano-apps-document.js.coffee +0 -83
- data/app/assets/javascripts/mno_enterprise/angular/services/dashboard/maestrano-user.js.coffee +0 -27
- data/app/assets/javascripts/mno_enterprise/angular/services/dashboard/organization-svc.js.coffee +0 -318
- data/app/assets/javascripts/mno_enterprise/angular/services/dashboard/team-svc.js.coffee +0 -180
- data/app/assets/javascripts/mno_enterprise/angular/services/dashboard/tickets-svc.js.coffee +0 -109
- data/app/assets/javascripts/mno_enterprise/angular/services/impac-config.svc.js.coffee +0 -35
- data/app/assets/javascripts/mno_enterprise/angular/services/maestrano-apps-list-helper.js.coffee +0 -337
- data/app/assets/javascripts/mno_enterprise/angular/services/maestrano-current-currency.js.coffee +0 -7
- data/app/assets/javascripts/mno_enterprise/angular/services/maestrano-current-user-svc.js.coffee +0 -99
- data/app/assets/javascripts/mno_enterprise/angular/services/maestrano-exchange-rates.js.coffee +0 -102
- data/app/assets/javascripts/mno_enterprise/angular/services/maestrano-miscellaneous.js.coffee.erb +0 -46
- data/app/assets/javascripts/mno_enterprise/angular/services/maestrano-modal.js.coffee +0 -67
- data/app/assets/javascripts/mno_enterprise/angular/services/maestrano-services.js.coffee +0 -21
- data/app/assets/javascripts/mno_enterprise/angular/services/maestrano-shopping-cart.js.coffee +0 -361
- data/app/assets/javascripts/mno_enterprise/angular/services/marketplace-svc.js.coffee +0 -59
- data/app/assets/javascripts/mno_enterprise/lib/angular-really-click.js +0 -17
- data/app/assets/javascripts/ng-performance/ngPerformance.html +0 -109
- data/app/assets/javascripts/ng-performance/ngPerformance.js +0 -211
- data/app/assets/stylesheets/mno_enterprise/custom/impac-variables-override.less +0 -65
- data/app/assets/stylesheets/mno_enterprise/custom/utility/app-presentation.less +0 -77
- data/app/assets/stylesheets/mno_enterprise/custom/utility/banners.less +0 -145
- data/app/assets/stylesheets/mno_enterprise/custom/utility/carousel.less +0 -68
- data/app/assets/stylesheets/mno_enterprise/custom/utility/helptext.less +0 -40
- data/app/assets/stylesheets/mno_enterprise/custom/utility/miscellaneous.less +0 -134
- data/app/assets/stylesheets/mno_enterprise/custom/utility/testimonial.less +0 -118
- data/app/assets/stylesheets/mno_enterprise/custom/views/apps.less +0 -243
- data/app/assets/stylesheets/mno_enterprise/custom/views/myspace.less +0 -477
- data/app/assets/stylesheets/mno_enterprise/custom/views/pages/home.less +0 -57
- data/app/assets/stylesheets/mno_enterprise/custom/views/star.less +0 -18
- data/app/assets/stylesheets/mno_enterprise/custom/views/templates/dashboard/bootstrap-wizard.less +0 -63
- data/app/assets/stylesheets/mno_enterprise/custom/views/templates/dashboard/dashboard-marketplace.less +0 -187
- data/app/assets/stylesheets/mno_enterprise/custom/views/templates/dashboard/dashboard-organization.less +0 -149
- data/app/assets/stylesheets/mno_enterprise/custom/views/templates/dashboard/dashboard-teams.less +0 -119
- data/app/assets/stylesheets/mno_enterprise/custom/views/templates/dashboard/support.less +0 -42
- data/app/assets/stylesheets/mno_enterprise/custom/views/templates/dashboard/tickets.less +0 -80
- data/app/assets/stylesheets/mno_enterprise/custom/views/templates/mno-editable.less +0 -60
- data/app/assets/stylesheets/mno_enterprise/custom/views/templates/shopping-cart.less +0 -333
- data/app/assets/stylesheets/mno_enterprise/custom/views/templates/star-wizard.less +0 -49
- data/app/assets/stylesheets/mno_enterprise/custom/views/user-setup.less +0 -10
- data/app/assets/templates/mno_enterprise/dashboard/account.html +0 -131
- data/app/assets/templates/mno_enterprise/dashboard/app_deletion.html +0 -36
- data/app/assets/templates/mno_enterprise/dashboard/apps_list.html +0 -103
- data/app/assets/templates/mno_enterprise/dashboard/horizontal_menu.html +0 -85
- data/app/assets/templates/mno_enterprise/dashboard/marketplace/index.html +0 -60
- data/app/assets/templates/mno_enterprise/dashboard/marketplace/show.html +0 -133
- data/app/assets/templates/mno_enterprise/dashboard/menu.html +0 -161
- data/app/assets/templates/mno_enterprise/dashboard/organization/arrears.html +0 -37
- data/app/assets/templates/mno_enterprise/dashboard/organization/billing.html +0 -37
- data/app/assets/templates/mno_enterprise/dashboard/organization/credit-card.html +0 -156
- data/app/assets/templates/mno_enterprise/dashboard/organization/index.full.html +0 -181
- data/app/assets/templates/mno_enterprise/dashboard/organization/index.html +0 -173
- data/app/assets/templates/mno_enterprise/dashboard/organization/invoices.html +0 -27
- data/app/assets/templates/mno_enterprise/dashboard/organization/members.html +0 -288
- data/app/assets/templates/mno_enterprise/dashboard/organization/settings.html +0 -55
- data/app/assets/templates/mno_enterprise/dashboard/teams/index.html +0 -175
- data/app/assets/templates/mno_enterprise/dashboard/teams/member-add-modal.html +0 -60
- data/app/assets/templates/mno_enterprise/dashboard/teams/member-removal-modal.html +0 -35
- data/app/assets/templates/mno_enterprise/dashboard/teams/team-add-modal.html +0 -35
- data/app/assets/templates/mno_enterprise/dashboard/teams/team-delete-modal.html +0 -35
- data/app/assets/templates/mno_enterprise/dashboard/teams/team-list.html +0 -107
- data/app/assets/templates/mno_enterprise/default_template.html +0 -20
- data/app/assets/templates/mno_enterprise/maestrano-components/autostop_app.html +0 -42
- data/app/assets/templates/mno_enterprise/maestrano-components/currency_widget.html +0 -1
- data/app/assets/templates/mno_enterprise/maestrano-components/editable.html +0 -28
- data/app/assets/templates/mno_enterprise/maestrano-components/modal-messages/congratulations.html +0 -8
- data/app/assets/templates/mno_enterprise/maestrano-components/modal-messages/default.html +0 -1
- data/app/assets/templates/mno_enterprise/maestrano-components/modal-messages/information.html +0 -8
- data/app/assets/templates/mno_enterprise/maestrano-components/star_wizard.html +0 -254
- data/app/assets/templates/mno_enterprise/maestrano-components/upload_spreadsheet.html +0 -191
- data/app/assets/templates/mno_enterprise/modals/new-organization-reseller-req.html +0 -35
- data/app/assets/templates/mno_enterprise/modals/new-organization.html +0 -35
- data/app/assets/templates/mno_enterprise/user-setup/index.html +0 -312
- data/app/controllers/mno_enterprise/pages_controller.rb +0 -9
- data/app/controllers/mno_enterprise/user_setup_controller.rb +0 -11
- data/app/views/layouts/mno_enterprise/_impersonate_header.html.haml +0 -7
- data/app/views/layouts/mno_enterprise/application_dashboard.html.haml +0 -22
- data/app/views/mno_enterprise/pages/myspace.html.haml +0 -6
- data/app/views/mno_enterprise/user_setup/index.html.haml +0 -2
- data/config/initializers/ng-performance.rb +0 -3
- data/lib/assets/javascripts/impac-angular.js +0 -8719
- data/lib/assets/stylesheets/impac-angular.less +0 -2352
- data/lib/mno_enterprise/frontend/concerns/README.md +0 -6
- data/lib/mno_enterprise/frontend/concerns/controllers/pages_controller.rb +0 -25
- data/spec/controllers/mno_enterprise/pages_controller_spec.rb +0 -42
- data/spec/controllers/mno_enterprise/user_setup_controller_spec.rb +0 -33
- data/spec/routing/mno_enterprise/pages_controller_routing_spec.rb +0 -18
- data/spec/routing/mno_enterprise/user_setup_controller_routing_spec.rb +0 -11
@@ -1,59 +0,0 @@
|
|
1
|
-
angular.module('maestrano.services.marketplace-svc', []).factory('MarketplaceSvc', ['$http','$q', ($http,$q) ->
|
2
|
-
# Configuration
|
3
|
-
service = {}
|
4
|
-
service.routes = {
|
5
|
-
indexPath: -> "/mnoe/jpi/v1/marketplace"
|
6
|
-
showPath: (id) -> "#{service.routes.indexPath()}/#{id}"
|
7
|
-
}
|
8
|
-
|
9
|
-
# No default config for the moment
|
10
|
-
service.defaultConfig = {}
|
11
|
-
|
12
|
-
service.config = {
|
13
|
-
$q: null # The current service promise
|
14
|
-
}
|
15
|
-
|
16
|
-
service.data = {}
|
17
|
-
|
18
|
-
#======================================
|
19
|
-
# Data Management
|
20
|
-
#======================================
|
21
|
-
# Configure the service
|
22
|
-
service.configure = (opts) ->
|
23
|
-
angular.copy(opts,service.config)
|
24
|
-
angular.extend(service.config,service.defaultConfig)
|
25
|
-
|
26
|
-
# Load the organization details
|
27
|
-
# Document structure
|
28
|
-
# :categories(all app categories)
|
29
|
-
# :apps
|
30
|
-
# [{
|
31
|
-
# :id, :name, :stack, :key_benefits,
|
32
|
-
# :is_responsive, :is_star_ready, :is_connec_ready,
|
33
|
-
# :description, :testimonials, :pictures, :tutorial_page
|
34
|
-
# }]
|
35
|
-
#
|
36
|
-
service.load = (force = false) ->
|
37
|
-
self = service
|
38
|
-
if !self.config.$q? || force
|
39
|
-
self.config.$q = $http.get(self.routes.indexPath()).then (success) ->
|
40
|
-
angular.copy(success.data,self.data)
|
41
|
-
|
42
|
-
return self.config.$q
|
43
|
-
|
44
|
-
# Force the service to reload
|
45
|
-
service.reload = ->
|
46
|
-
self.load(true).then(self.startAutoRefresh)
|
47
|
-
|
48
|
-
# Setup the service
|
49
|
-
# A load is only triggered if the service does not have
|
50
|
-
# a promise already
|
51
|
-
# To force a service reload, use the 'reload' function
|
52
|
-
service.setup = (configOpts = {})->
|
53
|
-
self = service
|
54
|
-
if !self.config.$q?
|
55
|
-
self.configure(configOpts)
|
56
|
-
self.load(true)
|
57
|
-
|
58
|
-
return service
|
59
|
-
])
|
@@ -1,17 +0,0 @@
|
|
1
|
-
/**
|
2
|
-
* A generic confirmation for risky actions.
|
3
|
-
* Usage: Add attributes: ng-really-message="Are you sure"? ng-really-click="takeAction()" function
|
4
|
-
*/
|
5
|
-
angular.module('ngReallyClick',[]).directive('ngReallyClick', [function() {
|
6
|
-
return {
|
7
|
-
restrict: 'A',
|
8
|
-
link: function(scope, element, attrs) {
|
9
|
-
element.bind('click', function() {
|
10
|
-
var message = attrs.ngReallyMessage;
|
11
|
-
if (message && confirm(message)) {
|
12
|
-
scope.$apply(attrs.ngReallyClick);
|
13
|
-
}
|
14
|
-
});
|
15
|
-
}
|
16
|
-
}
|
17
|
-
}]);
|
@@ -1,109 +0,0 @@
|
|
1
|
-
<div>
|
2
|
-
<style>
|
3
|
-
#perfStats {
|
4
|
-
position: fixed;
|
5
|
-
right: 0;
|
6
|
-
bottom: 15px;
|
7
|
-
z-index: 100000;
|
8
|
-
background-color: rgba(250, 249, 244, 0.97);
|
9
|
-
border: 3px solid #843376;
|
10
|
-
border-right: none;
|
11
|
-
border-radius: 5px 0 0 5px;
|
12
|
-
box-shadow: 0 1px 4px black;
|
13
|
-
padding: 0 15px 15px;
|
14
|
-
font-size: 0.65em;
|
15
|
-
}
|
16
|
-
#perfStats h3 {
|
17
|
-
margin-bottom: 0;
|
18
|
-
}
|
19
|
-
#perfStats td:last-child {
|
20
|
-
text-align: right;
|
21
|
-
}
|
22
|
-
</style>
|
23
|
-
<div id="perfStats">
|
24
|
-
<div id="perfStatsPanel">
|
25
|
-
<h3>ANGULAR STATS</h3>
|
26
|
-
<table class="table table-condensed">
|
27
|
-
<tbody>
|
28
|
-
<tr>
|
29
|
-
<td>Total Scopes:</td>
|
30
|
-
<td><span id="scopes">-</span></td>
|
31
|
-
</tr>
|
32
|
-
<tr>
|
33
|
-
<td>Total Watchers:</td>
|
34
|
-
<td><span id="watchers">-</span></td>
|
35
|
-
</tr>
|
36
|
-
<tr>
|
37
|
-
<td>Dirty Checks:</td>
|
38
|
-
<td><span id="dirty-checks">-</span></td>
|
39
|
-
</tr>
|
40
|
-
<tr>
|
41
|
-
<td>Digest Cycles:</td>
|
42
|
-
<td><span id="digest-cycles">-</span></td>
|
43
|
-
</tr>
|
44
|
-
<tr>
|
45
|
-
<td>Digest Cycle (last):</td>
|
46
|
-
<td>
|
47
|
-
<span id="digest-ms">-</span> ms<br>
|
48
|
-
<span id="digest-fps">-</span> FPS
|
49
|
-
</td>
|
50
|
-
</tr>
|
51
|
-
<tr>
|
52
|
-
<td>Digest Cycle (avg):</td>
|
53
|
-
<td>
|
54
|
-
<span id="avg-digest-ms">-</span> ms<br>
|
55
|
-
<span id="avg-digest-fps">-</span> FPS
|
56
|
-
</td>
|
57
|
-
</tr>
|
58
|
-
<tr>
|
59
|
-
<td>Digest Cycle (max):</td>
|
60
|
-
<td>
|
61
|
-
<span id="max-digest-ms">-</span> ms<br>
|
62
|
-
<span id="max-digest-fps">-</span> FPS
|
63
|
-
</td>
|
64
|
-
</tr>
|
65
|
-
</tbody>
|
66
|
-
</table>
|
67
|
-
|
68
|
-
<h3>PAGELOAD STATS</h3>
|
69
|
-
<table class="table table-condensed">
|
70
|
-
<tbody>
|
71
|
-
<tr>
|
72
|
-
<td>Head Load:</td>
|
73
|
-
<td><span id="head-load">-</span> ms</td>
|
74
|
-
</tr>
|
75
|
-
<tr>
|
76
|
-
<td>Body Load:</td>
|
77
|
-
<td><span id="body-load">-</span> ms</td>
|
78
|
-
</tr>
|
79
|
-
<tr>
|
80
|
-
<td>Footer Load:</td>
|
81
|
-
<td><span id="footer-load">-</span> ms</td>
|
82
|
-
</tr>
|
83
|
-
<tr>
|
84
|
-
<td>Vendor Script Load:</td>
|
85
|
-
<td><span id="vendor-load">-</span> ms</td>
|
86
|
-
</tr>
|
87
|
-
<tr>
|
88
|
-
<td>App Load:</td>
|
89
|
-
<td><span id="app-load">-</span> ms</td>
|
90
|
-
</tr>
|
91
|
-
<tr>
|
92
|
-
<td>Metrics Load:</td>
|
93
|
-
<td><span id="metrics-load">-</span> ms</td>
|
94
|
-
</tr>
|
95
|
-
<tr>
|
96
|
-
<td>Time To End-of-Page:</td>
|
97
|
-
<td><span id="time-to-eop">-</span> ms</td>
|
98
|
-
</tr>
|
99
|
-
<tr>
|
100
|
-
<td>Time To Angular:</td>
|
101
|
-
<td><span id="time-to-ng">-</span> ms</td>
|
102
|
-
</tr>
|
103
|
-
</tbody>
|
104
|
-
</table>
|
105
|
-
</div>
|
106
|
-
</div>
|
107
|
-
</div>
|
108
|
-
|
109
|
-
|
@@ -1,211 +0,0 @@
|
|
1
|
-
(function (angular) {
|
2
|
-
|
3
|
-
'use strict';
|
4
|
-
|
5
|
-
/**
|
6
|
-
* @ngdoc directive
|
7
|
-
* @name ngPerformanceApp.directive:ngPerformance
|
8
|
-
* @description
|
9
|
-
* # ngPerformance
|
10
|
-
*/
|
11
|
-
|
12
|
-
var _el;
|
13
|
-
|
14
|
-
function _setText(id, text) {
|
15
|
-
if (_el[id]) {
|
16
|
-
_el[id].textContent = text;
|
17
|
-
}
|
18
|
-
}
|
19
|
-
|
20
|
-
var ngPerformanceModule = angular.module('blndspt.ngPerformance', []);
|
21
|
-
|
22
|
-
ngPerformanceModule.directive('ngPerformance', [
|
23
|
-
'$log',
|
24
|
-
'$window',
|
25
|
-
'$document',
|
26
|
-
'$rootScope',
|
27
|
-
function ($log, $window, $document, $rootScope) {
|
28
|
-
|
29
|
-
//Initialize performance stats variables
|
30
|
-
var ngStart = (performance != null) ? performance.now() : 0;
|
31
|
-
var stats = ($window.perfStats) ? $window.perfStats :
|
32
|
-
{
|
33
|
-
TTLB: 0,
|
34
|
-
appLoad: 0,
|
35
|
-
bodyLoad: 0,
|
36
|
-
footerLoad: 0,
|
37
|
-
headLoad: 0,
|
38
|
-
headStart: 0,
|
39
|
-
metricsLoad: 0,
|
40
|
-
timeToAngular: 0,
|
41
|
-
vendorScriptLoad: 0
|
42
|
-
};
|
43
|
-
|
44
|
-
stats.timeToAngular = (ngStart - stats.headStart);
|
45
|
-
|
46
|
-
//Count Scopes and Watchers
|
47
|
-
var _countScopesWatchers = function () {
|
48
|
-
// This logic is borrowed from $digest(). Keep it in sync!
|
49
|
-
var next, current, target = $rootScope;
|
50
|
-
var scopes = 0,
|
51
|
-
watchers = 0;
|
52
|
-
|
53
|
-
current = target;
|
54
|
-
do {
|
55
|
-
scopes += 1;
|
56
|
-
|
57
|
-
if (current.$$watchers) {
|
58
|
-
watchers += current.$$watchers.length;
|
59
|
-
}
|
60
|
-
|
61
|
-
// Insanity Warning: scope depth-first traversal
|
62
|
-
// yes, this code is a bit crazy, but it works and we have tests to prove it!
|
63
|
-
// this piece should be kept in sync with the traversal in $broadcast
|
64
|
-
if (!(next = (current.$$childHead || (current !== target && current.$$nextSibling)))) {
|
65
|
-
while (current !== target && !(next = current.$$nextSibling)) {
|
66
|
-
current = current.$parent;
|
67
|
-
}
|
68
|
-
}
|
69
|
-
} while ((current = next));
|
70
|
-
|
71
|
-
return [scopes, watchers];
|
72
|
-
};
|
73
|
-
|
74
|
-
return {
|
75
|
-
templateUrl: '/assets/ng-performance/ngPerformance.html',
|
76
|
-
restrict: 'EA',
|
77
|
-
link: function (/*scope, element, attrs*/) {
|
78
|
-
|
79
|
-
// Cache DOM elements
|
80
|
-
_el = {
|
81
|
-
'#scopes': $document[0].querySelector('#scopes'),
|
82
|
-
'#watchers': $document[0].querySelector('#watchers'),
|
83
|
-
'#dirty-checks': $document[0].querySelector('#dirty-checks'),
|
84
|
-
'#digest-cycles': $document[0].querySelector('#digest-cycles'),
|
85
|
-
'#digest-ms': $document[0].querySelector('#digest-ms'),
|
86
|
-
'#digest-fps': $document[0].querySelector('#digest-fps'),
|
87
|
-
'#avg-digest-ms': $document[0].querySelector('#avg-digest-ms'),
|
88
|
-
'#avg-digest-fps': $document[0].querySelector('#avg-digest-fps'),
|
89
|
-
'#max-digest-ms': $document[0].querySelector('#max-digest-ms'),
|
90
|
-
'#max-digest-fps': $document[0].querySelector('#max-digest-fps'),
|
91
|
-
|
92
|
-
'#head-load': $document[0].querySelector('#head-load'),
|
93
|
-
'#body-load': $document[0].querySelector('#body-load'),
|
94
|
-
'#footer-load': $document[0].querySelector('#footer-load'),
|
95
|
-
'#vendor-load': $document[0].querySelector('#vendor-load'),
|
96
|
-
'#app-load': $document[0].querySelector('#app-load'),
|
97
|
-
'#metrics-load': $document[0].querySelector('#metrics-load'),
|
98
|
-
'#time-to-eop': $document[0].querySelector('#time-to-eop'),
|
99
|
-
'#time-to-ng': $document[0].querySelector('#time-to-ng'),
|
100
|
-
};
|
101
|
-
|
102
|
-
_setText('#head-load', stats.headLoad.toFixed(1));
|
103
|
-
_setText('#body-load', stats.bodyLoad.toFixed(1));
|
104
|
-
_setText('#footer-load', stats.footerLoad.toFixed(1));
|
105
|
-
_setText('#vendor-load', stats.vendorScriptLoad.toFixed(1));
|
106
|
-
_setText('#app-load', stats.appLoad.toFixed(1));
|
107
|
-
_setText('#metrics-load', stats.metricsLoad.toFixed(1));
|
108
|
-
_setText('#time-to-eop', stats.TTLB.toFixed(1));
|
109
|
-
_setText('#time-to-ng', stats.timeToAngular.toFixed(1));
|
110
|
-
|
111
|
-
|
112
|
-
// If the browser doesn't support Web Performance API
|
113
|
-
// (I'm looking at you, Safari), don't even try.
|
114
|
-
if (performance != null) {
|
115
|
-
var digestCycles = 0,
|
116
|
-
digestStart = 0,
|
117
|
-
sumDigestMs = 0,
|
118
|
-
maxDigestMs = 0,
|
119
|
-
dirtyChecks = 0;
|
120
|
-
|
121
|
-
// $digest loop uses a reverse while.
|
122
|
-
// Pushing onto the end of $$watchers array makes this run first...
|
123
|
-
$rootScope.$$watchers.push({
|
124
|
-
eq: false,
|
125
|
-
last: null,
|
126
|
-
fn: function () {
|
127
|
-
},
|
128
|
-
exp: function () {
|
129
|
-
},
|
130
|
-
get: function () {
|
131
|
-
dirtyChecks++;
|
132
|
-
|
133
|
-
// Only update digestStart if not set. This allows for multiple
|
134
|
-
// iterations inside the "dirty loop."
|
135
|
-
//
|
136
|
-
// NOTE: This technique for timing the $digest cycles
|
137
|
-
// DOES NOT capture time spent processing the asyncQueue!
|
138
|
-
if (digestStart === 0) {
|
139
|
-
// $log.debug('$rootScope.$watch: digestStart');
|
140
|
-
digestStart = performance.now();
|
141
|
-
digestCycles++;
|
142
|
-
}
|
143
|
-
|
144
|
-
// Schedules a one-shot callback after digest loop is clean
|
145
|
-
$rootScope.$$postDigest(function () {
|
146
|
-
if (digestStart !== 0) {
|
147
|
-
var digestEnd = performance.now();
|
148
|
-
var digestMs = (digestEnd - digestStart);
|
149
|
-
_setText('#digest-ms', digestMs.toFixed(1));
|
150
|
-
_setText('#digest-fps', (1000 / digestMs).toFixed(0));
|
151
|
-
|
152
|
-
maxDigestMs = Math.max(digestMs, maxDigestMs);
|
153
|
-
_setText('#max-digest-ms', maxDigestMs.toFixed(1));
|
154
|
-
_setText('#max-digest-fps', (1000 / maxDigestMs).toFixed(0));
|
155
|
-
|
156
|
-
sumDigestMs += digestMs;
|
157
|
-
if (digestCycles > 0) {
|
158
|
-
var avgDigestMs = sumDigestMs / digestCycles;
|
159
|
-
_setText('#avg-digest-ms', avgDigestMs.toFixed(1));
|
160
|
-
_setText('#avg-digest-fps', (1000 / avgDigestMs).toFixed(0));
|
161
|
-
}
|
162
|
-
|
163
|
-
_setText('#dirty-checks', dirtyChecks);
|
164
|
-
_setText('#digest-cycles', digestCycles);
|
165
|
-
|
166
|
-
var count = _countScopesWatchers();
|
167
|
-
var scopes = count[0],
|
168
|
-
watchers = count[1];
|
169
|
-
|
170
|
-
_setText('#scopes', scopes);
|
171
|
-
_setText('#watchers', watchers);
|
172
|
-
|
173
|
-
var log = 'NG-PERF: Digest Cycle #' + digestCycles + ': ' + digestMs.toFixed(1) + ' ms, ' +
|
174
|
-
'Scopes: ' + scopes + ', Watchers: ' + watchers +
|
175
|
-
' [Overhead: ' + (performance.now() - digestEnd).toPrecision(3) + ' ms]';
|
176
|
-
$log.debug(log);
|
177
|
-
if ($window.console.timeStamp) {
|
178
|
-
$window.console.timeStamp(log);
|
179
|
-
}
|
180
|
-
|
181
|
-
// Register an async function to run first.
|
182
|
-
//
|
183
|
-
// NOTE: This technique for timing the $digest cycles
|
184
|
-
// DOES capture time spent processing the asyncQueue!
|
185
|
-
// $rootScope.$$asyncQueue.unshift({
|
186
|
-
// scope: $rootScope,
|
187
|
-
// expression: function (scope) {
|
188
|
-
// // $log.debug('$rootScope.$evalAsync: digestStart');
|
189
|
-
// digestStart = performance.now();
|
190
|
-
// digestCycles++;
|
191
|
-
// }
|
192
|
-
// });
|
193
|
-
|
194
|
-
// Clear digestStart for next "dirty loop."
|
195
|
-
digestStart = 0;
|
196
|
-
}
|
197
|
-
});
|
198
|
-
|
199
|
-
return null;
|
200
|
-
}
|
201
|
-
});
|
202
|
-
}
|
203
|
-
|
204
|
-
}
|
205
|
-
|
206
|
-
};
|
207
|
-
}]);
|
208
|
-
|
209
|
-
})
|
210
|
-
|
211
|
-
(angular);
|
@@ -1,65 +0,0 @@
|
|
1
|
-
/*-----------------------------------------------------------------------*/
|
2
|
-
/* IMPAC */
|
3
|
-
/*-----------------------------------------------------------------------*/
|
4
|
-
|
5
|
-
// Dashboard
|
6
|
-
//--------------------------------------
|
7
|
-
@impac-dashboard-padding-top: 33px;
|
8
|
-
@impac-dashboard-margin-left: 0px;
|
9
|
-
|
10
|
-
// Title
|
11
|
-
@impac-dashboard-title-label-color: @text-strong-color;
|
12
|
-
@impac-dashboard-title-color: @elem-cozy-color;
|
13
|
-
@impac-dashboard-source-color: @impac-dashboard-title-label-color;
|
14
|
-
@impac-dashboard-buttons-border-radius: 4px;
|
15
|
-
|
16
|
-
// Widgets container
|
17
|
-
@impac-placeholder-border: 2px dashed @bg-inverse-color;
|
18
|
-
@impac-padding-between-widgets: 12px;
|
19
|
-
@impac-minimum-widget-size: 258px;
|
20
|
-
|
21
|
-
// Widgets
|
22
|
-
//--------------------------------------
|
23
|
-
// Global
|
24
|
-
@impac-widget-background-color: @bg-inverse-color;
|
25
|
-
@impac-widget-text-color: @text-inverse-color;
|
26
|
-
@impac-widget-text-color-light: lighten(@impac-widget-text-color,70%);
|
27
|
-
@impac-widget-borders-color: lighten(@impac-widget-text-color-light,10%);
|
28
|
-
@impac-widget-link-color: @decorator-inverse-color;
|
29
|
-
|
30
|
-
// Title
|
31
|
-
@impac-widget-title-text-color: darken(@impac-widget-text-color,5%);
|
32
|
-
@impac-widget-title-bg: @impac-widget-background-color;
|
33
|
-
@impac-widget-title-border: solid 1px @impac-widget-borders-color;
|
34
|
-
@impac-widget-title-text-transform: uppercase;
|
35
|
-
@impac-widget-title-text-size: 12px;
|
36
|
-
@impac-widget-title-border-radius: 5px 5px 0px 0px;
|
37
|
-
|
38
|
-
// Content
|
39
|
-
@impac-widget-content-border-radius: 0px 0px 5px 5px;
|
40
|
-
@impac-widget-lines-container-max-height: 210px;
|
41
|
-
|
42
|
-
// Hist Mode Choser
|
43
|
-
@impac-widget-hist-text-transform: uppercase;
|
44
|
-
@impac-widget-hist-text-size: 12px;
|
45
|
-
@impac-widget-hist-text-color: @impac-widget-text-color-light;
|
46
|
-
|
47
|
-
// Price
|
48
|
-
@impac-widget-price-color: @impac-widget-text-color;
|
49
|
-
@impac-widget-price-positive-color: @elem-positive-color;
|
50
|
-
@impac-widget-price-negative-color: @elem-cozy-color;
|
51
|
-
@impac-widget-currency-color: @impac-widget-text-color-light;
|
52
|
-
@impac-widget-legend-color: lighten(@impac-widget-text-color,30%);
|
53
|
-
|
54
|
-
// Edit settings
|
55
|
-
@impac-widget-sub-bg-color: darken(@impac-widget-background-color,10%);
|
56
|
-
@impac-widget-sub-bg-color-light: lighten(@impac-widget-sub-bg-color,5%);
|
57
|
-
|
58
|
-
// Invoices list
|
59
|
-
@impac-widget-line-hover-bg: lighten(@bg-inverse-color,10%);
|
60
|
-
@impac-widget-line-hover-text: @text-inverse-color;
|
61
|
-
|
62
|
-
// Accounts Comparison
|
63
|
-
@impac-big-widget-size: 581px;
|
64
|
-
@impac-big-widget-bottom-padding: 30px;
|
65
|
-
@impac-widget-accounts-comparison-lines-container-max-height: 250px;
|