Sfoglia il codice sorgente

Global icons object

robmadole 12 anni fa
parent
commit
ce8d414b7b

+ 1 - 0
.ruby-version

@@ -0,0 +1 @@
+1.9.3-p392

+ 4 - 0
Gemfile

@@ -0,0 +1,4 @@
+source 'https://rubygems.org'
+
+gem 'jekyll', '1.0'
+gem 'debugger'

+ 46 - 0
Gemfile.lock

@@ -0,0 +1,46 @@
+GEM
+  remote: https://rubygems.org/
+  specs:
+    classifier (1.3.3)
+      fast-stemmer (>= 1.0.0)
+    colorator (0.1)
+    columnize (0.3.6)
+    commander (4.1.3)
+      highline (~> 1.6.11)
+    debugger (1.6.0)
+      columnize (>= 0.3.1)
+      debugger-linecache (~> 1.2.0)
+      debugger-ruby_core_source (~> 1.2.1)
+    debugger-linecache (1.2.0)
+    debugger-ruby_core_source (1.2.2)
+    directory_watcher (1.4.1)
+    fast-stemmer (1.0.2)
+    highline (1.6.19)
+    jekyll (1.0.0)
+      classifier (~> 1.3)
+      colorator (~> 0.1)
+      commander (~> 4.1.3)
+      directory_watcher (~> 1.4.1)
+      kramdown (~> 0.14)
+      liquid (~> 2.3)
+      maruku (~> 0.5)
+      pygments.rb (~> 0.4.2)
+      safe_yaml (~> 0.7.0)
+    kramdown (0.14.2)
+    liquid (2.5.0)
+    maruku (0.6.1)
+      syntax (>= 1.0.0)
+    posix-spawn (0.3.6)
+    pygments.rb (0.4.2)
+      posix-spawn (~> 0.3.6)
+      yajl-ruby (~> 1.1.0)
+    safe_yaml (0.7.1)
+    syntax (1.0.0)
+    yajl-ruby (1.1.0)
+
+PLATFORMS
+  ruby
+
+DEPENDENCIES
+  debugger
+  jekyll (= 1.0)

+ 1 - 1
build/_includes/whats-new.html

@@ -10,7 +10,7 @@
 <div id="whats-new">
   <div class="row">
     <div class="span4">
-      <h4><i class="icon-lightbulb"></i> {{ site.font_awesome.new_icon_count }} New Icons in {{ site.font_awesome.version }}</h4>
+      <h4><i class="icon-lightbulb"></i> {{ icons | version:site.font_awesome.version | size }} New Icons in {{ site.font_awesome.version }}</h4>
       Requested by the active community on the <a href="{{ site.font_awesome.github.url }}">Font Awesome GitHub project</a>.
     </div>
     <div class="span4">

+ 15 - 15
build/_layouts/icon.html

@@ -6,26 +6,26 @@ relative_path: ../../
 <div class="jumbotron jumbotron-icon">
   <div class="container">
     <div class="info-icons">
-      <i class="icon-{{ page.icon['id'] }} icon-6"></i>&nbsp;&nbsp;
-      <i class="icon-{{ page.icon['id'] }} icon-5"></i>&nbsp;&nbsp;
-      <i class="icon-{{ page.icon['id'] }} icon-4"></i>&nbsp;&nbsp;
-      <i class="icon-{{ page.icon['id'] }} icon-3"></i>&nbsp;&nbsp;
-      <i class="icon-{{ page.icon['id'] }} icon-2"></i>&nbsp;
-      <i class="icon-{{ page.icon['id'] }} icon-1"></i>
+      <i class="icon-{{ page.icon.id }} icon-6"></i>&nbsp;&nbsp;
+      <i class="icon-{{ page.icon.id }} icon-5"></i>&nbsp;&nbsp;
+      <i class="icon-{{ page.icon.id }} icon-4"></i>&nbsp;&nbsp;
+      <i class="icon-{{ page.icon.id }} icon-3"></i>&nbsp;&nbsp;
+      <i class="icon-{{ page.icon.id }} icon-2"></i>&nbsp;
+      <i class="icon-{{ page.icon.id }} icon-1"></i>
     </div>
     <h1 class="info-class">
-      icon-{{ page.icon['id'] }}
+      icon-{{ page.icon.id }}
       <small>
-        <i class="icon-{{ page.icon['id'] }}"></i> &middot;
-        Unicode: <span class="upper">{{ page.icon['unicode'] }}</span> &middot;
-        Created: v{{ page.icon['created'] }} &middot;
+        <i class="icon-{{ page.icon.id }}"></i> &middot;
+        Unicode: <span class="upper">{{ page.icon.unicode }}</span> &middot;
+        Created: v{{ page.icon.created }} &middot;
         Categories:
