From 6d2c067f0d6bc78eef7ececcec3eba71cbb5d80c Mon Sep 17 00:00:00 2001
From: David Luevano Alvarado <david@luevano.xyz>
Date: Tue, 1 Jun 2021 03:21:33 -0600
Subject: add fork awesome, contact and donate pages, update general style and
 update readme

---
 .../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 +++++++++++++++++++++
 static/fork-awesome/src/doc/_plugins/sri_hash.rb   |  20 +++
 5 files changed, 262 insertions(+)
 create mode 100644 static/fork-awesome/src/doc/_plugins/all-contributors-generator.rb
 create mode 100644 static/fork-awesome/src/doc/_plugins/flatten_icon_filters.rb
 create mode 100644 static/fork-awesome/src/doc/_plugins/icon_page_generator.rb
 create mode 100644 static/fork-awesome/src/doc/_plugins/site.rb
 create mode 100644 static/fork-awesome/src/doc/_plugins/sri_hash.rb

(limited to 'static/fork-awesome/src/doc/_plugins')

diff --git a/static/fork-awesome/src/doc/_plugins/all-contributors-generator.rb b/static/fork-awesome/src/doc/_plugins/all-contributors-generator.rb
new file mode 100644
index 0000000..85d0328
--- /dev/null
+++ b/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/static/fork-awesome/src/doc/_plugins/flatten_icon_filters.rb b/static/fork-awesome/src/doc/_plugins/flatten_icon_filters.rb
new file mode 100644
index 0000000..1e3daff
--- /dev/null
+++ b/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 <Set>
+    end
+  end
+end
+
+Liquid::Template.register_filter(Jekyll::FlattenArray)
diff --git a/static/fork-awesome/src/doc/_plugins/icon_page_generator.rb b/static/fork-awesome/src/doc/_plugins/icon_page_generator.rb
new file mode 100644
index 0000000..0daadf3
--- /dev/null
+++ b/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/static/fork-awesome/src/doc/_plugins/site.rb b/static/fork-awesome/src/doc/_plugins/site.rb
new file mode 100644
index 0000000..0784d0d
--- /dev/null
+++ b/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/static/fork-awesome/src/doc/_plugins/sri_hash.rb b/static/fork-awesome/src/doc/_plugins/sri_hash.rb
new file mode 100644
index 0000000..63e0242
--- /dev/null
+++ b/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