from lnx.logicnode.lnx_nodes import * class JSEventTargetNode(LnxLogicTreeNode): """JS Event Target""" bl_idname = 'LNJSEventTargetNode' bl_label = 'JS Event Target' bl_description = 'Event Target is an interface implemented by objects that can receive events and may have listeners for them.' lnx_category = 'HTML' lnx_version = 1 @staticmethod def get_enum_id_value(obj, prop_name, value): return obj.bl_rna.properties[prop_name].enum_items[value].identifier @staticmethod def get_count_in(type_name): return { 'addEventListener': 0, 'removeEventListener': 1, 'dispatchEvent': 2, }.get(type_name, 0) def get_enum(self): return self.get('property0', 0) def set_enum(self, value): # Checking the selection of each type select_current = self.get_enum_id_value(self, 'property0', value) select_prev = self.property0 #Check if type changed if select_prev != select_current: for i in self.inputs: self.inputs.remove(i) # Arguements for type Client index = self.get_count_in(select_current) match index: case 2: self.add_input('LnxNodeSocketAction', 'In') self.add_input('LnxDynamicSocket', 'JS Object') self.add_input('LnxDynamicSocket', 'Event') case _: self.add_input('LnxNodeSocketAction', 'In') self.add_input('LnxDynamicSocket', 'JS Object') self.add_input('LnxStringSocket', 'Type') self.add_input('LnxDynamicSocket', 'Listener') self.add_input('LnxDynamicSocket', 'Options') self.add_input('LnxBoolSocket', 'unTrusted') self['property0'] = value property0: HaxeEnumProperty( 'property0', items = [('addEventListener', 'addEventListener', 'Add an event listener to the object'), ('removeEventListener', 'removeEventListener', 'Remove an event listener to the object'), ('dispatchEvent', 'dispatchEvent', 'Dispatch an event to the object listener')], name='', default='addEventListener', set=set_enum, get=get_enum) property1: HaxeEnumProperty( 'property1', items = [('inline', 'Inline Function', 'Inline function to evaluate on event'), ('callable', 'Callable Function', 'Callable function to trigger on event'), ('event', 'Event Listener', 'Bind event to existing event listener'), ('output', 'Bind output', 'Trigger node output on JS event')], name='', default='inline') def lnx_init(self, context): self.add_input('LnxNodeSocketAction', 'In') self.add_input('LnxDynamicSocket', 'JS Object') self.add_input('LnxStringSocket', 'Type') self.add_input('LnxDynamicSocket', 'Listener') self.add_input('LnxDynamicSocket', 'Options') self.add_input('LnxBoolSocket', 'WantsUnTrusted') self.add_output('LnxNodeSocketAction', 'Out') def draw_buttons(self, context, layout): layout.prop(self, 'property0') if str(self.property0) == 'addEventListener': layout.prop(self, 'property1') def register(): add_category('HTML', icon='SEQ_STRIP_META') JSEventTargetNode.on_register()