| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420 |
- commit 34ab1e529b499af836631f8076c2c4df02be5860
- Author: Torkel Ödegaard <torkel.odegaard@gmail.com>
- Date: Sat Aug 16 21:54:05 2014 +0200
- Lots of work on the side menu
- diff --git a/src/app/controllers/p_grafanaCtrl.js b/src/app/controllers/p_grafanaCtrl.js
- index 2793eabaf..e9484d76d 100644
- --- a/src/app/controllers/p_grafanaCtrl.js
- +++ b/src/app/controllers/p_grafanaCtrl.js
- @@ -3,8 +3,9 @@ define([
- 'config',
- 'lodash',
- 'jquery',
- + 'store',
- ],
- -function (angular, config, _, $) {
- +function (angular, config, _, $, store) {
- "use strict";
-
- var module = angular.module('grafana.controllers');
- @@ -12,30 +13,37 @@ function (angular, config, _, $) {
- module.controller('GrafanaCtrl', function($scope, alertSrv, grafanaVersion, $rootScope) {
-
- $scope.grafanaVersion = grafanaVersion[0] === '@' ? 'master' : grafanaVersion;
- - $scope.consoleEnabled = (window.localStorage && window.localStorage.grafanaConsole === 'true');
- + $scope.consoleEnabled = store.getBool('grafanaConsole');
- + $scope.showProSideMenu = store.getBool('grafanaProSideMenu');
-
- - $rootScope.profilingEnabled = (window.localStorage && window.localStorage.profilingEnabled === 'true');
- + $rootScope.profilingEnabled = store.getBool('profilingEnabled');
- $rootScope.performance = { loadStart: new Date().getTime() };
-
- $scope.init = function() {
- $scope._ = _;
- - if ($rootScope.profilingEnabled) {
- - $scope.initProfiling();
- - }
- +
- + if ($rootScope.profilingEnabled) { $scope.initProfiling(); }
-
- $scope.dashAlerts = alertSrv;
- - $scope.grafana = {
- - style: 'dark'
- - };
- + $scope.grafana = { style: 'dark' };
- +
- + $scope.onAppEvent('logged-out', function() {
- + $scope.showProSideMenu = false;
- + });
- +
- + $scope.onAppEvent('logged-in', function() {
- + $scope.showProSideMenu = store.getBool('grafanaProSideMenu');
- + });
- };
-
- $scope.toggleProSideMenu = function() {
- $scope.showProSideMenu = !$scope.showProSideMenu;
- + store.set('grafanaProSideMenu', $scope.showProSideMenu);
- };
-
- $scope.toggleConsole = function() {
- $scope.consoleEnabled = !$scope.consoleEnabled;
- - window.localStorage.grafanaConsole = $scope.consoleEnabled ? 'true' : 'false';
- + store.set('grafanaConsole', $scope.consoleEnabled);
- };
-
- $rootScope.onAppEvent = function(name, callback) {
- diff --git a/src/app/controllers/p_loginCtrl.js b/src/app/controllers/p_loginCtrl.js
- index 1c729a843..793cd3578 100644
- --- a/src/app/controllers/p_loginCtrl.js
- +++ b/src/app/controllers/p_loginCtrl.js
- @@ -6,27 +6,48 @@ function (angular) {
-
- var module = angular.module('grafana.controllers');
-
- - module.controller('LoginCtrl', function($scope, $http, $location) {
- + module.controller('LoginCtrl', function($scope, $http, $location, $routeParams, alertSrv) {
- $scope.loginModel = {};
-
- + $scope.init = function() {
- + if ($routeParams.logout) {
- + $scope.logout();
- + }
- + };
- +
- + $scope.logout = function() {
- + $http.post('/logout').then(function() {
- +
- + alertSrv.set('Logged out!', '', 'success', 3000);
- + $scope.emitAppEvent('logged-out');
- +
- + }, function() {
- + alertSrv.set('Logout failed:', 'Unexpected error', 'error', 3000);
- + });
- + };
- +
- $scope.login = function() {
- delete $scope.loginError;
- +
- if (!$scope.loginForm.$valid) {
- return;
- }
-
- $http.post('/login', $scope.loginModel).then(function() {
- + $scope.emitAppEvent('logged-in');
- $location.path('/');
- }, function(err) {
- if (err.status === 401) {
- $scope.loginError = "Username or password is incorrect";
- }
- else {
- - $scope.loginErro = "Unexpected error";
- + $scope.loginError = "Unexpected error";
- }
- });
- };
-
- + $scope.init();
- +
- });
-
- });
- diff --git a/src/app/partials/dashboard.html b/src/app/partials/dashboard.html
- index 1593501ad..acfd80518 100644
- --- a/src/app/partials/dashboard.html
- +++ b/src/app/partials/dashboard.html
- @@ -1,6 +1,6 @@
- <div ng-controller="DashboardCtrl" body-class ng-class="{'dashboard-fullscreen': dashboardViewState.fullscreen}">
-
- - <div ng-include="'app/partials/p_dashboard_topnav.html'">
- + <div ng-include="'app/partials/pro/dashboard_topnav.html'">
- </div>
-
- <div class="submenu-controls">
- diff --git a/src/app/partials/pro/admin_datasources.html b/src/app/partials/pro/admin_datasources.html
- new file mode 100644
- index 000000000..10276b5a1
- --- /dev/null
- +++ b/src/app/partials/pro/admin_datasources.html
- @@ -0,0 +1,14 @@
- +<div class="navbar navbar-static-top">
- + <div class="navbar-inner">
- + <div class="container-fluid">
- + <span class="brand">
- + <a ng-click="toggleProSideMenu()">
- + <img src="img/small.png">
- + </a>
- + Admin / Data sources
- + </span>
- + </div>
- + </div>
- +</div>
- +
- +
- diff --git a/src/app/partials/p_dashboard_topnav.html b/src/app/partials/pro/dashboard_topnav.html
- similarity index 97%
- rename from src/app/partials/p_dashboard_topnav.html
- rename to src/app/partials/pro/dashboard_topnav.html
- index d24812160..fdd0cba10 100644
- --- a/src/app/partials/p_dashboard_topnav.html
- +++ b/src/app/partials/pro/dashboard_topnav.html
- @@ -3,7 +3,7 @@
- <div class="container-fluid">
- <span class="brand">
- <a ng-click="toggleProSideMenu()">
- - <img src="img/small.png" bs-tooltip="'Grafana'" data-placement="bottom">
- + <img src="img/small.png">
- </a>
- {{dashboard.title}}
- </span>
- diff --git a/src/app/partials/p_login.html b/src/app/partials/pro/login.html
- similarity index 99%
- rename from src/app/partials/p_login.html
- rename to src/app/partials/pro/login.html
- index 0f75a687c..92f1c4e89 100644
- --- a/src/app/partials/p_login.html
- +++ b/src/app/partials/pro/login.html
- @@ -2,6 +2,7 @@
- <div class="container">
-
- <div class="login-box">
- +
- <div class="login-box-logo">
- <img src="/img/logo_transparent_200x75.png">
- </div>
- diff --git a/src/app/partials/pro/sidemenu.html b/src/app/partials/pro/sidemenu.html
- new file mode 100644
- index 000000000..fa309e9c3
- --- /dev/null
- +++ b/src/app/partials/pro/sidemenu.html
- @@ -0,0 +1,45 @@
- +<div class="navbar navbar-static-top">
- + <div class="navbar-inner">
- + <div class="container-fluid">
- + <span class="brand">
- + <i class="icon-gears" style=""></i>
- + <span style="color: white; padding-left: 4px;">Grafana</span>
- + <ul class="nav" ng-controller='DashboardNavCtrl' ng-init="init()">
- + </span>
- + </ul>
- + </div>
- + </div>
- +</div>
- +
- +<section class="pro-sidemenu-items">
- + <a class="pro-sidemenu-link pro-side-menu-user" href="/login?logout">
- + <img src="https://secure.gravatar.com/avatar/c8656e8972626f01e1703681d5e55f92?s=90&default=blank">
- + logout
- + </a>
- + <a class="pro-sidemenu-link" href="/dashboard/db/home">
- + <i class="icon-th-large"></i>
- + Dashboards
- + </a>
- + <a class="pro-sidemenu-link" href="/charts">
- + <i class="icon-signal"></i>
- + Graphs
- + </a>
- + <a class="pro-sidemenu-link" href="/charts">
- + <i class="icon-bolt" style="padding-right: 23px"></i>
- + Alerts
- + </a>
- + <a class="pro-sidemenu-link" href="/admin/datasources">
- + <i class="icon-sitemap"></i>
- + Data sources
- + </a>
- + <a class="pro-sidemenu-link" href="/admin">
- + <i class="icon-tasks"></i>
- + Global options
- + </a>
- + <a class="pro-sidemenu-link" href="/admin">
- + <i class="icon-user"></i>
- + User accounts
- + </a>
- +</section>
- +
- +</div>
- diff --git a/src/app/routes/p_admin.js b/src/app/routes/p_admin.js
- new file mode 100644
- index 000000000..75bf5b272
- --- /dev/null
- +++ b/src/app/routes/p_admin.js
- @@ -0,0 +1,21 @@
- +define([
- + 'angular',
- +],
- +function (angular) {
- + "use strict";
- +
- + var module = angular.module('grafana.routes');
- +
- + module.config(function($routeProvider) {
- + $routeProvider
- + .when('/admin/datasources', {
- + templateUrl: 'app/partials/pro/admin_datasources.html',
- + controller : 'AdminCtrl',
- + });
- + });
- +
- + module.controller('AdminCtrl', function() {
- +
- + });
- +
- +});
- diff --git a/src/app/routes/p_all.js b/src/app/routes/p_all.js
- index 24b097152..185563c15 100644
- --- a/src/app/routes/p_all.js
- +++ b/src/app/routes/p_all.js
- @@ -1,5 +1,7 @@
- define([
- './p_dashboard',
- './p_solo-panel',
- + './p_admin',
- + './p_login',
- ],
- function () {});
- diff --git a/src/app/routes/p_dashboard.js b/src/app/routes/p_dashboard.js
- index 7bf16f51c..08c729c2a 100644
- --- a/src/app/routes/p_dashboard.js
- +++ b/src/app/routes/p_dashboard.js
- @@ -1,6 +1,5 @@
- define([
- 'angular',
- - 'controllers/p_loginCtrl'
- ],
- function (angular) {
- "use strict";
- @@ -23,10 +22,6 @@ function (angular) {
- templateUrl: '/app/partials/dashboard.html',
- controller : 'DashFromDBProvider',
- reloadOnSearch: false,
- - })
- - .when('/login', {
- - templateUrl: '/app/partials/p_login.html',
- - controller : 'LoginCtrl',
- });
- });
-
- diff --git a/src/app/routes/p_login.js b/src/app/routes/p_login.js
- new file mode 100644
- index 000000000..127c4d47f
- --- /dev/null
- +++ b/src/app/routes/p_login.js
- @@ -0,0 +1,59 @@
- +define([
- + 'angular',
- +],
- +function (angular) {
- + "use strict";
- +
- + var module = angular.module('grafana.routes');
- +
- + module.config(function($routeProvider) {
- + $routeProvider
- + .when('/login', {
- + templateUrl: 'app/partials/pro/login.html',
- + controller : 'LoginCtrl',
- + });
- + });
- +
- + module.controller('LoginCtrl', function($scope, $http, $location, $routeParams, alertSrv) {
- + $scope.loginModel = {};
- +
- + $scope.init = function() {
- + if ($routeParams.logout) {
- + $scope.logout();
- + }
- + };
- +
- + $scope.logout = function() {
- + $http.post('/logout').then(function() {
- + alertSrv.set('Logged out!', '', 'success', 3000);
- + $scope.emitAppEvent('logged-out');
- + }, function() {
- + alertSrv.set('Logout failed:', 'Unexpected error', 'error', 3000);
- + });
- + };
- +
- + $scope.login = function() {
- + delete $scope.loginError;
- +
- + if (!$scope.loginForm.$valid) {
- + return;
- + }
- +
- + $http.post('/login', $scope.loginModel).then(function() {
- + $scope.emitAppEvent('logged-in');
- + $location.path('/');
- + }, function(err) {
- + if (err.status === 401) {
- + $scope.loginError = "Username or password is incorrect";
- + }
- + else {
- + $scope.loginError = "Unexpected error";
- + }
- + });
- + };
- +
- + $scope.init();
- +
- + });
- +
- +});
- diff --git a/src/css/less/p_pro.less b/src/css/less/p_pro.less
- index f50658e3f..029d312d4 100644
- --- a/src/css/less/p_pro.less
- +++ b/src/css/less/p_pro.less
- @@ -9,12 +9,17 @@
- top: 0;
- left: 0;
- width: 200px;
- - background: @grafanaPanelBackground;
- + background: @bodyBackground;
- border-right: 2px solid black;
- min-height: 100%;
- z-index: 101;
- }
-
- + .dashboard-notice {
- + margin-left: 200px;
- + width: auto;
- + }
- +
- .pro-main-view {
- padding-left: 200px;
- }
- @@ -24,6 +29,33 @@
- }
- }
-
- +.pro-sidemenu-items {
- +}
- +
- +.pro-sidemenu-link {
- + font-size: 1.0rem;
- + padding: 14px 10px 14px 20px;
- + display: block;
- + background: @grafanaPanelBackground;
- + color: @grayLight;
- + i {
- + padding-right: 15px;
- + }
- + border-bottom: 1px solid black;
- +}
- +
- +.pro-sidemenu-link:first-child {
- + // border-top: 1px solid black;
- +}
- +
- +.pro-side-menu-user {
- + padding-left: 5px;
- + img {
- + width: 49px;
- + padding-right: 10px;
- + }
- +}
- +
- .login-box {
- width: 700px;
- margin: 100px auto 0 auto;
|