diff --git a/src/app/directives/bodyClass.js b/src/app/directives/bodyClass.js index 0b1cac65614..20339b8bf92 100644 --- a/src/app/directives/bodyClass.js +++ b/src/app/directives/bodyClass.js @@ -1,9 +1,8 @@ define([ 'angular', - 'app', 'lodash' ], -function (angular) { +function (angular, _) { 'use strict'; angular @@ -35,9 +34,8 @@ function (angular) { } }); - $scope.$watch('playlist_active', function() { - elem.toggleClass('hide-controls', $scope.playlist_active === true); - elem.toggleClass('playlist-active', $scope.playlist_active === true); + $scope.$watch('playlistSrv', function(newValue) { + elem.toggleClass('playlist-active', _.isObject(newValue)); }); } }; diff --git a/src/app/features/dashboard/playlistSrv.js b/src/app/features/dashboard/playlistSrv.js index 1af3360e85c..2c10391124b 100644 --- a/src/app/features/dashboard/playlistSrv.js +++ b/src/app/features/dashboard/playlistSrv.js @@ -4,88 +4,51 @@ define([ 'kbn', 'store' ], -function (angular, _, kbn, store) { +function (angular, _, kbn) { 'use strict'; var module = angular.module('grafana.services'); - module.service('playlistSrv', function($location, $rootScope) { - var timerInstance; - var favorites = { dashboards: [] }; + module.service('playlistSrv', function($location, $rootScope, $timeout) { + var self = this; - this.init = function() { - var existingJson = store.get("grafana-favorites"); - if (existingJson) { - favorites = angular.fromJson(existingJson); - } + this.next = function() { + $timeout.cancel(self.cancelPromise); + + angular.element(window).unbind('resize'); + var dash = self.dashboards[self.index % self.dashboards.length]; + var relativeUrl = dash.url.substring($location.absUrl().length - $location.url().length); + + $location.url(relativeUrl); + self.index++; + + self.cancelPromise = $timeout(self.next, self.interval); }; - this._save = function() { - store.set('grafana-favorites', angular.toJson(favorites)); - }; - - this._find = function(title) { - return _.findWhere(favorites.dashboards, { title: title }); - }; - - this._remove = function(existing) { - if (existing) { - favorites.dashboards = _.without(favorites.dashboards, existing); - } - }; - - this.isCurrentFavorite = function(dashboard) { - return this._find(dashboard.title) ? true : false; - }; - - this.markAsFavorite = function(dashboard) { - var existing = this._find(dashboard.title); - this._remove(existing); - - favorites.dashboards.push({ - url: $location.path(), - title: dashboard.title - }); - - this._save(); - }; - - this.removeAsFavorite = function(toRemove) { - var existing = this._find(toRemove.title); - this._remove(existing); - this._save(); - }; - - this.getFavorites = function() { - return favorites; + this.prev = function() { + self.index = Math.max(self.index - 2, 0); + self.next(); }; this.start = function(dashboards, timespan) { this.stop(); - var interval = kbn.interval_to_ms(timespan); - var index = 0; + self.interval = kbn.interval_to_ms(timespan); + self.dashboards = dashboards; + $rootScope.playlistSrv = this; - $rootScope.playlist_active = true; - - timerInstance = setInterval(function() { - $rootScope.$apply(function() { - angular.element(window).unbind('resize'); - var dash = dashboards[index % dashboards.length]; - var relativeUrl = dash.url.substring($location.absUrl().length - $location.url().length); - $location.url(relativeUrl); - - index++; - }); - }, interval); + self.cancelPromise = $timeout(self.next, self.interval); }; this.stop = function() { - clearInterval(timerInstance); - $rootScope.playlist_active = false; - }; + self.index = 0; - this.init(); + if (self.cancelPromise) { + $timeout.cancel(self.cancelPromise); + } + + $rootScope.playlistSrv = null; + }; }); diff --git a/src/app/partials/dashboard_topnav.html b/src/app/partials/dashboard_topnav.html index 38f367ff87f..71956a8c461 100644 --- a/src/app/partials/dashboard_topnav.html +++ b/src/app/partials/dashboard_topnav.html @@ -19,11 +19,11 @@ - {{dashboard.title}} - - + {{dashboard.title}} + + -