lib/octopress-ink/plugins.rb in octopress-ink-1.0.0.alpha.31 vs lib/octopress-ink/plugins.rb in octopress-ink-1.0.0.alpha.32

- old
+ new

@@ -1,300 +1,319 @@ module Octopress - module Plugins + module Ink + module Plugins - @plugins = [] - @local_plugins = [] - @site = nil + @plugins = [] + @local_plugins = [] + @site = nil - def self.theme - @theme - end - - def self.plugin(name) - if name == 'theme' + def self.theme @theme - else - found = plugins.reject { |p| p.name != name } - if found.empty? - raise IOError.new "No Theme or Plugin with the name '#{name}' was found." + end + + def self.each(&block) + plugins.each(&block) + end + + def self.size + plugins.size + end + + def self.plugin(name) + if name == 'theme' + @theme + else + found = plugins.reject { |p| p.name != name } + if found.empty? + raise IOError.new "No Theme or Plugin with the name '#{name}' was found." + end + found.first end - found.first end - end - def self.plugins - [@theme].concat(@plugins).concat(@local_plugins).compact - end + def self.plugins + [@theme].concat(@plugins).concat(@local_plugins).compact + end - def self.site=(site) - @site = site - end + def self.site=(site) + @site = site + end - def self.site - @site - end + def self.site + @site + end - def self.config - if @config - @config - else - @config = {} - @config['plugins'] = {} - @config['theme'] = @theme.nil? ? {} : @theme.config + def self.config + if @config + @config + else + @config = {} + @config['plugins'] = {} + @config['theme'] = @theme.nil? ? {} : @theme.config - plugins.each do |p| - unless p == @theme - @config['plugins'][p.name] = p.config + plugins.each do |p| + unless p == @theme + @config['plugins'][p.name] = p.config + end end + + @config end + end - @config + def self.include(name, file) + p = plugin(name) + p.include(file) end - end - def self.include(name, file) - p = plugin(name) - p.include(file) - end + def self.register_plugin(plugin, name, type='plugin') + new_plugin = plugin.new(name, type) - def self.register_plugin(plugin, name, type='plugin') - new_plugin = plugin.new(name, type) + case type + when 'theme' + @theme = new_plugin + when 'local_plugin' + @local_plugins << new_plugin + else + @plugins << new_plugin + end + end - case type - when 'theme' - @theme = new_plugin - when 'local_plugin' - @local_plugins << new_plugin - else - @plugins << new_plugin + def self.register_layouts + plugins.each do |p| + p.layouts.clone.each { |layout| layout.register } + end end - end - def self.register_layouts - plugins.each do |p| - p.layouts.clone.each { |layout| layout.register } + def self.layouts + names = [] + plugins.each do |p| + p.layouts.each { |layout| names << layout.name } + end + names end - end - def self.custom_dir - @site.config['plugins'] - end + def self.custom_dir + @site.config['plugins'] + end - def self.fingerprint(paths) - paths = [paths] unless paths.is_a? Array - Digest::MD5.hexdigest(paths.clone.map! { |path| "#{File.mtime(path).to_i}" }.join) - end - - def self.combined_stylesheet_path(media) - File.join('stylesheets', "#{media}-#{@combined_stylesheets[media][:fingerprint]}.css") - end + def self.fingerprint(paths) + paths = [paths] unless paths.is_a? Array + Digest::MD5.hexdigest(paths.clone.map! { |path| "#{File.mtime(path).to_i}" }.join) + end + + def self.combined_stylesheet_path(media) + File.join('stylesheets', "#{media}-#{@combined_stylesheets[media][:fingerprint]}.css") + end - def self.combined_javascript_path - print = @javascript_fingerprint || '' - File.join('javascripts', "#{print}.js") - end + def self.combined_javascript_path + print = @javascript_fingerprint || '' + File.join('javascripts', "#{print}.js") + end - def self.write_files(source, dest) - @site.static_files << StaticFileContent.new(source, dest) - end + def self.write_files(source, dest) + @site.static_files << StaticFileContent.new(source, dest) + end - def self.compile_sass_file(path, options) - ::Sass.compile_file(path, options) - end + def self.compile_sass_file(path, options) + ::Sass.compile_file(path, options) + end - def self.compile_sass(contents, options) - ::Sass.compile(contents, options) - end + def self.compile_sass(contents, options) + ::Sass.compile(contents, options) + end - def self.sass_config(item, default) - config = @site.config - if config['octopress'] && config['octopress']['sass'] && config['octopress']['sass'][item] - config['octopress']['sass'][item] - else - default + def self.sass_config(item, default) + config = @site.config + if config['octopress'] && config['octopress']['sass'] && config['octopress']['sass'][item] + config['octopress']['sass'][item] + else + default + end end - end - - def self.sass_options - options = { - style: sass_config('output_style', 'compressed').to_sym, - trace: sass_config('trace', false), - line_numbers: sass_config('line_numbers', false) - } - end + + def self.sass_options + options = { + style: sass_config('output_style', 'compressed').to_sym, + trace: sass_config('trace', false), + line_numbers: sass_config('line_numbers', false) + } + end - def self.write_combined_stylesheet - css = combine_stylesheets - css.keys.each do |media| - options = sass_options - options[:line_numbers] = false - contents = compile_sass(css[media][:contents], options) - write_files(contents, combined_stylesheet_path(media)) + def self.write_combined_stylesheet + css = combine_stylesheets + css.keys.each do |media| + options = sass_options + options[:line_numbers] = false + contents = compile_sass(css[media][:contents], options) + write_files(contents, combined_stylesheet_path(media)) + end end - end - def self.write_combined_javascript - js = combine_javascripts - write_files(js, combined_javascript_path) unless js == '' - end + def self.write_combined_javascript + js = combine_javascripts + write_files(js, combined_javascript_path) unless js == '' + end - def self.combine_stylesheets - unless @combined_stylesheets - css = {} - paths = {} - plugins.each do |plugin| - if plugin.type == 'theme' - plugin_header = "/* Theme: #{plugin.name} */\n" - else - plugin_header = "/* Plugin: #{plugin.name} */\n" - end - stylesheets = plugin.stylesheets.clone.concat plugin.sass - stylesheets.each do |file| - css[file.media] ||= {} - css[file.media][:contents] ||= '' - css[file.media][:contents] << plugin_header - css[file.media][:paths] ||= [] - - # Add Sass files - if file.respond_to? :compile - css[file.media][:contents].concat file.compile + def self.combine_stylesheets + unless @combined_stylesheets + css = {} + paths = {} + plugins.each do |plugin| + if plugin.type == 'theme' + plugin_header = "/* Theme: #{plugin.name} */\n" else - css[file.media][:contents].concat file.path.read.strip + plugin_header = "/* Plugin: #{plugin.name} */\n" end - css[file.media][:paths] << file.path - plugin_header = '' + stylesheets = plugin.stylesheets.clone.concat plugin.sass + stylesheets.each do |file| + css[file.media] ||= {} + css[file.media][:contents] ||= '' + css[file.media][:contents] << plugin_header + css[file.media][:paths] ||= [] + + # Add Sass files + if file.respond_to? :compile + css[file.media][:contents].concat file.compile + else + css[file.media][:contents].concat file.path.read.strip + end + css[file.media][:paths] << file.path + plugin_header = '' + end end - end - css.keys.each do |media| - css[media][:fingerprint] = fingerprint(css[media][:paths]) + css.keys.each do |media| + css[media][:fingerprint] = fingerprint(css[media][:paths]) + end + @combined_stylesheets = css end - @combined_stylesheets = css + @combined_stylesheets end - @combined_stylesheets - end - def self.combine_javascripts - unless @combined_javascripts - js = '' - plugins.each do |plugin| - paths = plugin.javascript_paths - @javascript_fingerprint = fingerprint(paths) - paths.each do |file| - js.concat Pathname.new(file).read + def self.combine_javascripts + unless @combined_javascripts + js = '' + plugins.each do |plugin| + paths = plugin.javascript_paths + @javascript_fingerprint = fingerprint(paths) + paths.each do |file| + js.concat Pathname.new(file).read + end end + @combined_javascripts = js end - @combined_javascripts = js + @combined_javascripts end - @combined_javascripts - end - def self.combined_stylesheet_tag - tags = '' - combine_stylesheets.keys.each do |media| - tags.concat "<link href='#{Filters.expand_url(combined_stylesheet_path(media))}' media='#{media}' rel='stylesheet' type='text/css'>" + def self.combined_stylesheet_tag + tags = '' + combine_stylesheets.keys.each do |media| + tags.concat "<link href='#{Filters.expand_url(combined_stylesheet_path(media))}' media='#{media}' rel='stylesheet' type='text/css'>" + end + tags end - tags - end - def self.combined_javascript_tag - unless combine_javascripts == '' - "<script src='#{Filters.expand_url(combined_javascript_path)}'></script>" + def self.combined_javascript_tag + unless combine_javascripts == '' + "<script src='#{Filters.expand_url(combined_javascript_path)}'></script>" + end end - end - def self.stylesheet_tags - if concat_css - combined_stylesheet_tag - else - css = [] - plugins.each do |plugin| - css.concat plugin.stylesheet_tags - css.concat plugin.sass_tags + def self.stylesheet_tags + if concat_css + combined_stylesheet_tag + else + css = [] + plugins.each do |plugin| + css.concat plugin.stylesheet_tags + css.concat plugin.sass_tags + end + css end - css end - end - def self.concat_css - config = @site.config - if config['octopress'] && !config['octopress']['concat_css'].nil? - config['octopress']['concat_css'] != false - else - true + def self.concat_css + config = @site.config + if config['octopress'] && !config['octopress']['concat_css'].nil? + config['octopress']['concat_css'] != false + else + true + end end - end - def self.concat_js - config = @site.config - if config['octopress'] && !config['octopress']['concat_js'].nil? - config['octopress']['concat_js'] != false - else - true + def self.concat_js + config = @site.config + if config['octopress'] && !config['octopress']['concat_js'].nil? + config['octopress']['concat_js'] != false + else + true + end end - end - def self.javascript_tags - if concat_js - combined_javascript_tag - else - js = [] + def self.javascript_tags + if concat_js + combined_javascript_tag + else + js = [] + plugins.each do |plugin| + js.concat plugin.javascript_tags + end + js + end + end + + def self.copy_javascripts plugins.each do |plugin| - js.concat plugin.javascript_tags + copy plugin.javascripts end - js end - end - def self.copy_javascripts - plugins.each do |plugin| - copy plugin.javascripts + def self.copy_stylesheets + stylesheets = plugins.clone.map { + |p| p.stylesheets.clone.concat(p.sass) + }.flatten + copy stylesheets end - end - def self.copy_stylesheets - stylesheets = plugins.clone.map { - |p| p.stylesheets.clone.concat(p.sass) - }.flatten - copy stylesheets - end + def self.add_static_files + + plugin('user stylesheets').add_files + + # Copy/Generate Stylesheets + # + if concat_css + write_combined_stylesheet + else + copy_stylesheets + end - def self.add_static_files - - plugin('user stylesheets').add_files - - # Copy/Generate Stylesheets - # - if concat_css - write_combined_stylesheet - else - copy_stylesheets - end + # Copy/Generate Javascripts + # + if concat_js + write_combined_javascript + else + copy_javascripts + end - # Copy/Generate Javascripts - # - if concat_js - write_combined_javascript - else - copy_javascripts + # Copy other assets + # + copy_static_files end - # Copy other assets - # - copy_static_files - end - - def self.copy_static_files - plugins.each do |plugin| - copy plugin.files - copy plugin.images - copy plugin.fonts + def self.copy_static_files + plugins.each do |plugin| + copy plugin.files + copy plugin.pages + copy plugin.images + copy plugin.fonts + end end - end - def self.copy(files) - files.each { |f| f.copy } + def self.copy(files) + files.each { |f| f.copy } + end end end end