Module: Jekyll::Documents::FileTypeIcons

Defined in:
lib/jekyll/documents/file_type_icons.rb

Overview

Maps file extensions to local SVG icon files with configurable icon sets Provides Liquid filters for displaying file type icons Icons are based on designs from svgrepo.com and included in the gem

Constant Summary collapse

LINES_ICON_PATH =

Mapping of file extensions to icon files for each icon set Icons sourced from svgrepo.com collections: Color: https://www.svgrepo.com/collection/file-type-doctype-vectors/ Lines: https://www.svgrepo.com/collection/simple-file-types-line-vectors/ Minimal: https://www.svgrepo.com/collection/file-type-minimal-icons/ Ultra-minimal: Based on simple document icons

"/assets/icons/lines/"
MINIMAL_ICON_PATH =
"/assets/icons/minimal/"
ICON_MAP =
{
  "color" => {
    "pdf" => "/assets/icons/color/pdf-document-svgrepo-com.svg",
    "docx" => "/assets/icons/color/word-document-svgrepo-com.svg",
    "doc" => "/assets/icons/color/word-document-svgrepo-com.svg",
    "pptx" => "/assets/icons/color/ppt-document-svgrepo-com.svg",
    "ppt" => "/assets/icons/color/ppt-document-svgrepo-com.svg",
    "xlsx" => "/assets/icons/color/excel-document-svgrepo-com.svg",
    "xls" => "/assets/icons/color/excel-document-svgrepo-com.svg",
    "odt" => "/assets/icons/color/word-document-svgrepo-com.svg",
    "ods" => "/assets/icons/color/excel-document-svgrepo-com.svg",
    "odp" => "/assets/icons/color/ppt-document-svgrepo-com.svg",
    "txt" => "/assets/icons/color/txt-document-svgrepo-com.svg",
    "zip" => "/assets/icons/color/zip-document-svgrepo-com.svg",
    "mp3" => "/assets/icons/color/audio-document-svgrepo-com.svg",
    "mp4" => "/assets/icons/color/mp4-document-svgrepo-com.svg",
    "jpg" => "/assets/icons/color/image-document-svgrepo-com.svg",
    "jpeg" => "/assets/icons/color/image-document-svgrepo-com.svg",
    "png" => "/assets/icons/color/image-document-svgrepo-com.svg",
    "csv" => "/assets/icons/color/csv-document-svgrepo-com.svg",
    "html" => "/assets/icons/color/html-document-svgrepo-com.svg",
    "xml" => "/assets/icons/color/xml-document-svgrepo-com.svg",
    "rtf" => "/assets/icons/color/rtf-document-svgrepo-com.svg"
  },
  "lines" => {
    "pdf" => "#{LINES_ICON_PATH}pdf-file-type-svgrepo-com.svg",
    "docx" => "#{LINES_ICON_PATH}word-file-type-svgrepo-com.svg",
    "doc" => "#{LINES_ICON_PATH}word-file-type-svgrepo-com.svg",
    "pptx" => "#{LINES_ICON_PATH}ppt-file-type-svgrepo-com.svg",
    "ppt" => "#{LINES_ICON_PATH}ppt-file-type-svgrepo-com.svg",
    "xlsx" => "#{LINES_ICON_PATH}excel-file-type-svgrepo-com.svg",
    "xls" => "#{LINES_ICON_PATH}excel-file-type-svgrepo-com.svg",
    "odt" => "#{LINES_ICON_PATH}word-file-type-svgrepo-com.svg",
    "ods" => "#{LINES_ICON_PATH}excel-file-type-svgrepo-com.svg",
    "odp" => "#{LINES_ICON_PATH}ppt-file-type-svgrepo-com.svg",
    "txt" => "#{LINES_ICON_PATH}txt-file-type-svgrepo-com.svg",
    "zip" => "#{LINES_ICON_PATH}zip-file-type-svgrepo-com.svg",
    "mp3" => "#{LINES_ICON_PATH}mp3-file-type-svgrepo-com.svg",
    "mp4" => "#{LINES_ICON_PATH}other-file-type-svgrepo-com.svg",
    "jpg" => "#{LINES_ICON_PATH}jpg-file-type-svgrepo-com.svg",
    "jpeg" => "#{LINES_ICON_PATH}jpg-file-type-svgrepo-com.svg",
    "png" => "#{LINES_ICON_PATH}png-file-type-svgrepo-com.svg"
  },
  "minimal" => {
    "pdf" => "#{MINIMAL_ICON_PATH}" \
             "extension-file-format-pdf-document-file-format-svgrepo-com.svg",
    "docx" => "#{MINIMAL_ICON_PATH}" \
              "extension-file-format-document-file-format-svgrepo-com.svg",
    "doc" => "#{MINIMAL_ICON_PATH}" \
             "extension-file-format-document-file-format-svgrepo-com.svg",
    "pptx" => "#{MINIMAL_ICON_PATH}" \
              "extension-file-format-document-file-format-2-svgrepo-com.svg",
    "ppt" => "#{MINIMAL_ICON_PATH}" \
             "extension-file-format-document-file-format-2-svgrepo-com.svg",
    "xlsx" => "#{MINIMAL_ICON_PATH}" \
              "extension-file-format-document-file-format-2-svgrepo-com.svg",
    "xls" => "#{MINIMAL_ICON_PATH}" \
             "extension-file-format-document-file-format-2-svgrepo-com.svg",
    "odt" => "#{MINIMAL_ICON_PATH}" \
             "extension-file-format-document-file-format-svgrepo-com.svg",
    "ods" => "#{MINIMAL_ICON_PATH}" \
             "extension-file-format-document-file-format-2-svgrepo-com.svg",
    "odp" => "#{MINIMAL_ICON_PATH}" \
             "extension-file-format-document-file-format-2-svgrepo-com.svg",
    "txt" => "#{MINIMAL_ICON_PATH}" \
             "extension-file-format-txt-document-file-format-svgrepo-com.svg",
    "zip" => "#{MINIMAL_ICON_PATH}" \
             "extension-file-format-document-file-format-2-svgrepo-com.svg",
    "mp3" => "#{MINIMAL_ICON_PATH}" \
             "extension-file-format-document-file-format-2-svgrepo-com.svg",
    "mp4" => "#{MINIMAL_ICON_PATH}" \
             "extension-file-format-document-file-format-2-svgrepo-com.svg",
    "jpg" => "#{MINIMAL_ICON_PATH}" \
             "extension-file-format-jpg-document-file-format-svgrepo-com.svg",
    "jpeg" => "#{MINIMAL_ICON_PATH}" \
              "file-format-jpeg-document-extension-file-format-svgrepo-com.svg",
    "png" => "#{MINIMAL_ICON_PATH}" \
             "extension-file-format-document-file-format-2-svgrepo-com.svg"
  },
  "ultra-minimal" => {
    "pdf" => "/assets/icons/ultra-minimal/pdf.svg",
    "docx" => "/assets/icons/ultra-minimal/doc.svg",
    "doc" => "/assets/icons/ultra-minimal/doc.svg",
    "pptx" => "/assets/icons/ultra-minimal/ppt.svg",
    "ppt" => "/assets/icons/ultra-minimal/ppt.svg",
    "xlsx" => "/assets/icons/ultra-minimal/xls.svg",
    "xls" => "/assets/icons/ultra-minimal/xls.svg",
    "odt" => "/assets/icons/ultra-minimal/doc.svg",
    "ods" => "/assets/icons/ultra-minimal/xls.svg",
    "odp" => "/assets/icons/ultra-minimal/ppt.svg",
    "txt" => "/assets/icons/ultra-minimal/txt.svg",
    "zip" => "/assets/icons/ultra-minimal/zip.svg",
    "mp3" => "/assets/icons/ultra-minimal/mp3.svg",
    "mp4" => "/assets/icons/ultra-minimal/mp4.svg",
    "jpg" => "/assets/icons/ultra-minimal/jpg.svg",
    "png" => "/assets/icons/ultra-minimal/png.svg"
  }
}.freeze
UNKNOWN_ICON_MAP =
{
  "color" => "/assets/icons/color/unknown-document-svgrepo-com.svg",
  "lines" => "#{LINES_ICON_PATH}other-file-type-svgrepo-com.svg",
  "minimal" => "#{MINIMAL_ICON_PATH}" \
               "extension-file-format-document-file-format-2-svgrepo-com.svg",
  "ultra-minimal" => "/assets/icons/ultra-minimal/file.svg"
}.freeze

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.icon_for(file_type, icon_set = "color") ⇒ String

