From db4b3736d4f45137a733ce5eb1e50aec968ca1d2 Mon Sep 17 00:00:00 2001 From: David Luevano Alvarado Date: Tue, 13 Dec 2022 00:11:16 -0600 Subject: update pyssg.xyz site files --- .../src/doc/_plugins/all-contributors-generator.rb | 17 +++ .../src/doc/_plugins/flatten_icon_filters.rb | 38 ++++++ .../src/doc/_plugins/icon_page_generator.rb | 45 +++++++ .../static/fork-awesome/src/doc/_plugins/site.rb | 142 +++++++++++++++++++++ .../fork-awesome/src/doc/_plugins/sri_hash.rb | 20 +++ 5 files changed, 262 insertions(+) create mode 100644 pyssg.xyz/live/static/fork-awesome/src/doc/_plugins/all-contributors-generator.rb create mode 100644 pyssg.xyz/live/static/fork-awesome/src/doc/_plugins/flatten_icon_filters.rb create mode 100644 pyssg.xyz/live/static/fork-awesome/src/doc/_plugins/icon_page_generator.rb create mode 100644 pyssg.xyz/live/static/fork-awesome/src/doc/_plugins/site.rb create mode 100644 pyssg.xyz/live/static/fork-awesome/src/doc/_plugins/sri_hash.rb (limited to 'pyssg.xyz/live/static/fork-awesome/src/doc/_plugins') diff --git a/pyssg.xyz/live/static/fork-awesome/src/doc/_plugins/all-contributors-generator.rb b/pyssg.xyz/live/static/fork-awesome/src/doc/_plugins/all-contributors-generator.rb new file mode 100644 index 0000000..85d0328 --- /dev/null +++ b/pyssg.xyz/live/static/fork-awesome/src/doc/_plugins/all-contributors-generator.rb @@ -0,0 +1,17 @@ +## +# Generate an all-contributors badge with the number of contributors + +require "json" + +module Jekyll + class AllContributors < Generator + def generate(site) + all_contributors_rc = File.read(File.join(Dir.pwd, '.all-contributorsrc')) + all_contributors = JSON.parse(all_contributors_rc) + total_contributors = all_contributors['contributors'].length + site.pages.each do |page| + page.data['total_contributors'] = total_contributors + end + end + end +end diff --git a/pyssg.xyz/live/static/fork-awesome/src/doc/_plugins/flatten_icon_filters.rb b/pyssg.xyz/live/static/fork-awesome/src/doc/_plugins/flatten_icon_filters.rb new file mode 100644 index 0000000..1e3daff --- /dev/null +++ b/pyssg.xyz/live/static/fork-awesome/src/doc/_plugins/flatten_icon_filters.rb @@ -0,0 +1,38 @@ +## +# Flattens the icons object to a one-dimensional array of possible search terms. + +require 'set' + +module Jekyll + module FlattenArray + def flattenIconFilters(icons) + flattened = Set.new + icons.each do |icon| + toAdd = [] + + toAdd.push(icon["class"].downcase) # Add class as a filter value + + # Add any existing aliases as a filter value + if not icon["aliases"].nil? + icon["aliases"].each do |iconAlias| + toAdd.push(iconAlias.downcase) + end + end + + # Add any existing filters as a filter value + if not icon["filter"].nil? + icon["filter"].each do |iconFilter| + toAdd.push(iconFilter.downcase) + end + end + flattened.merge(toAdd) + + print toAdd if toAdd.include? true + print toAdd if toAdd.include? false + end + return flattened.to_a # .to_a because we can't jsonify a + end + end +end + +Liquid::Template.register_filter(Jekyll::FlattenArray) diff --git a/pyssg.xyz/live/static/fork-awesome/src/doc/_plugins/icon_page_generator.rb b/pyssg.xyz/live/static/fork-awesome/src/doc/_plugins/icon_page_generator.rb new file mode 100644 index 0000000..0daadf3 --- /dev/null +++ b/pyssg.xyz/live/static/fork-awesome/src/doc/_plugins/icon_page_generator.rb @@ -0,0 +1,45 @@ +## +# Create individual pages for each icon in the FontAwesome set + +require 'yaml' + +module Jekyll + + class IconPage < Page + + ## + # Take a single icon and render a page for it. + + def initialize(site, base, dir, icon) + @site = site + @base = base + @dir = dir + @name = "#{icon.id}.html" + @icon = icon + + self.process(@name) + + self.read_yaml(File.join(base, site.config['layouts_dir']), site.config['icon_layout']) + + self.data['icon'] = icon + self.data['title'] = "fa-#{icon.id}: " + self.data['title_suffix'] + end + + end + + class IconGenerator < Generator + + ## + # Iterate over every described icon in a YAML file and create a page for it + + safe true + + def generate(site) + site.icons.each do |icon| + site.pages << IconPage.new(site, site.source, site.config['icon_destination'], icon) + end + end + + end + +end diff --git a/pyssg.xyz/live/static/fork-awesome/src/doc/_plugins/site.rb b/pyssg.xyz/live/static/fork-awesome/src/doc/_plugins/site.rb new file mode 100644 index 0000000..0784d0d --- /dev/null +++ b/pyssg.xyz/live/static/fork-awesome/src/doc/_plugins/site.rb @@ -0,0 +1,142 @@ +## +# 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 + + # Class name used in CSS and HTML + @icon_object['class'] = icon_object['id'] + # Normalize the aliases + @icon_object['aliases'] ||= [] + + @name = icon_object['name'] + @id = icon_object['id'] + @class = icon_object['class'] + @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 + 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 + + def category(icons, cat) + icons.select { |icon| icon['categories'].include?(cat) } + end + + def version(icons, version) + icons.select { |icon| icon['created'] == version } + end + + def sort_by(icons, sort_key) + icons.sort_by! { |icon| icon[sort_key] } + end + end + + Liquid::Template.register_filter(IconFilters) + + class Site + + attr_reader :icons + + def process + self.reset_icons + self.reset + self.read + self.generate + self.render + self.cleanup + self.write + + 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) + end + + def site_payload + { + "site" => self.config.merge({ + "time" => self.time, + "posts" => self.posts.docs.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 diff --git a/pyssg.xyz/live/static/fork-awesome/src/doc/_plugins/sri_hash.rb b/pyssg.xyz/live/static/fork-awesome/src/doc/_plugins/sri_hash.rb new file mode 100644 index 0000000..63e0242 --- /dev/null +++ b/pyssg.xyz/live/static/fork-awesome/src/doc/_plugins/sri_hash.rb @@ -0,0 +1,20 @@ +## +# Generate an SRI hash for a given file + +require 'digest' + +module Jekyll + class GetSriHash < Liquid::Tag + def initialize(tag_name, text, tokens) + super + @filename = text.strip + end + + def render(context) + sha256 = Digest::SHA256.file(@filename) + "sha256-#{sha256.base64digest}" + end + end +end + +Liquid::Template.register_tag('sri_hash', Jekyll::GetSriHash) -- cgit v1.2.3-70-g09d2