diff --git a/public/app/core/components/grafana_app.ts b/public/app/core/components/grafana_app.ts index 16666dea1b2..17aecb68d32 100644 --- a/public/app/core/components/grafana_app.ts +++ b/public/app/core/components/grafana_app.ts @@ -69,6 +69,30 @@ export class GrafanaCtrl { } } +function setViewModeBodyClass(body, mode, sidemenuOpen: boolean) { + body.removeClass('view-mode--tv'); + body.removeClass('view-mode--kiosk'); + body.removeClass('view-mode--inactive'); + + switch (mode) { + case 'tv': { + body.removeClass('sidemenu-open'); + body.addClass('view-mode--tv'); + break; + } + // 1 & true for legacy states + case 1: + case true: { + body.removeClass('sidemenu-open'); + body.addClass('view-mode--kiosk'); + break; + } + default: { + body.toggleClass('sidemenu-open', sidemenuOpen); + } + } +} + /** @ngInject */ export function grafanaAppDirective(playlistSrv, contextSrv, $timeout, $rootScope, $location) { return { @@ -98,7 +122,7 @@ export function grafanaAppDirective(playlistSrv, contextSrv, $timeout, $rootScop }); scope.$watch(() => playlistSrv.isPlaying, function(newValue) { - elem.toggleClass('playlist-active', newValue === true); + elem.toggleClass('view-mode--playlist', newValue === true); }); // check if we are in server side render @@ -127,17 +151,7 @@ export function grafanaAppDirective(playlistSrv, contextSrv, $timeout, $rootScop $('#tooltip, .tooltip').remove(); // check for kiosk url param - if (data.params.kiosk) { - appEvents.emit('toggle-kiosk-mode'); - } - - // check for 'inactive' url param for clean looks like kiosk, but with title - if (data.params.inactive) { - body.addClass('user-activity-low'); - - // for some reason, with this class it looks cleanest - body.addClass('sidemenu-open'); - } + setViewModeBodyClass(body, data.params.kiosk, sidemenuOpen); // close all drops for (const drop of Drop.drops) { @@ -146,15 +160,37 @@ export function grafanaAppDirective(playlistSrv, contextSrv, $timeout, $rootScop }); // handle kiosk mode - appEvents.on('toggle-kiosk-mode', () => { - body.toggleClass('page-kiosk-mode'); + appEvents.on('toggle-kiosk-mode', options => { + const search = $location.search(); + + if (options && options.exit) { + search.kiosk = 1; + } + + switch (search.kiosk) { + case 'tv': { + search.kiosk = 1; + appEvents.emit('alert-success', ['Press ESC to exit Kiosk mode']); + break; + } + case 1: + case true: { + delete search.kiosk; + break; + } + default: { + search.kiosk = 'tv'; + } + } + + $location.search(search); + setViewModeBodyClass(body, search.kiosk, sidemenuOpen); }); // handle in active view state class let lastActivity = new Date().getTime(); let activeUser = true; - const inActiveTimeLimit = 60 * 1000; - let sidemenuHidden = false; + const inActiveTimeLimit = 60 * 5000; function checkForInActiveUser() { if (!activeUser) { @@ -167,15 +203,8 @@ export function grafanaAppDirective(playlistSrv, contextSrv, $timeout, $rootScop if (new Date().getTime() - lastActivity > inActiveTimeLimit) { activeUser = false; - body.addClass('user-activity-low'); - // hide sidemenu - if (sidemenuOpen) { - sidemenuHidden = true; - body.removeClass('sidemenu-open'); - $timeout(function() { - $rootScope.$broadcast('render'); - }, 100); - } + body.addClass('view-mode--inactive'); + body.removeClass('sidemenu-open'); } } @@ -183,17 +212,8 @@ export function grafanaAppDirective(playlistSrv, contextSrv, $timeout, $rootScop lastActivity = new Date().getTime(); if (!activeUser) { activeUser = true; - body.removeClass('user-activity-low'); - - // restore sidemenu - if (sidemenuHidden) { - sidemenuHidden = false; - body.addClass('sidemenu-open'); - appEvents.emit('toggle-inactive-mode'); - $timeout(function() { - $rootScope.$broadcast('render'); - }, 100); - } + body.removeClass('view-mode--inactive'); + body.toggleClass('sidemenu-open', sidemenuOpen); } } diff --git a/public/app/core/components/scroll/scroll.ts b/public/app/core/components/scroll/scroll.ts index 5cdbdb62ee3..2d60825e739 100644 --- a/public/app/core/components/scroll/scroll.ts +++ b/public/app/core/components/scroll/scroll.ts @@ -1,7 +1,6 @@ import $ from 'jquery'; import baron from 'baron'; import coreModule from 'app/core/core_module'; -import appEvents from 'app/core/app_events'; const scrollBarHTML = `
+ + - - + +