Source code for highcharts_core.utility_classes.menus
from typing import Optional
from collections import UserDict
try:
    import orjson as json
except ImportError:
    try:
        import rapidjson as json
    except ImportError:
        try:
            import simplejson as json
        except ImportError:
            import json
import esprima
from esprima.error_handler import Error as ParseError
from validator_collection import validators, errors as validator_errors
from highcharts_core import errors
from highcharts_core.decorators import class_sensitive, validate_types
from highcharts_core.metaclasses import HighchartsMeta, JavaScriptDict
from highcharts_core.utility_classes.javascript_functions import CallbackFunction
from highcharts_core.js_literal_functions import assemble_js_literal, serialize_to_js_literal
[docs]class MenuItem(HighchartsMeta):
    """Configuration for an item that appears in a context menu."""
    def __init__(self, **kwargs):
        self._onclick = None
        self._text = None
        self._text_key = None
        self._separator = False
        self.onclick = kwargs.get('onclick', None)
        self.text = kwargs.get('text', None)
        self.text_key = kwargs.get('text_key', None)
        self.separator = kwargs.get('separator', None)
    @property
    def onclick(self) -> Optional[CallbackFunction]:
        """JavaScript event callback function which fires when the menu item is clicked.
        :rtype: :class:`CallbackFunction` or :obj:`None <python:None>`
        """
        return self._onclick
    @onclick.setter
    @class_sensitive(CallbackFunction)
    def onclick(self, value):
        self._onclick = value
    @property
    def text(self) -> Optional[str]:
        """The text to display for the menu item.
        :rtype: :class:`str <python:str>` or :obj:`None <python:None>`
        """
        return self._text
    @text.setter
    def text(self, value):
        self._text = validators.string(value, allow_empty = True)
    @property
    def text_key(self) -> Optional[str]:
        """If internationalization is required, the key to a language string.
        :rtype: :class:`str <python:str>` or :obj:`None <python:None>`
        """
        return self._text_key
    @text_key.setter
    def text_key(self, value):
        self._text_key = validators.string(value, allow_empty = True)
    @property
    def separator(self) -> Optional[bool]:
        """If ``True``, indicates that the item should be rendered as a separator.
        Defaults to ``False``, but may also be :obj:`None <python:None>`.
        :rtype: :class:`bool <python:bool>` or :obj:`None <python:None>`
        """
        return self._separator
    @separator.setter
    def separator(self, value):
        if value is False or value is None:
            self._separator = value
        elif value:
            self._separator = True
        else:
            self._separator = False
    @classmethod
    def _get_kwargs_from_dict(cls, as_dict):
        kwargs = {
            'onclick': as_dict.get('onclick', None),
            'text': as_dict.get('text', None),
            'text_key': as_dict.get('textKey', None),
            'separator': as_dict.get('separator', None)
        }
        return kwargs
    def _to_untrimmed_dict(self, in_cls = None) -> dict:
        untrimmed = {
            'onclick': self.onclick,
            'text': self.text,
            'textKey': self.text_key,
            'separator': self.separator
        }
        return untrimmed
[docs]class MenuObject(JavaScriptDict):
    """Special :class:`dict <python:dict>` class used to construct a Highcharts menu
    configuration. Each key represents the identifier of a menu item, while the object
    is a configuration of that menu item's settings.
    Keys are validated to be valid variable names, while each value is validated to be a
    :class:`MenuItem`.
    """
    _valid_value_types = MenuItem
    _allow_empty_value = False