Move renderers into core, but don't require gems and only register templates if gems present
This commit is contained in:
parent
c3c662cf44
commit
67e78f20c7
13 changed files with 174 additions and 175 deletions
|
@ -1,5 +1,3 @@
|
|||
require "middleman-core/renderers/erb"
|
||||
|
||||
# Shutup Tilt Warnings
|
||||
# @private
|
||||
class Tilt::Template
|
||||
|
@ -22,7 +20,47 @@ module Middleman
|
|||
app.send :include, InstanceMethods
|
||||
|
||||
# Activate custom renderers
|
||||
require "middleman-core/renderers/erb"
|
||||
app.register Middleman::Renderers::ERb
|
||||
|
||||
# CoffeeScript Support
|
||||
begin
|
||||
require "middleman-core/renderers//coffee_script"
|
||||
app.register Middleman::Renderers::CoffeeScript
|
||||
rescue LoadError
|
||||
end
|
||||
|
||||
# Haml Support
|
||||
begin
|
||||
require "middleman-core/renderers//haml"
|
||||
app.register Middleman::Renderers::Haml
|
||||
rescue LoadError
|
||||
end
|
||||
|
||||
# Sass Support
|
||||
begin
|
||||
require "middleman-core/renderers//sass"
|
||||
app.register Middleman::Renderers::Sass
|
||||
rescue LoadError
|
||||
end
|
||||
|
||||
# Markdown Support
|
||||
require "middleman-core/renderers//markdown"
|
||||
app.register Middleman::Renderers::Markdown
|
||||
|
||||
# Liquid Support
|
||||
begin
|
||||
require "middleman-core/renderers//liquid"
|
||||
app.register Middleman::Renderers::Liquid
|
||||
rescue LoadError
|
||||
end
|
||||
|
||||
# Slim Support
|
||||
begin
|
||||
require "middleman-core/renderers//slim"
|
||||
app.register Middleman::Renderers::Slim
|
||||
rescue LoadError
|
||||
end
|
||||
end
|
||||
|
||||
alias :included :registered
|
||||
|
|
41
middleman-core/lib/middleman-core/renderers/coffee_script.rb
Normal file
41
middleman-core/lib/middleman-core/renderers/coffee_script.rb
Normal file
|
@ -0,0 +1,41 @@
|
|||
# Require gem
|
||||
require "coffee_script"
|
||||
|
||||
module Middleman
|
||||
module Renderers
|
||||
|
||||
# CoffeeScript Renderer
|
||||
module CoffeeScript
|
||||
|
||||
# Setup extension
|
||||
class << self
|
||||
# Once registered
|
||||
def registered(app)
|
||||
app.before_configuration do
|
||||
template_extensions :coffee => :js
|
||||
end
|
||||
|
||||
# Tell Tilt to use it as well (for inline scss blocks)
|
||||
::Tilt.register 'coffee', DebuggingCoffeeScriptTemplate
|
||||
::Tilt.prefer(DebuggingCoffeeScriptTemplate)
|
||||
end
|
||||
alias :included :registered
|
||||
end
|
||||
|
||||
# A Template for Tilt which outputs debug messages
|
||||
class DebuggingCoffeeScriptTemplate < ::Tilt::CoffeeScriptTemplate
|
||||
# Add exception messaging
|
||||
# @param [Class] context
|
||||
# @param [Hash] locals
|
||||
# @return [String]
|
||||
def evaluate(context, locals, &block)
|
||||
begin
|
||||
super
|
||||
rescue ::ExecJS::RuntimeError=> e
|
||||
e.to_s
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
30
middleman-core/lib/middleman-core/renderers/haml.rb
Normal file
30
middleman-core/lib/middleman-core/renderers/haml.rb
Normal file
|
@ -0,0 +1,30 @@
|
|||
# Require gem
|
||||
require "haml"
|
||||
|
||||
module Middleman
|
||||
module Renderers
|
||||
|
||||
# Haml Renderer
|
||||
module Haml
|
||||
|
||||
# Setup extension
|
||||
class << self
|
||||
# Once registered
|
||||
def registered(app)
|
||||
app.before_configuration do
|
||||
template_extensions :haml => :html
|
||||
end
|
||||
|
||||
# Add haml helpers to context
|
||||
app.send :include, ::Haml::Helpers
|
||||
|
||||
# Setup haml helper paths
|
||||
app.ready do
|
||||
init_haml_helpers
|
||||
end
|
||||
end
|
||||
alias :included :registered
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
35
middleman-core/lib/middleman-core/renderers/liquid.rb
Normal file
35
middleman-core/lib/middleman-core/renderers/liquid.rb
Normal file
|
@ -0,0 +1,35 @@
|
|||
# Require Gem
|
||||
require "liquid"
|
||||
|
||||
module Middleman
|
||||
module Renderers
|
||||
|
||||
# Liquid Renderer
|
||||
module Liquid
|
||||
|
||||
# Setup extension
|
||||
class << self
|
||||
|
||||
# Once registerd
|
||||
def registered(app)
|
||||
app.before_configuration do
|
||||
template_extensions :liquid => :html
|
||||
end
|
||||
|
||||
# After config, setup liquid partial paths
|
||||
app.after_configuration do
|
||||
::Liquid::Template.file_system = ::Liquid::LocalFileSystem.new(source_dir)
|
||||
|
||||
# Convert data object into a hash for liquid
|
||||
sitemap.provides_metadata %r{\.liquid$} do |path|
|
||||
{ :locals => { :data => data.to_h } }
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
alias :included :registered
|
||||
end
|
||||
end
|
||||
|
||||
end
|
||||
end
|
57
middleman-core/lib/middleman-core/renderers/markdown.rb
Normal file
57
middleman-core/lib/middleman-core/renderers/markdown.rb
Normal file
|
@ -0,0 +1,57 @@
|
|||
module Middleman
|
||||
module Renderers
|
||||
|
||||
# Markdown renderer
|
||||
module Markdown
|
||||
|
||||
# Setup extension
|
||||
class << self
|
||||
|
||||
# Once registered
|
||||
def registered(app)
|
||||
# Set our preference for a markdown engine
|
||||
# TODO: Find a JRuby-compatible version
|
||||
app.set :markdown_engine, :maruku
|
||||
app.set :markdown_engine_prefix, ::Tilt
|
||||
|
||||
app.before_configuration do
|
||||
template_extensions :markdown => :html,
|
||||
:mdown => :html,
|
||||
:md => :html,
|
||||
:mkd => :html,
|
||||
:mkdn => :html
|
||||
end
|
||||
|
||||
# Once configuration is parsed
|
||||
app.after_configuration do
|
||||
|
||||
begin
|
||||
# Look for the user's preferred engine
|
||||
if markdown_engine == :redcarpet
|
||||
require "middleman-core/renderers//redcarpet"
|
||||
::Tilt.prefer(::Middleman::Renderers::RedcarpetTemplate)
|
||||
elsif markdown_engine.nil?
|
||||
# Map symbols to classes
|
||||
markdown_engine_klass = if markdown_engine.is_a? Symbol
|
||||
engine = markdown_engine.to_s
|
||||
engine = engine == "rdiscount" ? "RDiscount" : engine.camelize
|
||||
markdown_engine_prefix.const_get("#{engine}Template")
|
||||
else
|
||||
markdown_engine_prefix
|
||||
end
|
||||
|
||||
# Tell tilt to use that engine
|
||||
::Tilt.prefer(markdown_engine_klass)
|
||||
end
|
||||
rescue LoadError
|
||||
$stderr.puts "Requested Markdown engine (#{markdown_engine}) not found. Maybe the gem needs to be installed and required?"
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
alias :included :registered
|
||||
end
|
||||
end
|
||||
|
||||
end
|
||||
end
|
38
middleman-core/lib/middleman-core/renderers/redcarpet.rb
Normal file
38
middleman-core/lib/middleman-core/renderers/redcarpet.rb
Normal file
|
@ -0,0 +1,38 @@
|
|||
require "redcarpet"
|
||||
|
||||
module Middleman
|
||||
module Renderers
|
||||
|
||||
class RedcarpetTemplate < ::Tilt::RedcarpetTemplate::Redcarpet2
|
||||
|
||||
# Overwrite built-in Tilt version.
|
||||
# Don't overload :renderer option with smartypants
|
||||
# Supper renderer-level options
|
||||
def generate_renderer
|
||||
return options.delete(:renderer) if options.has_key?(:renderer)
|
||||
|
||||
# Pick a renderer
|
||||
renderer = ::Redcarpet::Render::HTML
|
||||
|
||||
# Support SmartyPants
|
||||
if options.delete(:smartypants)
|
||||
renderer = Class.new(renderer) do
|
||||
include ::Redcarpet::Render::SmartyPants
|
||||
end
|
||||
end
|
||||
|
||||
# Renderer Options
|
||||
possible_render_opts = [:filter_html, :no_images, :no_links, :no_styles, :safe_links_only, :with_toc_data, :hard_wrap, :xhtml]
|
||||
|
||||
render_options = possible_render_opts.inject({}) do |sum, opt|
|
||||
sum[opt] = options.delete(opt) if options.has_key?(opt)
|
||||
sum
|
||||
end
|
||||
|
||||
renderer.new(render_options)
|
||||
end
|
||||
end
|
||||
|
||||
::Tilt.register RedcarpetTemplate, 'markdown', 'mkd', 'md'
|
||||
end
|
||||
end
|
85
middleman-core/lib/middleman-core/renderers/sass.rb
Normal file
85
middleman-core/lib/middleman-core/renderers/sass.rb
Normal file
|
@ -0,0 +1,85 @@
|
|||
require "sass"
|
||||
|
||||
module Middleman
|
||||
module Renderers
|
||||
|
||||
# Sass renderer
|
||||
module Sass
|
||||
|
||||
# Setup extension
|
||||
class << self
|
||||
|
||||
# Once registered
|
||||
def registered(app)
|
||||
# Default sass options
|
||||
app.set :sass, {}
|
||||
|
||||
app.before_configuration do
|
||||
template_extensions :scss => :css,
|
||||
:sass => :css
|
||||
end
|
||||
|
||||
# Tell Tilt to use it as well (for inline sass blocks)
|
||||
::Tilt.register 'sass', SassPlusCSSFilenameTemplate
|
||||
::Tilt.prefer(SassPlusCSSFilenameTemplate)
|
||||
|
||||
# Tell Tilt to use it as well (for inline scss blocks)
|
||||
::Tilt.register 'scss', ScssPlusCSSFilenameTemplate
|
||||
::Tilt.prefer(ScssPlusCSSFilenameTemplate)
|
||||
end
|
||||
|
||||
alias :included :registered
|
||||
end
|
||||
|
||||
# A SassTemplate for Tilt which outputs debug messages
|
||||
class SassPlusCSSFilenameTemplate < ::Tilt::SassTemplate
|
||||
|
||||
# Define the expected syntax for the template
|
||||
# @return [Symbol]
|
||||
def syntax
|
||||
:sass
|
||||
end
|
||||
|
||||
def prepare; end
|
||||
|
||||
# Add exception messaging
|
||||
# @param [Class] context
|
||||
# @param [Hash] locals
|
||||
# @return [String]
|
||||
def evaluate(context, locals, &block)
|
||||
@context = context
|
||||
@engine = ::Sass::Engine.new(data, sass_options)
|
||||
|
||||
begin
|
||||
@engine.render
|
||||
rescue ::Sass::SyntaxError => e
|
||||
::Sass::SyntaxError.exception_to_css(e, :full_exception => true)
|
||||
end
|
||||
end
|
||||
|
||||
private
|
||||
# Change Sass path, for url functions, to the build folder if we're building
|
||||
# @return [Hash]
|
||||
def sass_options
|
||||
location_of_sass_file = File.expand_path(@context.source, @context.root)
|
||||
|
||||
parts = basename.split('.')
|
||||
parts.pop
|
||||
css_filename = File.join(location_of_sass_file, @context.css_dir, parts.join("."))
|
||||
|
||||
options.merge(:filename => eval_file, :line => line, :syntax => syntax, :css_filename => css_filename)
|
||||
end
|
||||
end
|
||||
|
||||
# SCSS version of the above template
|
||||
class ScssPlusCSSFilenameTemplate < SassPlusCSSFilenameTemplate
|
||||
|
||||
# Define the expected syntax for the template
|
||||
# @return [Symbol]
|
||||
def syntax
|
||||
:scss
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
30
middleman-core/lib/middleman-core/renderers/slim.rb
Normal file
30
middleman-core/lib/middleman-core/renderers/slim.rb
Normal file
|
@ -0,0 +1,30 @@
|
|||
# Load gem
|
||||
require "slim"
|
||||
|
||||
module Middleman
|
||||
module Renderers
|
||||
|
||||
# Slim renderer
|
||||
module Slim
|
||||
|
||||
# Setup extension
|
||||
class << self
|
||||
|
||||
# Once registered
|
||||
def registered(app)
|
||||
app.before_configuration do
|
||||
template_extensions :slim => :html
|
||||
end
|
||||
|
||||
# Setup Slim options to work with partials
|
||||
::Slim::Engine.set_default_options(
|
||||
:buffer => '@_out_buf',
|
||||
:generator => ::Temple::Generators::StringBuffer
|
||||
)
|
||||
end
|
||||
|
||||
alias :included :registered
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
Loading…
Add table
Add a link
Reference in a new issue