1use js::context::{JSContext, NoGC};
6
7use crate::dom::element::Element;
8use crate::dom::event::Event;
9use crate::dom::eventtarget::EventTarget;
10use crate::dom::html::form_controls::htmlinputelement::InputActivationState;
11
12pub(crate) trait Activatable {
14 fn as_element(&self) -> ∈
15
16 fn is_instance_activatable(&self) -> bool;
18
19 fn legacy_pre_activation_behavior(&self, _cx: &mut JSContext) -> Option<InputActivationState> {
21 None
22 }
23
24 fn legacy_canceled_activation_behavior(
26 &self,
27 _cx: &mut JSContext,
28 _state_before: Option<InputActivationState>,
29 ) {
30 }
31
32 fn activation_behavior(
36 &self,
37 cx: &mut js::context::JSContext,
38 event: &Event,
39 target: &EventTarget,
40 );
41
42 fn enter_formal_activation_state(&self, no_gc: &NoGC) {
44 self.as_element().set_active_state(no_gc, true);
45 }
46
47 fn exit_formal_activation_state(&self, no_gc: &NoGC) {
48 self.as_element().set_active_state(no_gc, false);
49 }
50}