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

ICON_MAP =

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

{
  "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" => "/assets/icons/lines/pdf-svgrepo-com.svg",
    "docx" => "/assets/icons/lines/doc-svgrepo-com.svg",
    "doc" => "/assets/icons/lines/doc-svgrepo-com.svg",
    "pptx" => "/assets/icons/lines/ppt-svgrepo-com.svg",
    "ppt" => "/assets/icons/lines/ppt-svgrepo-com.svg",
    "xlsx" => "/assets/icons/lines/xls-svgrepo-com.svg",
    "xls" => "/assets/icons/lines/xls-svgrepo-com.svg",
    "odt" => "/assets/icons/lines/doc-svgrepo-com.svg",
    "ods" => "/assets/icons/lines/xls-svgrepo-com.svg",
    "odp" => "/assets/icons/lines/ppt-svgrepo-com.svg",
    "txt" => "/assets/icons/lines/txt-svgrepo-com.svg",
    "zip" => "/assets/icons/lines/zip-svgrepo-com.svg",
    "mp3" => "/assets/icons/lines/mp3-svgrepo-com.svg",
    "mp4" => "/assets/icons/lines/mp4-svgrepo-com.svg",
    "jpg" => "/assets/icons/lines/jpg-svgrepo-com.svg",
    "jpeg" => "/assets/icons/lines/jpg-svgrepo-com.svg",
    "png" => "/assets/icons/lines/png-svgrepo-com.svg"
  },
  "minimal" => {
    "pdf" => "/assets/icons/minimal/pdf-svgrepo-com.svg",
    "docx" => "/assets/icons/minimal/doc-svgrepo-com.svg",
    "doc" => "/assets/icons/minimal/doc-svgrepo-com.svg",
    "pptx" => "/assets/icons/minimal/ppt-svgrepo-com.svg",
    "ppt" => "/assets/icons/minimal/ppt-svgrepo-com.svg",
    "xlsx" => "/assets/icons/minimal/xls-svgrepo-com.svg",
    "xls" => "/assets/icons/minimal/xls-svgrepo-com.svg",
    "odt" => "/assets/icons/minimal/doc-svgrepo-com.svg",
    "ods" => "/assets/icons/minimal/xls-svgrepo-com.svg",
    "odp" => "/assets/icons/minimal/ppt-svgrepo-com.svg",
    "txt" => "/assets/icons/minimal/txt-svgrepo-com.svg",
    "zip" => "/assets/icons/minimal/zip-svgrepo-com.svg",
    "mp3" => "/assets/icons/minimal/mp3-svgrepo-com.svg",
    "mp4" => "/assets/icons/minimal/mp4-svgrepo-com.svg",
    "jpg" => "/assets/icons/minimal/jpg-svgrepo-com.svg",
    "jpeg" => "/assets/icons/minimal/jpg-svgrepo-com.svg",
    "png" => "/assets/icons/minimal/png-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

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-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



104
105
106
107
108
# File 'lib/jekyll/documents/file_type_icons.rb', line 104

def self.icon_for(file_type, icon_set = "color")
  icons = ICON_MAP[icon_set] || ICON_MAP["color"]
  icons[file_type.to_s.downcase] ||
    "/assets/icons/#{icon_set}/unknown-document-svgrepo-com.svg"
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



116
117
118
# File 'lib/jekyll/documents/file_type_icons.rb', line 116

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



129
130
131
132
133
# File 'lib/jekyll/documents/file_type_icons.rb', line 129

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