2013-12-28 01:26:31 +01:00
|
|
|
require 'sass'
|
2014-04-05 02:02:22 +02:00
|
|
|
require 'compass/import-once'
|
2012-05-28 22:19:40 +02:00
|
|
|
|
2012-04-27 01:15:35 +02:00
|
|
|
module Middleman
|
|
|
|
module Renderers
|
2012-08-14 00:39:06 +02:00
|
|
|
|
2012-04-27 01:15:35 +02:00
|
|
|
# Sass renderer
|
|
|
|
module Sass
|
2012-08-14 00:39:06 +02:00
|
|
|
|
2012-04-27 01:15:35 +02:00
|
|
|
# Setup extension
|
|
|
|
class << self
|
2012-08-14 00:39:06 +02:00
|
|
|
|
2012-04-27 01:15:35 +02:00
|
|
|
# Once registered
|
|
|
|
def registered(app)
|
|
|
|
# Default sass options
|
2012-10-14 04:54:55 +02:00
|
|
|
app.config.define_setting :sass, {}, 'Sass engine options'
|
2012-08-14 00:39:06 +02:00
|
|
|
|
2012-04-27 01:15:35 +02:00
|
|
|
# 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)
|
2014-04-05 02:02:22 +02:00
|
|
|
|
|
|
|
::Compass::ImportOnce.activate!
|
2012-04-27 01:15:35 +02:00
|
|
|
end
|
2012-08-14 00:39:06 +02:00
|
|
|
|
2012-04-27 01:15:35 +02:00
|
|
|
alias :included :registered
|
|
|
|
end
|
2012-08-14 00:39:06 +02:00
|
|
|
|
2012-05-24 23:29:29 +02:00
|
|
|
# A SassTemplate for Tilt which outputs debug messages
|
|
|
|
class SassPlusCSSFilenameTemplate < ::Tilt::SassTemplate
|
2012-08-14 00:39:06 +02:00
|
|
|
|
2012-08-16 22:48:34 +02:00
|
|
|
def initialize(*args, &block)
|
|
|
|
super
|
2013-12-28 19:14:15 +01:00
|
|
|
|
2012-08-16 22:48:34 +02:00
|
|
|
if @options.has_key?(:context)
|
|
|
|
@context = @options[:context]
|
|
|
|
end
|
|
|
|
end
|
2013-12-28 19:14:15 +01:00
|
|
|
|
2012-05-24 23:29:29 +02:00
|
|
|
# Define the expected syntax for the template
|
|
|
|
# @return [Symbol]
|
|
|
|
def syntax
|
|
|
|
:sass
|
|
|
|
end
|
2012-08-14 00:39:06 +02:00
|
|
|
|
2012-05-24 23:29:29 +02:00
|
|
|
def prepare; end
|
|
|
|
|
2012-04-27 01:15:35 +02:00
|
|
|
# Add exception messaging
|
|
|
|
# @param [Class] context
|
|
|
|
# @param [Hash] locals
|
|
|
|
# @return [String]
|
|
|
|
def evaluate(context, locals, &block)
|
2012-08-16 22:48:34 +02:00
|
|
|
@context ||= context
|
2012-05-24 23:29:29 +02:00
|
|
|
@engine = ::Sass::Engine.new(data, sass_options)
|
2012-08-14 00:39:06 +02:00
|
|
|
|
2012-04-27 01:15:35 +02:00
|
|
|
begin
|
2012-05-24 23:29:29 +02:00
|
|
|
@engine.render
|
2012-05-23 23:37:57 +02:00
|
|
|
rescue ::Sass::SyntaxError => e
|
|
|
|
::Sass::SyntaxError.exception_to_css(e, :full_exception => true)
|
2012-04-27 01:15:35 +02:00
|
|
|
end
|
|
|
|
end
|
2012-08-14 00:39:06 +02:00
|
|
|
|
2012-04-27 01:15:35 +02:00
|
|
|
# Change Sass path, for url functions, to the build folder if we're building
|
|
|
|
# @return [Hash]
|
|
|
|
def sass_options
|
2012-08-16 22:48:34 +02:00
|
|
|
more_opts = { :filename => eval_file, :line => line, :syntax => syntax }
|
2013-12-28 19:14:15 +01:00
|
|
|
|
2014-01-02 06:19:05 +01:00
|
|
|
if @context.is_a?(::Middleman::TemplateContext) && file
|
2012-10-14 04:54:55 +02:00
|
|
|
location_of_sass_file = @context.source_dir
|
2013-12-28 19:14:15 +01:00
|
|
|
|
2012-08-16 22:48:34 +02:00
|
|
|
parts = basename.split('.')
|
|
|
|
parts.pop
|
2013-12-28 01:26:31 +01:00
|
|
|
more_opts[:css_filename] = File.join(location_of_sass_file, @context.config[:css_dir], parts.join('.'))
|
2012-08-16 22:48:34 +02:00
|
|
|
end
|
2013-12-28 19:14:15 +01:00
|
|
|
|
2012-08-16 22:48:34 +02:00
|
|
|
options.merge(more_opts)
|
2012-04-27 01:15:35 +02:00
|
|
|
end
|
|
|
|
end
|
2012-08-14 00:39:06 +02:00
|
|
|
|
2012-04-27 01:15:35 +02:00
|
|
|
# SCSS version of the above template
|
|
|
|
class ScssPlusCSSFilenameTemplate < SassPlusCSSFilenameTemplate
|
2012-08-14 00:39:06 +02:00
|
|
|
|
2012-04-27 01:15:35 +02:00
|
|
|
# Define the expected syntax for the template
|
|
|
|
# @return [Symbol]
|
|
|
|
def syntax
|
|
|
|
:scss
|
|
|
|
end
|
|
|
|
end
|
2011-07-10 22:55:40 +02:00
|
|
|
end
|
|
|
|
end
|
2012-08-14 00:39:06 +02:00
|
|
|
end
|