from lnx.logicnode.lnx_nodes import * class RenderElementNode(LnxLogicTreeNode): """Render Element""" bl_idname = 'LNRenderElementNode' bl_label = 'Render Element' bl_description = 'Render Element' 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 { 'append': 0, 'appendChild': 1, 'appendTorrent': 2, 'prepend': 3, 'prependChild': 4, 'innerHTML': 5, 'innerText': 6, 'insertAdjacentHTML': 7, }.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', 'Torrent') self.add_input('LnxStringSocket', 'Selector') case 5: self.add_input('LnxNodeSocketAction', 'In') self.add_input('LnxDynamicSocket', 'Element') self.add_input('LnxStringSocket', 'HTML') case 6: self.add_input('LnxNodeSocketAction', 'In') self.add_input('LnxDynamicSocket', 'Element') self.add_input('LnxStringSocket', 'Text') case 7: self.add_input('LnxNodeSocketAction', 'In') self.add_input('LnxStringSocket', 'HTML') self.add_input('LnxStringSocket', 'Selector') case _: self.add_input('LnxNodeSocketAction', 'In') self.add_input('LnxDynamicSocket', 'Element') self.add_input('LnxStringSocket', 'Selector') self['property0'] = value property0: HaxeEnumProperty( 'property0', items = [('append', 'Append', 'Append Element to Another'), ('appendChild', 'AppendChild', 'AppendChild Element to Another'), ('appendTorrent', 'AppendTorrent', 'Append Torrent file to an Element'), ('prepend', 'Prepend', 'Prepend Element to Another'), ('prependChild', 'PrependChild', 'PrependChild Element to Another'), ('innerHTML', 'InnerHTML', 'Insert Element as InnerHTML'), ('innerText', 'InnerText', 'Insert Element as InnerText'), ('insertAdjacentHTML', 'AdjacentHTML', 'Insert Element as Adjacent HTML')], name='', default='append', set=set_enum, get=get_enum) property1: HaxeEnumProperty( 'property1', items = [('beforebegin', 'Before Begin', '"Position beforebegin"'), ('afterbegin', 'After Begin', '"Position afterbegin"'), ('beforeend', 'Before End', '"Position beforeend"'), ('afterend', 'After End', '"Position afterend"')], name='', default='beforebegin') def lnx_init(self, context): self.add_input('LnxNodeSocketAction', 'In') self.add_input('LnxDynamicSocket', 'Element') self.add_input('LnxStringSocket', 'Selector') self.add_output('LnxNodeSocketAction', 'Out') def draw_buttons(self, context, layout): layout.prop(self, 'property0') if str(self.property0) == 'innerText' or str(self.property0) == 'innerHTML': return else: layout.prop(self, 'property1') def register(): add_category('HTML', icon='SEQ_STRIP_META') RenderElementNode.on_register()