highcharts
Version:
JavaScript charting framework
127 lines (126 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
*
*
* */
;
/* *
*
* Imports
*
* */
import AST from '../Core/Renderer/HTML/AST.js';
import BaseFormIcons from './BaseFormIcons.js';
import getIcon from './BaseFormUtils.js';
import { addEvent, createElement } from './Utilities.js';
/* *
*
* Class
*
* */
class BaseForm {
/* *
*
* Constructor
*
* */
constructor(parentDiv, iconsURL) {
this.iconsURL = iconsURL;
this.container = this.createPopupContainer(parentDiv);
this.closeButton = this.addCloseButton();
}
/* *
*
* Functions
*
* */
/**
* Create popup div container.
*
* @param {HTMLElement} parentDiv
* Parent div to attach popup.
*
* @param {string} className
* Class name of the popup.
*
* @return {HTMLElement}
* Popup div.
*/
createPopupContainer(parentDiv, className = 'highcharts-popup highcharts-no-tooltip') {
return createElement('div', { className }, void 0, parentDiv);
}
/**
* Create HTML element and attach click event to close popup.
*
* @param {string} className
* Class name of the close button.
*
* @return {HTMLElement}
* Close button.
*/
addCloseButton(className = 'highcharts-popup-close') {
// Create close popup button.
const closeButton = createElement('button', { className }, void 0, this.container);
createElement('span', {
className: 'highcharts-icon'
}, {
backgroundImage: getIcon('close.svg', this.iconsURL, BaseFormIcons)
}, closeButton);
['click', 'touchstart'].forEach((eventName) => {
addEvent(closeButton, eventName, this.closeButtonEvents.bind(this));
});
// Close popup when press ESC
addEvent(document, 'keydown', (event) => {
if (event.code === 'Escape') {
this.closeButtonEvents();
}
});
return closeButton;
}
/**
* Close button events.
* @return {void}
*/
closeButtonEvents() {
this.closePopup();
}
/**
* Reset content of the current popup and show.
*
* @param {string} toolbarClass
* Class name of the toolbar which styles should be reset.
*/
showPopup(toolbarClass = 'highcharts-annotation-toolbar') {
const popupDiv = this.container, popupCloseButton = this.closeButton;
this.type = void 0;
// Reset content.
popupDiv.innerHTML = AST.emptyHTML;
// Reset toolbar styles if exists.
if (popupDiv.className.indexOf(toolbarClass) >= 0) {
popupDiv.classList.remove(toolbarClass);
// Reset toolbar inline styles
popupDiv.removeAttribute('style');
}
// Add close button.
popupDiv.appendChild(popupCloseButton);
popupDiv.style.display = 'block';
popupDiv.style.height = '';
}
/**
* Hide popup.
*/
closePopup() {
this.container.style.display = 'none';
}
}
/* *
*
* Default Export
*
* */
export default BaseForm;