@highcharts/dashboards
Version:
Highcharts Dashboards framework
108 lines (107 loc) • 3.34 kB
JavaScript
/* *
*
* (c) 2009-2026 Highsoft AS
*
* Integration of this software requires a license.
* - For commercial use, see www.highcharts.com/license
* - For non-commercial, see www.highcharts.com/license-eula
*
*
* Authors:
* - Sebastian Bochan
* - Wojciech Chmiel
* - Gøran Slettemark
* - Sophie Bremer
*
* */
import Globals from '../Globals.js';
import { addEvent } from '../../Shared/Utilities.js';
class Fullscreen {
/* *
*
* Constructor
*
* */
constructor(DashboardClass) {
this.isOpen = false;
this.board = DashboardClass;
// Add class to allow scroll element
this.board.boardWrapper.classList.add(Globals.classNamePrefix + '-fullscreen');
}
/* *
*
* Functions
*
* */
/**
* Toggles displaying the board in fullscreen mode.
*
* @param container
* The container to be displayed in fullscreen mode.
*/
toggle(container) {
const fullscreen = this, isOpen = this.isOpen;
fullscreen[isOpen ? 'close' : 'open'](container);
}
/**
* Display board in fullscreen.
*/
open(container) {
if (this.isOpen) {
return;
}
const fullscreen = this;
const board = fullscreen.board;
const elementToFullscreen = container || board.boardWrapper;
// Handle exitFullscreen() method when user clicks 'Escape' button.
const unbindChange = addEvent(board.boardWrapper.ownerDocument, // Dashboard's document
'fullscreenchange', function () {
if (fullscreen.isOpen) {
fullscreen.isOpen = false;
fullscreen.close();
}
else {
fullscreen.isOpen = true;
fullscreen.setButtonText();
}
});
fullscreen.unbindFullscreenEvent = () => {
unbindChange();
};
const promise = elementToFullscreen.requestFullscreen();
promise['catch'](() => {
throw new Error('Full screen is not supported.');
});
}
/**
* Stops displaying the dashboard in fullscreen mode.
*/
close() {
const fullscreen = this;
const board = fullscreen.board;
// Don't fire exitFullscreen() when user exited using 'Escape' button.
if (fullscreen.isOpen &&
board.boardWrapper.ownerDocument instanceof Document) {
void board.boardWrapper.ownerDocument.exitFullscreen();
}
// Unbind event as it's necessary only before exiting from fullscreen.
if (fullscreen.unbindFullscreenEvent) {
fullscreen.unbindFullscreenEvent =
fullscreen.unbindFullscreenEvent();
}
fullscreen.isOpen = false;
this.setButtonText();
}
/**
* Set the correct text depending of the fullscreen is on or of.
*/
setButtonText() {
const editMode = this.board.editMode, contextMenu = editMode && editMode.tools.contextMenu, button = contextMenu && contextMenu.items.viewFullscreen;
if (button && button.innerElement) {
const lang = editMode.lang;
button.innerElement.innerHTML =
(this.isOpen ? lang.exitFullscreen : lang.viewFullscreen) || '';
}
}
}
export default Fullscreen;