from typing import Optional
from validator_collection import validators
from highcharts_core.decorators import class_sensitive
from highcharts_core.metaclasses import HighchartsMeta
from highcharts_core.utility_classes.javascript_functions import CallbackFunction
[docs]class AnimationOptions(HighchartsMeta):
"""An animation configuration.
.. note::
Animation configurations can also be defined as :class:`bool <python:bool>`, where
``False`` turns off animation and ``True`` defaults to a duration of 500ms and defer
of 0ms.
"""
def __init__(self, **kwargs):
self._complete = None
self._defer = None
self._duration = None
self._easing = None
self._step = None
self.complete = kwargs.get('complete', None)
self.defer = kwargs.get('defer', None)
self.duration = kwargs.get('duration', None)
self.easing = kwargs.get('easing', None)
self.step = kwargs.get('step', None)
@property
def complete(self) -> Optional[CallbackFunction]:
"""A JavaScript callback function to execute when the animation finishes.
:rtype: :class:`CallbackFunction` or :obj:`None <python:None>`
"""
return self._complete
@complete.setter
@class_sensitive(CallbackFunction)
def complete(self, value):
self._complete = value
@property
def defer(self) -> Optional[int]:
"""The number of milliseconds to defer the animation. Defaults to ``0``.
:rtype: :class:`int <python:int>` or :obj:`None <python:None>`
:raises ValueError: if set to a negative number
"""
return self._defer
@defer.setter
def defer(self, value):
self._defer = validators.integer(value,
allow_empty = True,
minimum = 0,
coerce_value = True)
@property
def duration(self) -> Optional[int]:
"""The animation duration, expressed in milliseconds. Defaults to ``500``.
:rtype: :class:`int <python:int>` or :obj:`None <python:None>`
:raises ValueError: if set to a negative number
"""
return self._duration
@duration.setter
def duration(self, value):
self._duration = validators.integer(value,
allow_empty = True,
minimum = 0,
coerce_value = True)
@property
def easing(self) -> Optional[str]:
"""The name of an easing function as defined on the JavaScript ``Math`` object.
:rtype: :class:`str <python:str>` or :obj:`None <python:None>`
"""
return self._easing
@easing.setter
def easing(self, value):
self._easing = validators.string(value, allow_empty = True)
@property
def step(self) -> Optional[CallbackFunction]:
"""A JavaScript callback function to execute on each step of each attribute or
CSS property that is being animated.
The first argument contains information about the animation and progress.
:rtype: :class:`CallbackFunction` or :obj:`None <python:None>`
"""
return self._step
@step.setter
@class_sensitive(CallbackFunction)
def step(self, value):
self._step = value
@classmethod
def _get_kwargs_from_dict(cls, as_dict):
kwargs = {
'complete': as_dict.get('complete', None),
'defer': as_dict.get('defer', None),
'duration': as_dict.get('duration', None),
'easing': as_dict.get('easing', None),
'step': as_dict.get('step', None)
}
return kwargs
def _to_untrimmed_dict(self, in_cls = None) -> dict:
untrimmed = {
'complete': self.complete,
'defer': self.defer,
'duration': self.duration,
'easing': self.easing,
'step': self.step
}
return untrimmed