2013-05-17 21:35:23 +08:00
|
|
|
##
|
|
|
|
# Provide an icons attribute on the site object
|
|
|
|
|
|
|
|
require 'yaml'
|
|
|
|
require 'forwardable'
|
|
|
|
|
|
|
|
module Jekyll
|
|
|
|
|
|
|
|
class Icon
|
|
|
|
|
|
|
|
attr_reader :name, :id, :unicode, :created, :categories
|
|
|
|
|
|
|
|
def initialize(icon_object)
|
|
|
|
@icon_object = icon_object
|
|
|
|
|
2013-06-03 21:13:06 +08:00
|
|
|
# Class name used in CSS and HTML
|
|
|
|
@icon_object['class'] = icon_object['id']
|
|
|
|
# Normalize the aliases
|
|
|
|
@icon_object['aliases'] ||= []
|
|
|
|
|
2013-05-17 21:35:23 +08:00
|
|
|
@name = icon_object['name']
|
|
|
|
@id = icon_object['id']
|
2013-06-03 21:13:06 +08:00
|
|
|
@class = icon_object['class']
|
2013-05-17 21:35:23 +08:00
|
|
|
@aliases = icon_object['aliases']
|
|
|
|
@unicode = icon_object['unicode']
|
|
|
|
@created = icon_object['created']
|
|
|
|
@categories = icon_object['categories']
|
|
|
|
end
|
|
|
|
|
|
|
|
def to_liquid
|
|
|
|
return @icon_object
|
|
|
|
end
|
|
|
|
|
|
|
|
end
|
|
|
|
|
|
|
|
class IconList
|
|
|
|
##
|
|
|
|
# A list of icons
|
|
|
|
#
|
|
|
|
include Enumerable
|
|
|
|
extend Forwardable
|
|
|
|
|
|
|
|
def_delegators :@icon_array, :each, :<<
|
|
|
|
|
|
|
|
def initialize(icon_array)
|
|
|
|
@original_icon_array = icon_array
|
|
|
|
@icon_array = []
|
|
|
|
|
|
|
|
icon_array.each { |icon_object|
|
|
|
|
@icon_array << Icon.new(icon_object)
|
|
|
|
}
|
|
|
|
end
|
|
|
|
|
|
|
|
def [](k)
|
|
|
|
@icon_array[k]
|
|
|
|
end
|
|
|
|
|
|
|
|
def to_liquid
|
|
|
|
@original_icon_array
|
|
|
|
end
|
|
|
|
|
|
|
|
end
|
|
|
|
|
|
|
|
module IconFilters
|
2013-06-03 21:13:06 +08:00
|
|
|
def expand_aliases(icons)
|
|
|
|
expanded = []
|
|
|
|
|
|
|
|
icons.each { |icon|
|
|
|
|
# Remove the aliases since we are expanding them
|
|
|
|
expanded << icon.reject{ |k| k == 'aliases'}
|
|
|
|
|
|
|
|
icon['aliases'].each { |alias_id|
|
|
|
|
alias_icon = expanded[-1].dup
|
|
|
|
alias_icon['class'] = alias_id
|
|
|
|
alias_icon['alias_of'] = icon
|
|
|
|
|
|
|
|
expanded << alias_icon
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
return expanded
|
|
|
|
end
|
|
|
|
|
2013-05-17 21:35:23 +08:00
|
|
|
def category(icons, cat)
|
|
|
|
icons.select { |icon| icon['categories'].include?(cat) }
|
|
|
|
end
|
|
|
|
|
|
|
|
def version(icons, version)
|
|
|
|
icons.select { |icon| icon['created'] == version }
|
|
|
|
end
|
2013-06-03 21:13:06 +08:00
|
|
|
|
|
|
|
def sort_by(icons, sort_key)
|
|
|
|
icons.sort_by! { |icon| icon[sort_key] }
|
|
|
|
end
|
2013-05-17 21:35:23 +08:00
|
|
|
end
|
|
|
|
|
|
|
|
Liquid::Template.register_filter(IconFilters)
|
|
|
|
|
|
|
|
class Site
|
|
|
|
|
|
|
|
attr_reader :icons
|
|
|
|
|
|
|
|
def process
|
2013-05-23 21:04:02 +08:00
|
|
|
self.reset_icons
|
2013-05-17 21:35:23 +08:00
|
|
|
self.reset
|
|
|
|
self.read
|
|
|
|
self.generate
|
|
|
|
self.render
|
|
|
|
self.cleanup
|
|
|
|
self.write
|
2013-05-23 21:04:02 +08:00
|
|
|
|
|
|
|
self.build
|
|
|
|
end
|
|
|
|
|
|
|
|
##
|
|
|
|
# Reads the YAML file that stores all data about icons
|
|
|
|
def reset_icons
|
|
|
|
@icons = IconList.new(YAML.load_file(self.config['icon_meta'])['icons'])
|
|
|
|
end
|
|
|
|
|
|
|
|
##
|
|
|
|
# After generation, runs a build of Font-Awesome
|
|
|
|
def build
|
|
|
|
system("make build", :chdir => self.config['destination'], :out => :err)
|
2013-05-17 21:35:23 +08:00
|
|
|
end
|
|
|
|
|
|
|
|
def site_payload
|
|
|
|
{
|
|
|
|
"site" => self.config.merge({
|
|
|
|
"time" => self.time,
|
|
|
|
"posts" => self.posts.sort { |a, b| b <=> a },
|
|
|
|
"pages" => self.pages,
|
|
|
|
"html_pages" => self.pages.reject { |page| !page.html? },
|
|
|
|
"categories" => post_attr_hash('categories'),
|
|
|
|
"tags" => post_attr_hash('tags')}),
|
|
|
|
"icons" => @icons,
|
|
|
|
}
|
|
|
|
end
|
|
|
|
|
|
|
|
end
|
|
|
|
|
|
|
|
end
|