Returns the icon URL for a given file type and explicit icon set

Examples:

FileTypeIcons.icon_for('pdf', 'lines') #=>
  "/assets/icons/lines/pdf-file-type-svgrepo-com.svg"

Parameters:

  • file_type (String)

    the file extension (e.g., 'pdf', 'docx')

  • icon_set (String) (defaults to: "color")

    the icon set name (defaults to 'color')

Returns:

  • (String)

    the icon file URL



133
134
135
136
137
# File 'lib/jekyll/documents/file_type_icons.rb', line 133

def self.icon_for(file_type, icon_set = "color")
  selected_set = ICON_MAP.key?(icon_set) ? icon_set : "color"
  icons = ICON_MAP[selected_set]
  icons[file_type.to_s.downcase] || UNKNOWN_ICON_MAP[selected_set]
end

Instance Method Details

#file_type_icon(file_type, context = nil) ⇒ String

Returns the icon URL for a given file type using configured icon set

Examples:

file_type_icon('pdf') #=> "/assets/icons/color/pdf.svg"

Parameters:

  • file_type (String)

    the file extension (e.g., 'pdf', 'docx')

  • context (Liquid::Context) (defaults to: nil)

    the Liquid context for accessing site config

Returns:

  • (String)

    the icon file URL



145
146
147
# File 'lib/jekyll/documents/file_type_icons.rb', line 145

def file_type_icon(file_type, context = nil)
  Jekyll::Documents::FileTypeIcons.icon_for(file_type, get_icon_set(context))
end

#file_type_icon_tag(file_type, css_class: "file-icon", alt: nil, context: nil) ⇒ String

Returns an HTML img tag for the file type icon

Examples:

file_type_icon_tag('pdf') #=> \
  '<img src="/assets/icons/color/pdf.svg" alt="PDF file" class="file-icon" />'

Parameters:

  • file_type (String)

    the file extension

  • css_class (String) (defaults to: "file-icon")

    CSS class for the img tag (default: 'file-icon')

  • alt (String, nil) (defaults to: nil)

    alt text for the image (default: auto-generated)

  • context (Liquid::Context) (defaults to: nil)

    the Liquid context for accessing site config

Returns:

  • (String)

    HTML img tag



158
159
160
161
162
# File 'lib/jekyll/documents/file_type_icons.rb', line 158

def file_type_icon_tag(file_type, css_class: "file-icon", alt: nil, context: nil)
  url = file_type_icon(file_type, context)
  alt_text = alt || "#{file_type.to_s.upcase} file"
  %(<img src="#{url}" alt="#{alt_text}" class="#{css_class}" />)
end