mirror of
https://github.com/home-assistant/home-assistant.io.git
synced 2025-10-23 10:48:46 +00:00
Basic Configuration for Editors + Weather Card as example (#14010)
This commit is contained in:
74
plugins/configuration_basic.rb
Normal file
74
plugins/configuration_basic.rb
Normal file
@@ -0,0 +1,74 @@
|
||||
module Jekyll
|
||||
class ConfigurationBasicBlock < Liquid::Block
|
||||
def initialize(tag_name, text, tokens)
|
||||
super
|
||||
@component, @platform = text.strip.split('.', 2)
|
||||
end
|
||||
|
||||
def slug(key)
|
||||
key.downcase.strip.gsub(' ', '-').gsub(/[^\w\-]/, '')
|
||||
end
|
||||
|
||||
def render_config_vars(vars:, component:, platform:, converter:, classes: nil, parent_type: nil)
|
||||
result = Array.new
|
||||
result << "<div class='#{classes}'>"
|
||||
|
||||
result << vars.map do |key, attr|
|
||||
markup = Array.new
|
||||
markup << "<div class='config-vars-item'><div class='config-vars-label'><a name='#{slug(key)}' class='title-link' href='\##{slug(key)}'></a> <span class='config-vars-label-name'>#{key}</span></div><div class='config-vars-description-and-children'>"
|
||||
|
||||
if attr.key? 'description'
|
||||
markup << "<span class='config-vars-description'>#{converter.convert(attr['description'].to_s)}</span>"
|
||||
else
|
||||
# Description is missing
|
||||
raise ArgumentError, "Configuration key '#{key}' is missing a description."
|
||||
end
|
||||
|
||||
markup << "</div>"
|
||||
|
||||
# Check for nested configuration variables
|
||||
if attr.key? 'keys'
|
||||
markup << render_config_vars(
|
||||
vars: attr['keys'], component: component,
|
||||
platform: platform, converter: converter,
|
||||
classes: 'nested', parent_type: attr['type'])
|
||||
end
|
||||
|
||||
markup << "</div>"
|
||||
end
|
||||
|
||||
result << "</div>"
|
||||
result.join
|
||||
end
|
||||
|
||||
def render(context)
|
||||
if @component.nil? and @platform.nil?
|
||||
page = context.environments.first['page']
|
||||
@component, @platform = page['slug'].split('.', 2)
|
||||
end
|
||||
|
||||
contents = super(context)
|
||||
|
||||
component = Liquid::Template.parse(@component).render context
|
||||
platform = Liquid::Template.parse(@platform).render context
|
||||
|
||||
site = context.registers[:site]
|
||||
converter = site.find_converter_instance(::Jekyll::Converters::Markdown)
|
||||
|
||||
vars = SafeYAML.load(contents)
|
||||
|
||||
<<~MARKUP
|
||||
<div class="config-vars basic">
|
||||
#{render_config_vars(
|
||||
vars: vars,
|
||||
component: component,
|
||||
platform: platform,
|
||||
converter: converter
|
||||
)}
|
||||
</div>
|
||||
MARKUP
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
Liquid::Template.register_tag('configuration_basic', Jekyll::ConfigurationBasicBlock)
|
Reference in New Issue
Block a user