LNXSDK/leenkx/blender/lnx/logicnode/custom/LN_render_element.py

113 lines
4.1 KiB
Python
Raw Normal View History

2025-01-22 16:18:30 +01:00
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()