-        {% for category in page.icon['categories'] %}
+        {% for category in page.icon.categories %}
           {{ category }}{% unless forloop.last %},{% endunless %}
         {% endfor %}
-        {% if page.icon['aliases'] %}
+        {% if page.icon.aliases %}
           &middot; Aliases:
-          {% for alias in page.icon['aliases'] %}
+          {% for alias in page.icon.aliases %}
             icon-{{ alias }}{% unless forloop.last %},{% endunless %}
           {% endfor %}
         {% endif %}
@@ -42,11 +42,11 @@ relative_path: ../../
         <p>After you get <a href="{{ page.relative_path }}integration/">up and running</a>, you can place Font Awesome icons just about anywhere with the <code>&lt;i&gt;</code> tag:</p>
         <div class="well well-transparent">
           <div style="font-size: 24px; line-height: 1.5em;">
-            <i class="icon-{{ page.icon['id'] }}"></i> icon-{{ page.icon['id'] }}
+            <i class="icon-{{ page.icon.id }}"></i> icon-{{ page.icon.id }}
           </div>
         </div>
 {% highlight html linenos %}
-<i class="icon-{{ page.icon['id'] }}"></i> icon-{{ page.icon['id'] }}
+<i class="icon-{{ page.icon.id }}"></i> icon-{{ page.icon.id }}
 {% endhighlight %}
         <br>
         <div class="lead"><i class="icon-info-sign"></i> Looking for more? Check out the <a href="{{ page.relative_path }}examples/">examples</a>.</div>

+ 56 - 0
build/_plugins/css_preproc_generator.rb

@@ -0,0 +1,56 @@
+##
+# Create Less and Sass files
+
+require 'yaml'
+require 'forwardable'
+require 'debugger'
+
+module Jekyll
+
+  class CssPreProcPage < Page
+
+    def initialize(site, base, dir, name, icons)
+      @site = site
+      @base = base
+      @dir = dir
+      @name = name
+      @icons = icons
+
+      self.process(@name)
+
+      self.read_yaml(File.join(base, site.config['layouts']), @name)
+
+      self.data['icons'] = icons
+    end
+
+  end
+
+  class CssPreProcGenerator < Generator
+
+    ##
+    # Iterate over every described icon in a YAML file and create a page for it
+
+    safe true
+
+    def generate(site)
+      # Need to figure use lessc to generate the files first
+      return
+
+      less_destination = site.config['css_preproc']['less_destination']
+
+      # Less file
+      site.pages << CssPreProcPage.new(
+        site, site.source, less_destination,
+        site.config['css_preproc']['less_layout'],
+        site.icons)
+
+      # Less IE7 file
+      site.pages << CssPreProcPage.new(
+        site, site.source, less_destination,
+        site.config['css_preproc']['less_ie7_layout'],
+        site.icons)
+    end
+
+  end
+
+end

+ 4 - 6
build/_plugins/icon_page_generator.rb

@@ -2,6 +2,7 @@
 # Create individual pages for each icon in the FontAwesome set
 
 require 'yaml'
+require 'debugger'
 
 module Jekyll
 
@@ -14,7 +15,7 @@ module Jekyll
       @site = site
       @base = base
       @dir = dir
-      @name = "#{icon['id']}.html"
+      @name = "#{icon.id}.html"
       @icon = icon
 
       self.process(@name)
@@ -22,7 +23,7 @@ module Jekyll
       self.read_yaml(File.join(base, site.config['layouts']), site.config['icon_layout'])
 
       self.data['icon'] = icon
-      self.data['title'] = "icon-#{icon['id']}: " + self.data['title_suffix']
+      self.data['title'] = "icon-#{icon.id}: " + self.data['title_suffix']
     end
 
   end
@@ -35,10 +36,7 @@ module Jekyll
     safe true
 
     def generate(site)
-      icon_meta_filename = site.config['icon_meta']
-      icon_meta = YAML.load_file(icon_meta_filename)
-
-      icon_meta['icons'].each do |icon|
+      site.icons.each do |icon|
         site.pages << IconPage.new(site, site.source, site.config['icon_destination'], icon)
       end
     end

+ 100 - 0
build/_plugins/site.rb

@@ -0,0 +1,100 @@
+##
+# 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
+
+      @name = icon_object['name']
+      @id = icon_object['id']
+      @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 category(icons, cat)
+      icons.select { |icon| icon['categories'].include?(cat) }
+    end
+
+    def version(icons, version)
+      icons.select { |icon| icon['created'] == version }
+    end
+  end
+
+  Liquid::Template.register_filter(IconFilters)
+
+  class Site
+
+    attr_reader :icons
+
+    def process
+      @icons = IconList.new(YAML.load_file(self.config['icon_meta'])['icons'])
+
+      self.reset
+      self.read
+      self.generate
+      self.render
+      self.cleanup
+      self.write
+    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