From 91b348966ed2725dca7a5cd306dbc446f5928787 Mon Sep 17 00:00:00 2001 From: Ben Balter Date: Fri, 26 Feb 2016 14:25:29 -0500 Subject: [PATCH] add theme class --- lib/jekyll.rb | 1 + lib/jekyll/readers/layout_reader.rb | 5 ++++ lib/jekyll/site.rb | 4 ++- lib/jekyll/theme.rb | 42 +++++++++++++++++++++++++++++ 4 files changed, 51 insertions(+), 1 deletion(-) create mode 100644 lib/jekyll/theme.rb diff --git a/lib/jekyll.rb b/lib/jekyll.rb index 6896bb0b..87dc3b1b 100644 --- a/lib/jekyll.rb +++ b/lib/jekyll.rb @@ -67,6 +67,7 @@ module Jekyll autoload :Site, 'jekyll/site' autoload :StaticFile, 'jekyll/static_file' autoload :Stevenson, 'jekyll/stevenson' + autoload :Theme, 'jekyll/theme' autoload :URL, 'jekyll/url' autoload :Utils, 'jekyll/utils' autoload :VERSION, 'jekyll/version' diff --git a/lib/jekyll/readers/layout_reader.rb b/lib/jekyll/readers/layout_reader.rb index f0620294..82989d50 100644 --- a/lib/jekyll/readers/layout_reader.rb +++ b/lib/jekyll/readers/layout_reader.rb @@ -25,6 +25,11 @@ module Jekyll within(layout_directory) do entries = EntryFilter.new(site).filter(Dir['**/*.*']) end + if site.theme + within(site.theme.layouts_path) do + entries.concat EntryFilter.new(site).filter(Dir['**/*.*']) + end + end entries end diff --git a/lib/jekyll/site.rb b/lib/jekyll/site.rb index 72d42ad9..d5c1f1c6 100644 --- a/lib/jekyll/site.rb +++ b/lib/jekyll/site.rb @@ -8,7 +8,7 @@ module Jekyll :exclude, :include, :lsi, :highlighter, :permalink_style, :time, :future, :unpublished, :safe, :plugins, :limit_posts, :show_drafts, :keep_files, :baseurl, :data, :file_read_opts, - :gems, :plugin_manager + :gems, :plugin_manager, :theme attr_accessor :converters, :generators, :reader attr_reader :regenerator, :liquid_renderer @@ -38,6 +38,8 @@ module Jekyll self.plugin_manager = Jekyll::PluginManager.new(self) self.plugins = plugin_manager.plugins_path + self.theme = Jekyll::Theme.new(config["theme"]) if config["theme"] + self.file_read_opts = {} self.file_read_opts[:encoding] = config['encoding'] if config['encoding'] diff --git a/lib/jekyll/theme.rb b/lib/jekyll/theme.rb new file mode 100644 index 00000000..04bf7aaa --- /dev/null +++ b/lib/jekyll/theme.rb @@ -0,0 +1,42 @@ +module Jekyll + class Theme + attr_reader :name + + def initialize(name) + @name = name.downcase.strip + raise MissingDependencyException unless gemspec + end + + def root + @root ||= gemspec.gem_dir + end + + def version + gemspec.version + end + + def assets_path + path_for "assets" + end + + def includes_path + path_for "includes" + end + + def layouts_path + path_for "layouts" + end + + private + + def path_for(folder) + Jekyll.sanitized_path root, "_#{folder}" + end + + def gemspec + @gemspec ||= Gem::Specification.find_by_name(name) + rescue Gem::LoadError + nil + end + end +end