class Markaby::Tagset
def can_handle? tag_name
def can_handle? tag_name false end
def default_options
def default_options {tagset: self} end
def handle_tag tag_name, builder, *args, &block
def handle_tag tag_name, builder, *args, &block raise NoMethodError.new end
def transform_attribute_hash attributes, prefix
def transform_attribute_hash attributes, prefix values = attributes[prefix] expanded_attributes = {} values.each do |suffix, value| name = transform_attribute_name "#{prefix}-#{suffix}" expanded_attributes[name] = value end attributes.merge!(expanded_attributes).delete(prefix) end
def transform_attribute_name name
def transform_attribute_name name name.to_s.downcase.tr("_", "-").to_sym end
def transform_attributes tag_name, attributes
def transform_attributes tag_name, attributes attributes[:name] ||= attributes[:id] if forms.include?(tag_name) && attributes[:id] attributes.transform_keys! { |name| transform_attribute_name name } hashed_attributes = attributes.keys.select { |name| attributes[name].is_a? Hash } hashed_attributes.each { |name| transform_attribute_hash attributes, name } attributes.reject! { |name, value| name.nil? || (AttrsBoolean.include?(name) && value.nil?) } attributes.keys.each { |name| validate_attribute! tag_name, name } attributes end
def valid_attribute_name? tag_name, attribute_name
def valid_attribute_name? tag_name, attribute_name attribute_name.to_s.start_with?(":", "data-", "aria-") || @tagset[tag_name].include?(attribute_name) end
def validate_and_transform_attributes! tag_name, *args
def validate_and_transform_attributes! tag_name, *args args.last.respond_to?(:to_hash) ? transform_attributes(tag_name, args.last.to_hash) : {} end
def validate_and_transform_tag_name! tag_name
def validate_and_transform_tag_name! tag_name raise(InvalidXhtmlError, "no element `#{tag_name}' for #{doctype}") unless @tagset.has_key?(tag_name) tag_name end
def validate_attribute! tag_name, attribute_name
def validate_attribute! tag_name, attribute_name raise InvalidXhtmlError, "no attribute `#{attribute_name}' on #{tag_name} elements" unless valid_attribute_name? tag_name, attribute_name end