##// END OF EJS Templates
angular: start transitioning to component approach
ergo -
Show More
@@ -0,0 +1,2 b''
1 {% extends "/layout_base.jinja2" %}
2 {% block non_angular_content %}{% endblock %}
@@ -0,0 +1,36 b''
1 // # Copyright (C) 2010-2016 RhodeCode GmbH
2 // #
3 // # This program is free software: you can redistribute it and/or modify
4 // # it under the terms of the GNU Affero General Public License, version 3
5 // # (only), as published by the Free Software Foundation.
6 // #
7 // # This program is distributed in the hope that it will be useful,
8 // # but WITHOUT ANY WARRANTY; without even the implied warranty of
9 // # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
10 // # GNU General Public License for more details.
11 // #
12 // # You should have received a copy of the GNU Affero General Public License
13 // # along with this program. If not, see <http://www.gnu.org/licenses/>.
14 // #
15 // # This program is dual-licensed. If you wish to learn more about the
16 // # AppEnlight Enterprise Edition, including its added features, Support
17 // # services, and proprietary license terms, please see
18 // # https://rhodecode.com/licenses/
19
20 angular.module('appenlight.components.appenlightApp', [])
21 .component('appenlightApp', {
22 templateUrl: 'templates/components/appenlight-app.html',
23 controller: AppEnlightAppController
24 });
25
26 AppEnlightAppController.$inject = ['$scope','$state', 'stateHolder', 'AeConfig'];
27
28 function AppEnlightAppController($scope, $state, stateHolder, AeConfig){
29 console.log('app start');
30 // to keep bw compatibility
31 $scope.$state = $state;
32 $scope.stateHolder = stateHolder;
33 $scope.flash = stateHolder.flashMessages.list;
34 $scope.closeAlert = stateHolder.flashMessages.closeAlert;
35 $scope.AeConfig = AeConfig;
36 }
@@ -0,0 +1,32 b''
1 // # Copyright (C) 2010-2016 RhodeCode GmbH
2 // #
3 // # This program is free software: you can redistribute it and/or modify
4 // # it under the terms of the GNU Affero General Public License, version 3
5 // # (only), as published by the Free Software Foundation.
6 // #
7 // # This program is distributed in the hope that it will be useful,
8 // # but WITHOUT ANY WARRANTY; without even the implied warranty of
9 // # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
10 // # GNU General Public License for more details.
11 // #
12 // # You should have received a copy of the GNU Affero General Public License
13 // # along with this program. If not, see <http://www.gnu.org/licenses/>.
14 // #
15 // # This program is dual-licensed. If you wish to learn more about the
16 // # AppEnlight Enterprise Edition, including its added features, Support
17 // # services, and proprietary license terms, please see
18 // # https://rhodecode.com/licenses/
19
20 angular.module('appenlight.components.appenlightHeader', [])
21 .component('appenlightFooter', {
22 templateUrl: 'templates/components/appenlight-footer.html',
23 controller: AppEnlightFooterController
24 });
25
26 ChannelstreamController.$inject = ['stateHolder', 'AeConfig'];
27
28 function AppEnlightFooterController(stateHolder, AeConfig){
29 var vm = this;
30 vm.AeConfig = AeConfig;
31 vm.stateHolder = stateHolder;
32 }
@@ -0,0 +1,5 b''
1 <channelstream config="AeConfig"></channelstream>
2 <appenlight-header></appenlight-header>
3 <div id="outer-content">
4 <div ui-view class="container"></div>
5 </div>
@@ -0,0 +1,101 b''
1 <!-- Fixed navbar -->
2 <div id="top-navbar" class="navbar navbar-default navbar-fixed-top" role="navigation">
3 <div class="pattern">
4 <div class="container">
5 <div class="navbar-header pull-left">
6 <a data-ui-sref="front_dashboard" class="navbar-brand">
7 <div id="logo-normal" class="hidden-sm hidden-xs"></div>
8 <div id="logo-icon" class="visible-sm visible-xs"></div>
9 </a>
10 </div>
11
12 <div class="container-fluid">
13 <div>
14 <ul class="nav navbar-nav navbar-right" ng-if="$ctrl.stateHolder.AeUser.id !== null">
15 <li id="user-notifications" class="dropdown ng-cloak" data-uib-dropdown>
16
17 <a class="dropdown-toggle" data-uib-dropdown-toggle>
18 <span class="badge">{{$ctrl.assignedReports.length}}</span>
19 <span class="fa fa-envelope-o"></span>
20 </a>
21 <ul class="dropdown-menu">
22 <li role="presentation" class="dropdown-header">Assigned reports</li>
23 <li data-ng-repeat="report in $ctrl.assignedReports" role="presentation">
24 <a href="{{report.front_url}}" role="menuitem" tabindex="-1">
25 <small>{{ report.error || 'Slow Report: ' + report.view_name |truncate:65}}</small>
26 </a>
27
28 </li>
29 <li data-ng-if="$ctrl.assignedReports.length == 0"><a><small>No reports</small></a></li>
30 </ul>
31 </li>
32 <li id="alert-notifications" class="dropdown ng-cloak" data-uib-dropdown auto-close="outsideClick">
33 <a class="dropdown-toggle" data-uib-dropdown-toggle>
34 <span class="badge {{ activeEvents ? 'danger' : '' }}">{{$ctrl.activeEvents}}</span>
35 <span class="fa fa-bell-o"></span></a>
36 <ul class="dropdown-menu">
37 <li role="presentation" class="dropdown-header">
38 <a data-ui-sref="events" class="btn btn-xs btn-default">Show me more</a></li>
39 <li role="presentation" class="dropdown-header">Latest events</li>
40 <li data-ng-repeat="event in $ctrl.latestEvents" role="presentation">
41 <a data-ng-click="$ctrl.clickedEvent(event)"><small class="resource-name">For {{ event.resource_name }}</small><br/>
42 <small>{{ event.text |truncate:65}}</small><br/>
43 <small class="date" data-uib-tooltip="{{event.start_date}}">created: <iso-to-relative-time time="{{event.start_date}}"/></small>
44 <small class="date" data-ng-show="event.end_date" data-uib-tooltip="{{event.end_date}}">closed: <iso-to-relative-time time="{{event.end_date}}"/></small>
45 </a>
46 </li>
47 <li data-ng-if="$ctrl.latestEvents.length == 0"><a><small>No events</small></a></li>
48 </ul>
49 </li>
50
51 <li id="dashboards" class="dropdown" data-uib-dropdown>
52 <a class="dropdown-toggle" data-uib-dropdown-toggle tooltip-placement="bottom" data-uib-tooltip="Dashboards">
53 <span class="fa fa-bar-chart-o "></span></a>
54 <ul class="dropdown-menu">
55 <li role="presentation"><a data-ui-sref="front_dashboard">Main dashboard</a></li>
56 <li role="presentation" ng-repeat="item in $ctrl.AeConfig.topNav.menu_dashboards_items">
57 <a data-ui-sref="{{ item.sref }}">{{ item.label }}</a>
58 </li>
59 </ul>
60 </li>
61
62 <li class="dropdown" data-uib-dropdown>
63 <a class="dropdown-toggle" data-uib-dropdown-toggle tooltip-placement="bottom" data-uib-tooltip="Reports">
64 <span class="fa fa-exclamation-triangle"></span></a>
65 <ul class="dropdown-menu">
66 <li role="presentation">
67 <a data-ui-sref="report.list({resource:$ctrl.stateHolder.resource})">Error Reports</a>
68 </li>
69 <li role="presentation">
70 <a data-ui-sref="report.list_slow({resource:$ctrl.stateHolder.resource})">Slowness Reports</a>
71 </li>
72
73 </ul>
74 </li>
75
76 <li>
77 <a data-ui-sref="logs({resource:$ctrl.stateHolder.resource})" data-uib-tooltip="Logs" tooltip-placement="bottom"><span class="fa fa-list-alt "></span></a></li>
78 <li>
79 <a data-ui-sref="user" data-uib-tooltip="Settings" tooltip-placement="bottom"><span class="fa fa-cog "></span></a>
80 </li>
81 <li class="dropdown" data-uib-dropdown data-ng-if="$ctrl.AeConfig.topNav.menu_admin_items.length">
82 <a class="dropdown-toggle" data-uib-dropdown-toggle tooltip-placement="bottom" data-uib-tooltip="Admin Settings">
83 <span class="fa fa-wrench"></span></a>
84 <ul class="dropdown-menu">
85 <li role="presentation" ng-repeat="item in $ctrl.AeConfig.topNav.menu_admin_items">
86 <a data-ui-sref="{{ item.sref }}">{{ item.label }}</a>
87 </li>
88 </ul>
89 </li>
90 <li><a href="{{ $ctrl.AeConfig.urls.otherRoutes.signOut }}" target="_self"
91 data-uib-tooltip="Sign out" tooltip-placement="bottom">
92 <span class="fa fa-power-off "></span></a></li>
93 </ul>
94 <ul class="nav navbar-nav pull-right" ng-if="$ctrl.stateHolder.AeUser.id === null">
95 <li><a href="{{ $ctrl.AeConfig.urls.otherRoutes.register }}" target="_self" class="btn btn-orange">Sign In</a></li>
96 </ul>
97 </div><!-- /.navbar-collapse -->
98 </div><!-- /.container-fluid -->
99 </div>
100 </div>
101 </div>
@@ -2675,7 +2675,9 b" angular.module('appenlight.controllers', ["
2675 'appenlight.base'
2675 'appenlight.base'
2676 ]);
2676 ]);
2677 angular.module('appenlight.components', [
2677 angular.module('appenlight.components', [
2678 'appenlight.components.channelstream'
2678 'appenlight.components.channelstream',
2679 'appenlight.components.appenlightApp',
2680 'appenlight.components.appenlightHeader'
2679 ]);
2681 ]);
2680 angular.module('appenlight.directives', [
2682 angular.module('appenlight.directives', [
2681 'appenlight.directives.appVersion',
2683 'appenlight.directives.appVersion',
@@ -4848,6 +4850,120 b' function kickstartAE(initialUserData) {'
4848 );
4850 );
4849
4851
4850
4852
4853 $templateCache.put('templates/components/appenlight-app.html',
4854 "<channelstream config=\"AeConfig\"></channelstream>\n" +
4855 "<appenlight-header></appenlight-header>\n" +
4856 "<div id=\"outer-content\">\n" +
4857 " <div ui-view class=\"container\"></div>\n" +
4858 "</div>\n"
4859 );
4860
4861
4862 $templateCache.put('templates/components/appenlight-header.html',
4863 "<!-- Fixed navbar -->\n" +
4864 "<div id=\"top-navbar\" class=\"navbar navbar-default navbar-fixed-top\" role=\"navigation\">\n" +
4865 " <div class=\"pattern\">\n" +
4866 " <div class=\"container\">\n" +
4867 " <div class=\"navbar-header pull-left\">\n" +
4868 " <a data-ui-sref=\"front_dashboard\" class=\"navbar-brand\">\n" +
4869 " <div id=\"logo-normal\" class=\"hidden-sm hidden-xs\"></div>\n" +
4870 " <div id=\"logo-icon\" class=\"visible-sm visible-xs\"></div>\n" +
4871 " </a>\n" +
4872 " </div>\n" +
4873 "\n" +
4874 " <div class=\"container-fluid\">\n" +
4875 " <div>\n" +
4876 " <ul class=\"nav navbar-nav navbar-right\" ng-if=\"$ctrl.stateHolder.AeUser.id !== null\">\n" +
4877 " <li id=\"user-notifications\" class=\"dropdown ng-cloak\" data-uib-dropdown>\n" +
4878 "\n" +
4879 " <a class=\"dropdown-toggle\" data-uib-dropdown-toggle>\n" +
4880 " <span class=\"badge\">{{$ctrl.assignedReports.length}}</span>\n" +
4881 " <span class=\"fa fa-envelope-o\"></span>\n" +
4882 " </a>\n" +
4883 " <ul class=\"dropdown-menu\">\n" +
4884 " <li role=\"presentation\" class=\"dropdown-header\">Assigned reports</li>\n" +
4885 " <li data-ng-repeat=\"report in $ctrl.assignedReports\" role=\"presentation\">\n" +
4886 " <a href=\"{{report.front_url}}\" role=\"menuitem\" tabindex=\"-1\">\n" +
4887 " <small>{{ report.error || 'Slow Report: ' + report.view_name |truncate:65}}</small>\n" +
4888 " </a>\n" +
4889 "\n" +
4890 " </li>\n" +
4891 " <li data-ng-if=\"$ctrl.assignedReports.length == 0\"><a><small>No reports</small></a></li>\n" +
4892 " </ul>\n" +
4893 " </li>\n" +
4894 " <li id=\"alert-notifications\" class=\"dropdown ng-cloak\" data-uib-dropdown auto-close=\"outsideClick\">\n" +
4895 " <a class=\"dropdown-toggle\" data-uib-dropdown-toggle>\n" +
4896 " <span class=\"badge {{ activeEvents ? 'danger' : '' }}\">{{$ctrl.activeEvents}}</span>\n" +
4897 " <span class=\"fa fa-bell-o\"></span></a>\n" +
4898 " <ul class=\"dropdown-menu\">\n" +
4899 " <li role=\"presentation\" class=\"dropdown-header\">\n" +
4900 " <a data-ui-sref=\"events\" class=\"btn btn-xs btn-default\">Show me more</a></li>\n" +
4901 " <li role=\"presentation\" class=\"dropdown-header\">Latest events</li>\n" +
4902 " <li data-ng-repeat=\"event in $ctrl.latestEvents\" role=\"presentation\">\n" +
4903 " <a data-ng-click=\"$ctrl.clickedEvent(event)\"><small class=\"resource-name\">For {{ event.resource_name }}</small><br/>\n" +
4904 " <small>{{ event.text |truncate:65}}</small><br/>\n" +
4905 " <small class=\"date\" data-uib-tooltip=\"{{event.start_date}}\">created: <iso-to-relative-time time=\"{{event.start_date}}\"/></small>\n" +
4906 " <small class=\"date\" data-ng-show=\"event.end_date\" data-uib-tooltip=\"{{event.end_date}}\">closed: <iso-to-relative-time time=\"{{event.end_date}}\"/></small>\n" +
4907 " </a>\n" +
4908 " </li>\n" +
4909 " <li data-ng-if=\"$ctrl.latestEvents.length == 0\"><a><small>No events</small></a></li>\n" +
4910 " </ul>\n" +
4911 " </li>\n" +
4912 "\n" +
4913 " <li id=\"dashboards\" class=\"dropdown\" data-uib-dropdown>\n" +
4914 " <a class=\"dropdown-toggle\" data-uib-dropdown-toggle tooltip-placement=\"bottom\" data-uib-tooltip=\"Dashboards\">\n" +
4915 " <span class=\"fa fa-bar-chart-o \"></span></a>\n" +
4916 " <ul class=\"dropdown-menu\">\n" +
4917 " <li role=\"presentation\"><a data-ui-sref=\"front_dashboard\">Main dashboard</a></li>\n" +
4918 " <li role=\"presentation\" ng-repeat=\"item in $ctrl.AeConfig.topNav.menu_dashboards_items\">\n" +
4919 " <a data-ui-sref=\"{{ item.sref }}\">{{ item.label }}</a>\n" +
4920 " </li>\n" +
4921 " </ul>\n" +
4922 " </li>\n" +
4923 "\n" +
4924 " <li class=\"dropdown\" data-uib-dropdown>\n" +
4925 " <a class=\"dropdown-toggle\" data-uib-dropdown-toggle tooltip-placement=\"bottom\" data-uib-tooltip=\"Reports\">\n" +
4926 " <span class=\"fa fa-exclamation-triangle\"></span></a>\n" +
4927 " <ul class=\"dropdown-menu\">\n" +
4928 " <li role=\"presentation\">\n" +
4929 " <a data-ui-sref=\"report.list({resource:$ctrl.stateHolder.resource})\">Error Reports</a>\n" +
4930 " </li>\n" +
4931 " <li role=\"presentation\">\n" +
4932 " <a data-ui-sref=\"report.list_slow({resource:$ctrl.stateHolder.resource})\">Slowness Reports</a>\n" +
4933 " </li>\n" +
4934 "\n" +
4935 " </ul>\n" +
4936 " </li>\n" +
4937 "\n" +
4938 " <li>\n" +
4939 " <a data-ui-sref=\"logs({resource:$ctrl.stateHolder.resource})\" data-uib-tooltip=\"Logs\" tooltip-placement=\"bottom\"><span class=\"fa fa-list-alt \"></span></a></li>\n" +
4940 " <li>\n" +
4941 " <a data-ui-sref=\"user\" data-uib-tooltip=\"Settings\" tooltip-placement=\"bottom\"><span class=\"fa fa-cog \"></span></a>\n" +
4942 " </li>\n" +
4943 " <li class=\"dropdown\" data-uib-dropdown data-ng-if=\"$ctrl.AeConfig.topNav.menu_admin_items.length\">\n" +
4944 " <a class=\"dropdown-toggle\" data-uib-dropdown-toggle tooltip-placement=\"bottom\" data-uib-tooltip=\"Admin Settings\">\n" +
4945 " <span class=\"fa fa-wrench\"></span></a>\n" +
4946 " <ul class=\"dropdown-menu\">\n" +
4947 " <li role=\"presentation\" ng-repeat=\"item in $ctrl.AeConfig.topNav.menu_admin_items\">\n" +
4948 " <a data-ui-sref=\"{{ item.sref }}\">{{ item.label }}</a>\n" +
4949 " </li>\n" +
4950 " </ul>\n" +
4951 " </li>\n" +
4952 " <li><a href=\"{{ $ctrl.AeConfig.urls.otherRoutes.signOut }}\" target=\"_self\"\n" +
4953 " data-uib-tooltip=\"Sign out\" tooltip-placement=\"bottom\">\n" +
4954 " <span class=\"fa fa-power-off \"></span></a></li>\n" +
4955 " </ul>\n" +
4956 " <ul class=\"nav navbar-nav pull-right\" ng-if=\"$ctrl.stateHolder.AeUser.id === null\">\n" +
4957 " <li><a href=\"{{ $ctrl.AeConfig.urls.otherRoutes.register }}\" target=\"_self\" class=\"btn btn-orange\">Sign In</a></li>\n" +
4958 " </ul>\n" +
4959 " </div><!-- /.navbar-collapse -->\n" +
4960 " </div><!-- /.container-fluid -->\n" +
4961 " </div>\n" +
4962 " </div>\n" +
4963 "</div>\n"
4964 );
4965
4966
4851 $templateCache.put('templates/dashboard.html',
4967 $templateCache.put('templates/dashboard.html',
4852 "<style type=\"text/css\">\n" +
4968 "<style type=\"text/css\">\n" +
4853 " #metrics_chart .c3-line {\n" +
4969 " #metrics_chart .c3-line {\n" +
@@ -4864,21 +4980,20 b' function kickstartAE(initialUserData) {'
4864 "\n" +
4980 "\n" +
4865 "<div class=\"row\">\n" +
4981 "<div class=\"row\">\n" +
4866 " <div class=\"col-sm-12 dashboard\" id=\"content\">\n" +
4982 " <div class=\"col-sm-12 dashboard\" id=\"content\">\n" +
4867 "\n" +
4983 " <div ng-if=\"!index.stateHolder.AeUser.applications.length\">\n" +
4868 " <div ng-if=\"!stateHolder.AeUser.applications.length\">\n" +
4869 "\n" +
4984 "\n" +
4870 " <div ng-include=\"'templates/quickstart.html'\"></div>\n" +
4985 " <div ng-include=\"'templates/quickstart.html'\"></div>\n" +
4871 "\n" +
4986 "\n" +
4872 " </div>\n" +
4987 " </div>\n" +
4873 "\n" +
4988 "\n" +
4874 " <div ng-if=\"stateHolder.AeUser.applications.length\">\n" +
4989 " <div ng-if=\"index.stateHolder.AeUser.applications.length\">\n" +
4875 "\n" +
4990 "\n" +
4876 " <div class=\"row\">\n" +
4991 " <div class=\"row\">\n" +
4877 " <div class=\"col-sm-6\">\n" +
4992 " <div class=\"col-sm-6\">\n" +
4878 " <div class=\"panel panel-default\">\n" +
4993 " <div class=\"panel panel-default\">\n" +
4879 " <div class=\"panel-body\">\n" +
4994 " <div class=\"panel-body\">\n" +
4880 " <form class=\"graph-type form-inline\">\n" +
4995 " <form class=\"graph-type form-inline\">\n" +
4881 " <select ng-model=\"index.resource\" ng-options=\"r.resource_id as r.resource_name for r in stateHolder.AeUser.applications\" ng-change=\"index.updateSearchParams()\"\n" +
4996 " <select ng-model=\"index.resource\" ng-options=\"r.resource_id as r.resource_name for r in index.stateHolder.AeUser.applications\" ng-change=\"index.updateSearchParams()\"\n" +
4882 " class=\"SelectField form-control input-sm slim-input\"></select>\n" +
4997 " class=\"SelectField form-control input-sm slim-input\"></select>\n" +
4883 "\n" +
4998 "\n" +
4884 " <select class=\"SelectField form-control input-sm slim-input\" ng-model=\"index.timeSpan\"\n" +
4999 " <select class=\"SelectField form-control input-sm slim-input\" ng-model=\"index.timeSpan\"\n" +
@@ -6150,7 +6265,7 b' function kickstartAE(initialUserData) {'
6150 "\n" +
6265 "\n" +
6151 "<div ng-if=\"report.report !== null && !report.is_loading.report\">\n" +
6266 "<div ng-if=\"report.report !== null && !report.is_loading.report\">\n" +
6152 "\n" +
6267 "\n" +
6153 " <div ng-if=\"stateHolder.AeUser.id\" class=\"row\">\n" +
6268 " <div ng-if=\"report.stateHolder.AeUser.id\" class=\"row\">\n" +
6154 " <div class=\"col-lg-12\">\n" +
6269 " <div class=\"col-lg-12\">\n" +
6155 " <a onclick=\"window.history.back()\" class=\"btn btn-default\" ng-if=\"report.window.history.length > 2\"><span class=\"fa fa-arrow-circle-o-left\"></span>\n" +
6270 " <a onclick=\"window.history.back()\" class=\"btn btn-default\" ng-if=\"report.window.history.length > 2\"><span class=\"fa fa-arrow-circle-o-left\"></span>\n" +
6156 " Go back</a>\n" +
6271 " Go back</a>\n" +
@@ -6210,7 +6325,7 b' function kickstartAE(initialUserData) {'
6210 " <td class=\"table-label\">Public URL</td>\n" +
6325 " <td class=\"table-label\">Public URL</td>\n" +
6211 " <td class=\"data\">\n" +
6326 " <td class=\"data\">\n" +
6212 " <form>\n" +
6327 " <form>\n" +
6213 " <textarea class=\"TextAreaField form-control\" id=\"public-url\" onclick=\"this.select()\">{{$state.href($state.current.name, $state.params, {absolute: true})}}</textarea>\n" +
6328 " <textarea class=\"TextAreaField form-control\" id=\"public-url\" onclick=\"this.select()\">{{report.$state.href(report.$state.current.name, report.$state.params, {absolute: true})}}</textarea>\n" +
6214 " </form>\n" +
6329 " </form>\n" +
6215 " </td>\n" +
6330 " </td>\n" +
6216 " </tr>\n" +
6331 " </tr>\n" +
@@ -7022,6 +7137,135 b' function kickstartAE(initialUserData) {'
7022 // # services, and proprietary license terms, please see
7137 // # services, and proprietary license terms, please see
7023 // # https://rhodecode.com/licenses/
7138 // # https://rhodecode.com/licenses/
7024
7139
7140 angular.module('appenlight.components.appenlightApp', [])
7141 .component('appenlightApp', {
7142 templateUrl: 'templates/components/appenlight-app.html',
7143 controller: AppEnlightAppController
7144 });
7145
7146 AppEnlightAppController.$inject = ['$scope','$state', 'stateHolder', 'AeConfig'];
7147
7148 function AppEnlightAppController($scope, $state, stateHolder, AeConfig){
7149
7150 // to keep bw compatibility
7151 $scope.$state = $state;
7152 $scope.stateHolder = stateHolder;
7153 $scope.flash = stateHolder.flashMessages.list;
7154 $scope.closeAlert = stateHolder.flashMessages.closeAlert;
7155 $scope.AeConfig = AeConfig;
7156 }
7157
7158 ;// # Copyright (C) 2010-2016 RhodeCode GmbH
7159 // #
7160 // # This program is free software: you can redistribute it and/or modify
7161 // # it under the terms of the GNU Affero General Public License, version 3
7162 // # (only), as published by the Free Software Foundation.
7163 // #
7164 // # This program is distributed in the hope that it will be useful,
7165 // # but WITHOUT ANY WARRANTY; without even the implied warranty of
7166 // # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
7167 // # GNU General Public License for more details.
7168 // #
7169 // # You should have received a copy of the GNU Affero General Public License
7170 // # along with this program. If not, see <http://www.gnu.org/licenses/>.
7171 // #
7172 // # This program is dual-licensed. If you wish to learn more about the
7173 // # AppEnlight Enterprise Edition, including its added features, Support
7174 // # services, and proprietary license terms, please see
7175 // # https://rhodecode.com/licenses/
7176
7177 angular.module('appenlight.components.appenlightHeader', [])
7178 .component('appenlightFooter', {
7179 templateUrl: 'templates/components/appenlight-footer.html',
7180 controller: AppEnlightFooterController
7181 });
7182
7183 ChannelstreamController.$inject = ['stateHolder', 'AeConfig'];
7184
7185 function AppEnlightFooterController(stateHolder, AeConfig){
7186 var vm = this;
7187 vm.AeConfig = AeConfig;
7188 vm.stateHolder = stateHolder;
7189 }
7190
7191 ;// # Copyright (C) 2010-2016 RhodeCode GmbH
7192 // #
7193 // # This program is free software: you can redistribute it and/or modify
7194 // # it under the terms of the GNU Affero General Public License, version 3
7195 // # (only), as published by the Free Software Foundation.
7196 // #
7197 // # This program is distributed in the hope that it will be useful,
7198 // # but WITHOUT ANY WARRANTY; without even the implied warranty of
7199 // # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
7200 // # GNU General Public License for more details.
7201 // #
7202 // # You should have received a copy of the GNU Affero General Public License
7203 // # along with this program. If not, see <http://www.gnu.org/licenses/>.
7204 // #
7205 // # This program is dual-licensed. If you wish to learn more about the
7206 // # AppEnlight Enterprise Edition, including its added features, Support
7207 // # services, and proprietary license terms, please see
7208 // # https://rhodecode.com/licenses/
7209
7210 angular.module('appenlight.components.appenlightHeader', [])
7211 .component('appenlightHeader', {
7212 templateUrl: 'templates/components/appenlight-header.html',
7213 controller: AppEnlightHeaderController
7214 });
7215
7216 ChannelstreamController.$inject = ['$state', 'stateHolder', 'AeConfig'];
7217
7218 function AppEnlightHeaderController($state, stateHolder, AeConfig){
7219 var vm = this;
7220 vm.AeConfig = AeConfig;
7221 vm.stateHolder = stateHolder;
7222 vm.assignedReports = stateHolder.AeUser.assigned_reports;
7223 vm.latestEvents = stateHolder.AeUser.latest_events;
7224 vm.activeEvents = 0;
7225 _.each(vm.latestEvents, function (event) {
7226 if (event.status === 1 && event.end_date === null) {
7227 vm.activeEvents += 1;
7228 }
7229 });
7230
7231 vm.clickedEvent = function(event){
7232 // exception reports
7233 if (_.contains([1,2], event.event_type)){
7234 $state.go('report.list', {resource:event.resource_id, start_date:event.start_date});
7235 }
7236 // slowness reports
7237 else if (_.contains([3,4], event.event_type)){
7238 $state.go('report.list_slow', {resource:event.resource_id, start_date:event.start_date});
7239 }
7240 // uptime reports
7241 else if (_.contains([7,8], event.event_type)){
7242 $state.go('uptime', {resource:event.resource_id, start_date:event.start_date});
7243 }
7244 else{
7245
7246 }
7247 }
7248 }
7249
7250 ;// # Copyright (C) 2010-2016 RhodeCode GmbH
7251 // #
7252 // # This program is free software: you can redistribute it and/or modify
7253 // # it under the terms of the GNU Affero General Public License, version 3
7254 // # (only), as published by the Free Software Foundation.
7255 // #
7256 // # This program is distributed in the hope that it will be useful,
7257 // # but WITHOUT ANY WARRANTY; without even the implied warranty of
7258 // # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
7259 // # GNU General Public License for more details.
7260 // #
7261 // # You should have received a copy of the GNU Affero General Public License
7262 // # along with this program. If not, see <http://www.gnu.org/licenses/>.
7263 // #
7264 // # This program is dual-licensed. If you wish to learn more about the
7265 // # AppEnlight Enterprise Edition, including its added features, Support
7266 // # services, and proprietary license terms, please see
7267 // # https://rhodecode.com/licenses/
7268
7025 angular.module('appenlight.components.channelstream', [])
7269 angular.module('appenlight.components.channelstream', [])
7026 .component('channelstream', {
7270 .component('channelstream', {
7027 controller: ChannelstreamController,
7271 controller: ChannelstreamController,
@@ -7047,11 +7291,11 b' function ChannelstreamController($rootScope, stateHolder, userSelfPropertyResour'
7047 _.each(data, function (message) {
7291 _.each(data, function (message) {
7048
7292
7049 if(typeof message.message.topic !== 'undefined'){
7293 if(typeof message.message.topic !== 'undefined'){
7050 $rootScope.$broadcast(
7294 $rootScope.$emit(
7051 'channelstream-message.'+message.message.topic, message);
7295 'channelstream-message.'+message.message.topic, message);
7052 }
7296 }
7053 else{
7297 else{
7054 $rootScope.$broadcast('channelstream-message', message);
7298 $rootScope.$emit('channelstream-message', message);
7055 }
7299 }
7056 });
7300 });
7057 });
7301 });
@@ -7091,9 +7335,9 b" aeconfig.factory('AeConfig', function () {"
7091 obj.flashMessages = decodeEncodedJSON(window.AE.flash_messages);
7335 obj.flashMessages = decodeEncodedJSON(window.AE.flash_messages);
7092 obj.timeOptions = decodeEncodedJSON(window.AE.timeOptions);
7336 obj.timeOptions = decodeEncodedJSON(window.AE.timeOptions);
7093 obj.plugins = decodeEncodedJSON(window.AE.plugins);
7337 obj.plugins = decodeEncodedJSON(window.AE.plugins);
7338 obj.topNav = decodeEncodedJSON(window.AE.topNav);
7094 obj.ws_url = window.AE.ws_url;
7339 obj.ws_url = window.AE.ws_url;
7095 obj.urls = window.AE.urls;
7340 obj.urls = window.AE.urls;
7096
7097 // set keys on values because we wont be able to retrieve them everywhere
7341 // set keys on values because we wont be able to retrieve them everywhere
7098 for (var key in obj.timeOptions) {
7342 for (var key in obj.timeOptions) {
7099 obj.timeOptions[key]['key'] = key;
7343 obj.timeOptions[key]['key'] = key;
@@ -8191,9 +8435,9 b' function EventsController(eventsNoIdResource, eventsResource) {'
8191 angular.module('appenlight.controllers')
8435 angular.module('appenlight.controllers')
8192 .controller('IndexDashboardController', IndexDashboardController);
8436 .controller('IndexDashboardController', IndexDashboardController);
8193
8437
8194 IndexDashboardController.$inject = ['$scope', '$location','$cookies', '$interval', 'stateHolder', 'userSelfPropertyResource', 'applicationsPropertyResource', 'AeConfig'];
8438 IndexDashboardController.$inject = ['$rootScope', '$scope', '$location','$cookies', '$interval', 'stateHolder', 'applicationsPropertyResource', 'AeConfig'];
8195
8439
8196 function IndexDashboardController($scope, $location, $cookies, $interval, stateHolder, userSelfPropertyResource, applicationsPropertyResource, AeConfig) {
8440 function IndexDashboardController($rootScope, $scope, $location, $cookies, $interval, stateHolder, applicationsPropertyResource, AeConfig) {
8197 var vm = this;
8441 var vm = this;
8198 stateHolder.section = 'dashboard';
8442 stateHolder.section = 'dashboard';
8199 vm.timeOptions = {};
8443 vm.timeOptions = {};
@@ -8203,6 +8447,7 b' function IndexDashboardController($scope, $location, $cookies, $interval, stateH'
8203 vm.timeOptions[key] = AeConfig.timeOptions[key];
8447 vm.timeOptions[key] = AeConfig.timeOptions[key];
8204 }
8448 }
8205 });
8449 });
8450 vm.stateHolder = stateHolder;
8206 vm.urls = AeConfig.urls;
8451 vm.urls = AeConfig.urls;
8207 vm.applications = stateHolder.AeUser.applications_map;
8452 vm.applications = stateHolder.AeUser.applications_map;
8208 vm.show_dashboard = false;
8453 vm.show_dashboard = false;
@@ -8547,7 +8792,7 b' function IndexDashboardController($scope, $location, $cookies, $interval, stateH'
8547 };
8792 };
8548 vm.stream = {paused: false, filtered: false, messages: [], reports: []};
8793 vm.stream = {paused: false, filtered: false, messages: [], reports: []};
8549
8794
8550 $scope.$on('channelstream-message.front_dashboard.new_topic', function(event, message){
8795 $rootScope.$on('channelstream-message.front_dashboard.new_topic', function(event, message){
8551 var ws_report = message.message.report;
8796 var ws_report = message.message.report;
8552 if (ws_report.http_status != 500) {
8797 if (ws_report.http_status != 500) {
8553 return
8798 return
@@ -8817,9 +9062,8 b' function IndexDashboardController($scope, $location, $cookies, $interval, stateH'
8817 function () {
9062 function () {
8818 vm.loading.reports = false;
9063 vm.loading.reports = false;
8819 }
9064 }
8820 )
9065 );
8821 ;
9066 };
8822 }
8823
9067
8824 if (stateHolder.AeUser.applications.length){
9068 if (stateHolder.AeUser.applications.length){
8825 vm.show_dashboard = true;
9069 vm.show_dashboard = true;
@@ -8835,64 +9079,6 b' function IndexDashboardController($scope, $location, $cookies, $interval, stateH'
8835 }
9079 }
8836 });
9080 });
8837
9081
8838
8839 }
8840
8841 ;// # Copyright (C) 2010-2016 RhodeCode GmbH
8842 // #
8843 // # This program is free software: you can redistribute it and/or modify
8844 // # it under the terms of the GNU Affero General Public License, version 3
8845 // # (only), as published by the Free Software Foundation.
8846 // #
8847 // # This program is distributed in the hope that it will be useful,
8848 // # but WITHOUT ANY WARRANTY; without even the implied warranty of
8849 // # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
8850 // # GNU General Public License for more details.
8851 // #
8852 // # You should have received a copy of the GNU Affero General Public License
8853 // # along with this program. If not, see <http://www.gnu.org/licenses/>.
8854 // #
8855 // # This program is dual-licensed. If you wish to learn more about the
8856 // # AppEnlight Enterprise Edition, including its added features, Support
8857 // # services, and proprietary license terms, please see
8858 // # https://rhodecode.com/licenses/
8859
8860 angular.module('appenlight.controllers')
8861 .controller('HeaderCtrl', HeaderCtrl);
8862
8863 HeaderCtrl.$inject = ['$state', 'stateHolder'];
8864
8865 function HeaderCtrl($state, stateHolder) {
8866 var vm = this;
8867 vm.stateHolder = stateHolder;
8868 vm.assignedReports = stateHolder.AeUser.assigned_reports;
8869 vm.latestEvents = stateHolder.AeUser.latest_events;
8870 vm.activeEvents = 0;
8871 _.each(vm.latestEvents, function (event) {
8872 if (event.status === 1 && event.end_date === null) {
8873 vm.activeEvents += 1;
8874 }
8875 });
8876
8877 vm.clickedEvent = function(event){
8878
8879 // (from Event model)
8880 // exception reports
8881 if (_.contains([1,2], event.event_type)){
8882 $state.go('report.list', {resource:event.resource_id, start_date:event.start_date});
8883 }
8884 // slowness reports
8885 else if (_.contains([3,4], event.event_type)){
8886 $state.go('report.list_slow', {resource:event.resource_id, start_date:event.start_date});
8887 }
8888 // uptime reports
8889 else if (_.contains([7,8], event.event_type)){
8890 $state.go('uptime', {resource:event.resource_id, start_date:event.start_date});
8891 }
8892 else{
8893
8894 }
8895 }
8896 }
9082 }
8897
9083
8898 ;// # Copyright (C) 2010-2016 RhodeCode GmbH
9084 ;// # Copyright (C) 2010-2016 RhodeCode GmbH
@@ -10304,6 +10490,8 b" ReportsViewController.$inject = ['$window', '$location', '$state', '$uibModal',"
10304 function ReportsViewController($window, $location, $state, $uibModal, $cookies, reportGroupPropertyResource, reportGroupResource, logsNoIdResource, stateHolder) {
10490 function ReportsViewController($window, $location, $state, $uibModal, $cookies, reportGroupPropertyResource, reportGroupResource, logsNoIdResource, stateHolder) {
10305 var vm = this;
10491 var vm = this;
10306 vm.window = $window;
10492 vm.window = $window;
10493 vm.stateHolder = stateHolder;
10494 vm.$state = $state;
10307 vm.reportHistoryConfig = {
10495 vm.reportHistoryConfig = {
10308 data: {
10496 data: {
10309 json: [],
10497 json: [],
@@ -12879,7 +13067,8 b" angular.module('appenlight.services.stateHolder', []).factory('stateHolder',"
12879 resource: null,
13067 resource: null,
12880 plugins: Plugins,
13068 plugins: Plugins,
12881 flashMessages: flashMessages,
13069 flashMessages: flashMessages,
12882 AeUser: AeUser
13070 AeUser: AeUser,
13071 AeConfig: AeConfig
12883 };
13072 };
12884 return stateHolder;
13073 return stateHolder;
12885 }]);
13074 }]);
@@ -65,7 +65,8 b' def gen_urls(request):'
65 'otherRoutes': {
65 'otherRoutes': {
66 'register': request.route_url('register') ,
66 'register': request.route_url('register') ,
67 'lostPassword': request.route_url('lost_password') ,
67 'lostPassword': request.route_url('lost_password') ,
68 'lostPasswordGenerate': request.route_url('lost_password_generate')
68 'lostPasswordGenerate': request.route_url('lost_password_generate'),
69 'signOut': request.route_url('ziggurat.routes.sign_out')
69 },
70 },
70 'social_auth': {
71 'social_auth': {
71 'google':request.route_url('social_auth', provider='google'),
72 'google':request.route_url('social_auth', provider='google'),
@@ -4,9 +4,7 b''
4 <div class="col-sm-10 col-sm-offset-1" id="content">
4 <div class="col-sm-10 col-sm-offset-1" id="content">
5
5
6 <span class="fa fa-ambulance" style="float: left; font-size: 666%; margin: 20px 20px"></span>
6 <span class="fa fa-ambulance" style="float: left; font-size: 666%; margin: 20px 20px"></span>
7
8
9 <p class="heading-text"><strong>500:</strong> OMG!!! Internal Server Error </p>
7 <p class="heading-text"><strong>500:</strong> OMG!!! Internal Server Error </p>
10 </div>
8 </div>
11 {% endblock %}
9 {% endblock %}
12 {% block section_name %}errorPage{% endblock %} No newline at end of file
10 {% block section_name %}errorPage{% endblock %}
@@ -1,9 +1,6 b''
1 <div class="footer">
1 <div class="footer">
2 <div class="container">
2 <div class="container">
3
4 {{ template_footer_html |safe }}
3 {{ template_footer_html |safe }}
5
6 </div>
4 </div>
7
8 <div id="app_instance">{{ appenlight_app_instance }}</div>
5 <div id="app_instance">{{ appenlight_app_instance }}</div>
9 </div>
6 </div>
@@ -1,115 +1,22 b''
1 <!-- Fixed navbar -->
1 <!-- Fixed navbar -->
2 <div id="top-navbar" class="navbar navbar-default navbar-fixed-top" role="navigation" data-ng-controller="HeaderCtrl as header">
2 <div id="top-navbar" class="navbar navbar-default navbar-fixed-top"
3 {% raw %}<channelstream config="AeConfig"></channelstream>{% endraw %}
3 role="navigation">
4 <div class="pattern">
4 <div class="pattern">
5 <div class="container">
5 <div class="container">
6 <div class="navbar-header pull-left">
6 <div class="navbar-header pull-left">
7 <a href="{{ request.route_url('/') }}" class="navbar-brand">
7 <a href="{{ request.route_url('/') }}" class="navbar-brand">
8 <div id="logo-normal" class="hidden-sm hidden-xs"></div>
8 <div id="logo-normal" class="hidden-sm hidden-xs"></div>
9 <div id="logo-icon" class="visible-sm visible-xs"></div>
9 <div id="logo-icon" class="visible-sm visible-xs"></div>
10 </a>
10 </a>
11 </div>
11 </div>
12
13 <div class="container-fluid">
12 <div class="container-fluid">
14 <div>
15 {% if request.user -%}
16 <ul class="nav navbar-nav navbar-right">
17 <li id="user-notifications" class="dropdown ng-cloak" data-uib-dropdown>
18
19 <a class="dropdown-toggle" data-uib-dropdown-toggle>
20 <span class="badge">{% raw %}{{header.assignedReports.length}}{% endraw %}</span>
21 <span class="fa fa-envelope-o"></span>
22 </a>
23 <ul class="dropdown-menu">
24 <li role="presentation" class="dropdown-header">Assigned reports</li>
25 {% raw %}
26 <li data-ng-repeat="report in header.assignedReports" role="presentation">
27 <a href="{{report.front_url}}" role="menuitem" tabindex="-1">
28 <small>{{ report.error || 'Slow Report: ' + report.view_name |truncate:65}}</small>
29 </a>
30
31 </li>
32 <li data-ng-if="header.assignedReports.length == 0"><a><small>No reports</small></a></li>
33 {% endraw %}
34 </ul>
35 </li>
36 <li id="alert-notifications" class="dropdown ng-cloak" data-uib-dropdown auto-close="outsideClick">
37 {% raw %}
38 <a class="dropdown-toggle" data-uib-dropdown-toggle>
39 <span class="badge {{ activeEvents ? 'danger' : '' }}">{{header.activeEvents}}</span>
40 <span class="fa fa-bell-o"></span></a>
41 <ul class="dropdown-menu">
42 <li role="presentation" class="dropdown-header">
43 <a data-ui-sref="events" class="btn btn-xs btn-default">Show me more</a></li>
44 <li role="presentation" class="dropdown-header">Latest events</li>
45 <li data-ng-repeat="event in header.latestEvents" role="presentation">
46 <a data-ng-click="header.clickedEvent(event)"><small class="resource-name">For {{ event.resource_name }}</small><br/>
47 <small>{{ event.text |truncate:65}}</small><br/>
48 <small class="date" data-uib-tooltip="{{event.start_date}}">created: <iso-to-relative-time time="{{event.start_date}}"/></small>
49 <small class="date" data-ng-show="event.end_date" data-uib-tooltip="{{event.end_date}}">closed: <iso-to-relative-time time="{{event.end_date}}"/></small>
50 </a>
51 </li>
52 <li data-ng-if="header.latestEvents.length == 0"><a><small>No events</small></a></li>
53 {% endraw %}
54 </ul>
55 </li>
56
57 <li id="dashboards" class="dropdown" data-uib-dropdown>
58 <a class="dropdown-toggle" data-uib-dropdown-toggle tooltip-placement="bottom" data-uib-tooltip="Dashboards">
59 <span class="fa fa-bar-chart-o "></span></a>
60 <ul class="dropdown-menu">
61 <li role="presentation"><a data-ui-sref="front_dashboard">Main dashboard</a>
62 {% for item in top_nav['menu_dashboards_items'] %}
63 <li role="presentation">
64 <a data-ui-sref="{{ item.sref }}">{{ item.label }}</a>
65 </li>
66 {% endfor %}
67 </ul>
68 </li>
69
70 <li class="dropdown" data-uib-dropdown>
71 <a class="dropdown-toggle" data-uib-dropdown-toggle tooltip-placement="bottom" data-uib-tooltip="Reports">
72 <span class="fa fa-exclamation-triangle"></span></a>
73 <ul class="dropdown-menu">
74 <li role="presentation">
75 <a data-ui-sref="report.list({resource:stateHolder.resource})">Error Reports</a>
76 </li>
77 <li role="presentation">
78 <a data-ui-sref="report.list_slow({resource:stateHolder.resource})">Slowness Reports</a>
79 </li>
80
81 </ul>
82 </li>
83
84 <li>
85 <a data-ui-sref="logs({resource:stateHolder.resource})" data-uib-tooltip="Logs" tooltip-placement="bottom"><span class="fa fa-list-alt "></span></a></li>
86 <li>
87 <a data-ui-sref="user" data-uib-tooltip="Settings" tooltip-placement="bottom"><span class="fa fa-cog "></span></a>
88 </li>
89 {% if top_nav['menu_admin_items'] %}
90 <li class="dropdown" data-uib-dropdown>
91 <a class="dropdown-toggle" data-uib-dropdown-toggle tooltip-placement="bottom" data-uib-tooltip="Admin Settings">
92 <span class="fa fa-wrench"></span></a>
93 <ul class="dropdown-menu">
94 {% for item in top_nav['menu_admin_items'] %}
95 <li role="presentation">
96 <a data-ui-sref="{{ item.sref }}">{{ item.label }}</a>
97 </li>
98 {% endfor %}
99 </ul>
100 </li>
101 {% endif %}
102 <li><a href="{{ request.route_url('ziggurat.routes.sign_out') }}" target="_self"
103 data-uib-tooltip="Sign out" tooltip-placement="bottom">
104 <span class="fa fa-power-off "></span></a></li>
105 </ul>
106 {% else -%}
107 <ul class="nav navbar-nav pull-right">
13 <ul class="nav navbar-nav pull-right">
108 <li><a href="{{ request.route_url('register', _query={'sign_in':'1'}) }}" target="_self" class="btn btn-orange">{{ _('Sign In') }}</a></li>
14 <li>
15 <a href="{{ request.route_url('register', _query={'sign_in':'1'}) }}"
16 target="_self"
17 class="btn btn-orange">{{ _('Sign In') }}</a></li>
109 </ul>
18 </ul>
110 {% endif %}
111 </div><!-- /.navbar-collapse -->
112 </div><!-- /.container-fluid -->
19 </div><!-- /.container-fluid -->
20 </div>
113 </div>
21 </div>
114 </div>
22 </div>
115 </div>
@@ -10,15 +10,8 b''
10 {% endraw %}
10 {% endraw %}
11 </div>
11 </div>
12 </div>
12 </div>
13
13 <div class="row">
14 <div {% block ng_view %}{% endblock %}>
14 {% block content %}{% endblock %}
15 <div class="row">
16 <!-- container -->
17 <!-- content -->
18 {% block content %}{% endblock %}
19 <!-- content -->
20 <!-- container -->
21 </div>
22 </div>
15 </div>
23 </div>
16 </div>
24
17
@@ -1,6 +1,6 b''
1 {% import 'widgets.jinja2' as widgets %}
1 {% import 'widgets.jinja2' as widgets %}
2 <!DOCTYPE html>
2 <!DOCTYPE html>
3 <html {% block ng_controller %}{% endblock %}>
3 <html>
4 <head>
4 <head>
5 <title>{% block title %}Application performance, exception and error monitoring for Python,
5 <title>{% block title %}Application performance, exception and error monitoring for Python,
6 Django, Flask and Javascript - AppEnlight{% endblock %}</title>
6 Django, Flask and Javascript - AppEnlight{% endblock %}</title>
@@ -19,9 +19,7 b''
19 {% block styles %}
19 {% block styles %}
20 <link href="{{ request.static_url('appenlight:webassets/appenlight/css/front.css', _query={'rev':css_hash}) }}" rel="stylesheet" type="text/css"/>
20 <link href="{{ request.static_url('appenlight:webassets/appenlight/css/front.css', _query={'rev':css_hash}) }}" rel="stylesheet" type="text/css"/>
21 <meta name="viewport" content="width=device-width, initial-scale=1.0">
21 <meta name="viewport" content="width=device-width, initial-scale=1.0">
22
23 {% endblock %}
22 {% endblock %}
24 {% block additional_styles %}{% endblock %}
25 <script type="text/javascript">
23 <script type="text/javascript">
26 var AE = {};
24 var AE = {};
27 AE.urls = {{ url_list|tojson|safe }};
25 AE.urls = {{ url_list|tojson|safe }};
@@ -29,6 +27,7 b''
29 AE.flash_messages = {{ flash_msgs|toJSONUnsafe }};
27 AE.flash_messages = {{ flash_msgs|toJSONUnsafe }};
30 AE.timeOptions = {{ h.time_options|toJSONUnsafe }};
28 AE.timeOptions = {{ h.time_options|toJSONUnsafe }};
31 AE.plugins = {{ js_plugins|toJSONUnsafe }};
29 AE.plugins = {{ js_plugins|toJSONUnsafe }};
30 AE.topNav = {{ top_nav|toJSONUnsafe }};
32 </script>
31 </script>
33 {% if request.registry.settings.get('appenlight.public_api_key') %}
32 {% if request.registry.settings.get('appenlight.public_api_key') %}
34 <script type="application/javascript">
33 <script type="application/javascript">
@@ -99,18 +98,25 b''
99 </script>
98 </script>
100 </head>
99 </head>
101 <body class="{% block section_name %}{% endblock %} {% raw %}top-state-{{$state.current.name.split('.')[0].replace('.', '-').replace('.', '-')}} state-{{$state.current.name.replace('.', '-').replace('.', '-')}}{% endraw %} {% if request.user %}user-logged {% else %}user-unlogged{% endif %}" id="html_body">
100 <body class="{% block section_name %}{% endblock %} {% raw %}top-state-{{$state.current.name.split('.')[0].replace('.', '-').replace('.', '-')}} state-{{$state.current.name.replace('.', '-').replace('.', '-')}}{% endraw %} {% if request.user %}user-logged {% else %}user-unlogged{% endif %}" id="html_body">
102 <div class="extra-deco1"></div>
103 <div class="extra-deco2"></div>
104
105
106 <div id="holder">
101 <div id="holder">
107 {% include "/header.jinja2" with context %}
102 {% block app_block %}
108 <div id="outer-content">
103 <appenlight-app>
109 {% block outer_content %}Content{% endblock %}
104 <div class="text-center">
110 </div>
105 <span class="fa fa-cog fa-spin fa-5x loader"></span>
106 </div>
107 </appenlight-app>
108 {% endblock %}
109
110 {% block non_angular_content %}
111 {% if not request.user %}
112 {% include "/header.jinja2" with context %}
113 <div id="outer-content">
114 {% block outer_content %}{% endblock %}
115 </div>
116 {% endif %}
117 {% endblock %}
111
118
112 {% include "/footer.jinja2" %}
119 {% include "/footer.jinja2" %}
113 </div>
120 </div>
114
115 </body>
121 </body>
116 </html>
122 </html>
@@ -1,4 +1,5 b''
1 {% extends "/layout.jinja2" %}
1 {% extends "/layout.jinja2" %}
2 {% block app_block %}{% endblock %}
2 {% block content %}
3 {% block content %}
3
4
4 <div class="col-sm-offset-1 col-sm-10">
5 <div class="col-sm-offset-1 col-sm-10">
@@ -1,4 +1,5 b''
1 {% extends "/layout.jinja2" %}
1 {% extends "/layout.jinja2" %}
2 {% block app_block %}{% endblock %}
2 {% block content %}
3 {% block content %}
3 <div class="col-sm-offset-1 col-sm-10">
4 <div class="col-sm-offset-1 col-sm-10">
4
5
@@ -1,9 +1,7 b''
1 {% extends "/layout.jinja2" %}
1 {% extends "/layout.jinja2" %}
2 {% block ng_controller %} data-ng-controller="RegisterController as
3 register" {% endblock %}
4 {% block content_class %}two-col equal{% endblock %}
2 {% block content_class %}two-col equal{% endblock %}
5 {% block section_name %}register-section{% endblock %}
3 {% block section_name %}register-section{% endblock %}
6
4 {% block app_block %}{% endblock %}
7 {% block page_title %}{% endblock %}
5 {% block page_title %}{% endblock %}
8
6
9 {% block content %}
7 {% block content %}
@@ -222,13 +222,13 b' def register(request):'
222
222
223
223
224 @view_config(route_name='/',
224 @view_config(route_name='/',
225 renderer='appenlight:templates/dashboard/index.jinja2',
225 renderer='appenlight:templates/app.jinja2',
226 permission=NO_PERMISSION_REQUIRED)
226 permission=NO_PERMISSION_REQUIRED)
227 @view_config(route_name='angular_app_ui',
227 @view_config(route_name='angular_app_ui',
228 renderer='appenlight:templates/dashboard/index.jinja2',
228 renderer='appenlight:templates/app.jinja2',
229 permission=NO_PERMISSION_REQUIRED)
229 permission=NO_PERMISSION_REQUIRED)
230 @view_config(route_name='angular_app_ui_ix',
230 @view_config(route_name='angular_app_ui_ix',
231 renderer='appenlight:templates/dashboard/index.jinja2',
231 renderer='appenlight:templates/app.jinja2',
232 permission=NO_PERMISSION_REQUIRED)
232 permission=NO_PERMISSION_REQUIRED)
233 def app_main_index(request):
233 def app_main_index(request):
234 """
234 """
@@ -40,7 +40,9 b" angular.module('appenlight.controllers', ["
40 'appenlight.base'
40 'appenlight.base'
41 ]);
41 ]);
42 angular.module('appenlight.components', [
42 angular.module('appenlight.components', [
43 'appenlight.components.channelstream'
43 'appenlight.components.channelstream',
44 'appenlight.components.appenlightApp',
45 'appenlight.components.appenlightHeader'
44 ]);
46 ]);
45 angular.module('appenlight.directives', [
47 angular.module('appenlight.directives', [
46 'appenlight.directives.appVersion',
48 'appenlight.directives.appVersion',
@@ -17,13 +17,17 b''
17 // # services, and proprietary license terms, please see
17 // # services, and proprietary license terms, please see
18 // # https://rhodecode.com/licenses/
18 // # https://rhodecode.com/licenses/
19
19
20 angular.module('appenlight.controllers')
20 angular.module('appenlight.components.appenlightHeader', [])
21 .controller('HeaderCtrl', HeaderCtrl);
21 .component('appenlightHeader', {
22 templateUrl: 'templates/components/appenlight-header.html',
23 controller: AppEnlightHeaderController
24 });
22
25
23 HeaderCtrl.$inject = ['$state', 'stateHolder'];
26 ChannelstreamController.$inject = ['$state', 'stateHolder', 'AeConfig'];
24
27
25 function HeaderCtrl($state, stateHolder) {
28 function AppEnlightHeaderController($state, stateHolder, AeConfig){
26 var vm = this;
29 var vm = this;
30 vm.AeConfig = AeConfig;
27 vm.stateHolder = stateHolder;
31 vm.stateHolder = stateHolder;
28 vm.assignedReports = stateHolder.AeUser.assigned_reports;
32 vm.assignedReports = stateHolder.AeUser.assigned_reports;
29 vm.latestEvents = stateHolder.AeUser.latest_events;
33 vm.latestEvents = stateHolder.AeUser.latest_events;
@@ -35,8 +39,6 b' function HeaderCtrl($state, stateHolder) {'
35 });
39 });
36
40
37 vm.clickedEvent = function(event){
41 vm.clickedEvent = function(event){
38 console.log(event);
39 // (from Event model)
40 // exception reports
42 // exception reports
41 if (_.contains([1,2], event.event_type)){
43 if (_.contains([1,2], event.event_type)){
42 $state.go('report.list', {resource:event.resource_id, start_date:event.start_date});
44 $state.go('report.list', {resource:event.resource_id, start_date:event.start_date});
@@ -42,11 +42,11 b' function ChannelstreamController($rootScope, stateHolder, userSelfPropertyResour'
42 _.each(data, function (message) {
42 _.each(data, function (message) {
43 console.log('channelstream-message', message);
43 console.log('channelstream-message', message);
44 if(typeof message.message.topic !== 'undefined'){
44 if(typeof message.message.topic !== 'undefined'){
45 $rootScope.$broadcast(
45 $rootScope.$emit(
46 'channelstream-message.'+message.message.topic, message);
46 'channelstream-message.'+message.message.topic, message);
47 }
47 }
48 else{
48 else{
49 $rootScope.$broadcast('channelstream-message', message);
49 $rootScope.$emit('channelstream-message', message);
50 }
50 }
51 });
51 });
52 });
52 });
@@ -23,9 +23,9 b" aeconfig.factory('AeConfig', function () {"
23 obj.flashMessages = decodeEncodedJSON(window.AE.flash_messages);
23 obj.flashMessages = decodeEncodedJSON(window.AE.flash_messages);
24 obj.timeOptions = decodeEncodedJSON(window.AE.timeOptions);
24 obj.timeOptions = decodeEncodedJSON(window.AE.timeOptions);
25 obj.plugins = decodeEncodedJSON(window.AE.plugins);
25 obj.plugins = decodeEncodedJSON(window.AE.plugins);
26 obj.topNav = decodeEncodedJSON(window.AE.topNav);
26 obj.ws_url = window.AE.ws_url;
27 obj.ws_url = window.AE.ws_url;
27 obj.urls = window.AE.urls;
28 obj.urls = window.AE.urls;
28
29 // set keys on values because we wont be able to retrieve them everywhere
29 // set keys on values because we wont be able to retrieve them everywhere
30 for (var key in obj.timeOptions) {
30 for (var key in obj.timeOptions) {
31 obj.timeOptions[key]['key'] = key;
31 obj.timeOptions[key]['key'] = key;
@@ -20,9 +20,9 b''
20 angular.module('appenlight.controllers')
20 angular.module('appenlight.controllers')
21 .controller('IndexDashboardController', IndexDashboardController);
21 .controller('IndexDashboardController', IndexDashboardController);
22
22
23 IndexDashboardController.$inject = ['$scope', '$location','$cookies', '$interval', 'stateHolder', 'userSelfPropertyResource', 'applicationsPropertyResource', 'AeConfig'];
23 IndexDashboardController.$inject = ['$rootScope', '$scope', '$location','$cookies', '$interval', 'stateHolder', 'applicationsPropertyResource', 'AeConfig'];
24
24
25 function IndexDashboardController($scope, $location, $cookies, $interval, stateHolder, userSelfPropertyResource, applicationsPropertyResource, AeConfig) {
25 function IndexDashboardController($rootScope, $scope, $location, $cookies, $interval, stateHolder, applicationsPropertyResource, AeConfig) {
26 var vm = this;
26 var vm = this;
27 stateHolder.section = 'dashboard';
27 stateHolder.section = 'dashboard';
28 vm.timeOptions = {};
28 vm.timeOptions = {};
@@ -32,6 +32,7 b' function IndexDashboardController($scope, $location, $cookies, $interval, stateH'
32 vm.timeOptions[key] = AeConfig.timeOptions[key];
32 vm.timeOptions[key] = AeConfig.timeOptions[key];
33 }
33 }
34 });
34 });
35 vm.stateHolder = stateHolder;
35 vm.urls = AeConfig.urls;
36 vm.urls = AeConfig.urls;
36 vm.applications = stateHolder.AeUser.applications_map;
37 vm.applications = stateHolder.AeUser.applications_map;
37 vm.show_dashboard = false;
38 vm.show_dashboard = false;
@@ -376,7 +377,7 b' function IndexDashboardController($scope, $location, $cookies, $interval, stateH'
376 };
377 };
377 vm.stream = {paused: false, filtered: false, messages: [], reports: []};
378 vm.stream = {paused: false, filtered: false, messages: [], reports: []};
378
379
379 $scope.$on('channelstream-message.front_dashboard.new_topic', function(event, message){
380 $rootScope.$on('channelstream-message.front_dashboard.new_topic', function(event, message){
380 var ws_report = message.message.report;
381 var ws_report = message.message.report;
381 if (ws_report.http_status != 500) {
382 if (ws_report.http_status != 500) {
382 return
383 return
@@ -646,9 +647,8 b' function IndexDashboardController($scope, $location, $cookies, $interval, stateH'
646 function () {
647 function () {
647 vm.loading.reports = false;
648 vm.loading.reports = false;
648 }
649 }
649 )
650 );
650 ;
651 };
651 }
652
652
653 if (stateHolder.AeUser.applications.length){
653 if (stateHolder.AeUser.applications.length){
654 vm.show_dashboard = true;
654 vm.show_dashboard = true;
@@ -664,5 +664,4 b' function IndexDashboardController($scope, $location, $cookies, $interval, stateH'
664 }
664 }
665 });
665 });
666
666
667
668 }
667 }
@@ -25,6 +25,8 b" ReportsViewController.$inject = ['$window', '$location', '$state', '$uibModal',"
25 function ReportsViewController($window, $location, $state, $uibModal, $cookies, reportGroupPropertyResource, reportGroupResource, logsNoIdResource, stateHolder) {
25 function ReportsViewController($window, $location, $state, $uibModal, $cookies, reportGroupPropertyResource, reportGroupResource, logsNoIdResource, stateHolder) {
26 var vm = this;
26 var vm = this;
27 vm.window = $window;
27 vm.window = $window;
28 vm.stateHolder = stateHolder;
29 vm.$state = $state;
28 vm.reportHistoryConfig = {
30 vm.reportHistoryConfig = {
29 data: {
31 data: {
30 json: [],
32 json: [],
@@ -154,7 +154,8 b" angular.module('appenlight.services.stateHolder', []).factory('stateHolder',"
154 resource: null,
154 resource: null,
155 plugins: Plugins,
155 plugins: Plugins,
156 flashMessages: flashMessages,
156 flashMessages: flashMessages,
157 AeUser: AeUser
157 AeUser: AeUser,
158 AeConfig: AeConfig
158 };
159 };
159 return stateHolder;
160 return stateHolder;
160 }]);
161 }]);
@@ -13,21 +13,20 b''
13
13
14 <div class="row">
14 <div class="row">
15 <div class="col-sm-12 dashboard" id="content">
15 <div class="col-sm-12 dashboard" id="content">
16
16 <div ng-if="!index.stateHolder.AeUser.applications.length">
17 <div ng-if="!stateHolder.AeUser.applications.length">
18
17
19 <div ng-include="'templates/quickstart.html'"></div>
18 <div ng-include="'templates/quickstart.html'"></div>
20
19
21 </div>
20 </div>
22
21
23 <div ng-if="stateHolder.AeUser.applications.length">
22 <div ng-if="index.stateHolder.AeUser.applications.length">
24
23
25 <div class="row">
24 <div class="row">
26 <div class="col-sm-6">
25 <div class="col-sm-6">
27 <div class="panel panel-default">
26 <div class="panel panel-default">
28 <div class="panel-body">
27 <div class="panel-body">
29 <form class="graph-type form-inline">
28 <form class="graph-type form-inline">
30 <select ng-model="index.resource" ng-options="r.resource_id as r.resource_name for r in stateHolder.AeUser.applications" ng-change="index.updateSearchParams()"
29 <select ng-model="index.resource" ng-options="r.resource_id as r.resource_name for r in index.stateHolder.AeUser.applications" ng-change="index.updateSearchParams()"
31 class="SelectField form-control input-sm slim-input"></select>
30 class="SelectField form-control input-sm slim-input"></select>
32
31
33 <select class="SelectField form-control input-sm slim-input" ng-model="index.timeSpan"
32 <select class="SelectField form-control input-sm slim-input" ng-model="index.timeSpan"
@@ -94,7 +94,7 b''
94
94
95 <div ng-if="report.report !== null && !report.is_loading.report">
95 <div ng-if="report.report !== null && !report.is_loading.report">
96
96
97 <div ng-if="stateHolder.AeUser.id" class="row">
97 <div ng-if="report.stateHolder.AeUser.id" class="row">
98 <div class="col-lg-12">
98 <div class="col-lg-12">
99 <a onclick="window.history.back()" class="btn btn-default" ng-if="report.window.history.length > 2"><span class="fa fa-arrow-circle-o-left"></span>
99 <a onclick="window.history.back()" class="btn btn-default" ng-if="report.window.history.length > 2"><span class="fa fa-arrow-circle-o-left"></span>
100 Go back</a>
100 Go back</a>
@@ -154,7 +154,7 b''
154 <td class="table-label">Public URL</td>
154 <td class="table-label">Public URL</td>
155 <td class="data">
155 <td class="data">
156 <form>
156 <form>
157 <textarea class="TextAreaField form-control" id="public-url" onclick="this.select()">{{$state.href($state.current.name, $state.params, {absolute: true})}}</textarea>
157 <textarea class="TextAreaField form-control" id="public-url" onclick="this.select()">{{report.$state.href(report.$state.current.name, report.$state.params, {absolute: true})}}</textarea>
158 </form>
158 </form>
159 </td>
159 </td>
160 </tr>
160 </tr>
1 NO CONTENT: file was removed
NO CONTENT: file was removed
General Comments 0
You need to be logged in to leave comments. Login now