module Phlex::Elements
def register_element(element, tag: element.name.tr("_", "-"))
def register_element(element, tag: element.name.tr("_", "-")) class_eval(<<-RUBY, __FILE__, __LINE__ + 1) # frozen_string_literal: true def #{element}(**attributes, &block) target = @_context.target if attributes.length > 0 # with attributes if block_given? # with content block target << "<#{tag}" << (Phlex::ATTRIBUTE_CACHE[respond_to?(:process_attributes) ? (attributes.hash + self.class.hash) : attributes.hash] || __attributes__(**attributes)) << ">" yield_content(&block) target << "</#{tag}>" else # without content block target << "<#{tag}" << (Phlex::ATTRIBUTE_CACHE[respond_to?(:process_attributes) ? (attributes.hash + self.class.hash) : attributes.hash] || __attributes__(**attributes)) << "></#{tag}>" end else # without attributes if block_given? # with content block target << "<#{tag}>" yield_content(&block) target << "</#{tag}>" else # without content block target << "<#{tag}></#{tag}>" end end nil end alias_method :_#{element}, :#{element} RUBY registered_elements[element] = tag element end
def register_void_element(element, tag: element.name.tr("_", "-"))
def register_void_element(element, tag: element.name.tr("_", "-")) class_eval(<<-RUBY, __FILE__, __LINE__ + 1) # frozen_string_literal: true def #{element}(**attributes) target = @_context.target if attributes.length > 0 # with attributes target << "<#{tag}" << (Phlex::ATTRIBUTE_CACHE[respond_to?(:process_attributes) ? (attributes.hash + self.class.hash) : attributes.hash] || __attributes__(**attributes)) << ">" else # without attributes target << "<#{tag}>" end nil end alias_method :_#{element}, :#{element} RUBY registered_elements[element] = tag element end
def registered_elements
def registered_elements @registered_elements ||= Concurrent::Map.new end