diff --git a/plugins/icon.rb b/plugins/icon.rb index 268bd6a7354..c95a5c7fa8c 100644 --- a/plugins/icon.rb +++ b/plugins/icon.rb @@ -5,7 +5,8 @@ module Jekyll def initialize(tag_name, args, tokens) super if args.strip =~ SYNTAX - @icon = Regexp.last_match(1).downcase + @icon = Regexp.last_match[:icon].downcase + @title = Regexp.last_match[:title] else raise SyntaxError, <<~MSG Syntax error in tag 'icon' while parsing the following options: @@ -13,18 +14,29 @@ module Jekyll #{args} Valid syntax: - {% icon ":" %} + {% icon ":" [title=""] %} MSG end end + + def default_title(icon) + # split away "mdi:" part + icon_name = icon.split(':').last + + # remove dashes and capitalize e.g. "water-polo" to "Water polo" + parts = icon_name.split('-') + parts[0] = parts[0].capitalize + parts.join(' ') + end def render(_context) - "<iconify-icon inline icon='#{@icon}'></iconify-icon>" + title = @title || default_title(@icon) + "<iconify-icon inline icon='#{@icon}' title='#{title}'></iconify-icon>" end private - SYNTAX = %r!^"([a-z0-9]+(?:-[a-z0-9]+)*:[a-z0-9]+(?:-[a-z0-9]+)*)"$!.freeze + SYNTAX = %r!^"(?<icon>[a-z0-9]+(?:-[a-z0-9]+)*:[a-z0-9]+(?:-[a-z0-9]+)*)"(?:\s+title="(?<title>[^"]+)")?$!.freeze end end end