sass 3.1.0.alpha.32 → 3.1.0.alpha.33
Sign up to get free protection for your applications and to get access to all the features.
- data/EDGE_GEM_VERSION +1 -1
- data/VERSION +1 -1
- data/lib/sass/engine.rb +29 -4
- data/lib/sass/importers/rails.rb +4 -3
- data/lib/sass/plugin/rails.rb +70 -29
- data/lib/sass/tree/root_node.rb +3 -3
- metadata +2 -2
data/EDGE_GEM_VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
3.1.0.alpha.
|
1
|
+
3.1.0.alpha.33
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
3.1.0.alpha.
|
1
|
+
3.1.0.alpha.33
|
data/lib/sass/engine.rb
CHANGED
@@ -1,4 +1,5 @@
|
|
1
1
|
require 'strscan'
|
2
|
+
require 'set'
|
2
3
|
require 'digest/sha1'
|
3
4
|
require 'sass/cache_store'
|
4
5
|
require 'sass/tree/node'
|
@@ -241,13 +242,14 @@ module Sass
|
|
241
242
|
end
|
242
243
|
alias_method :to_css, :render
|
243
244
|
|
244
|
-
# Parses the document into its parse tree.
|
245
|
+
# Parses the document into its parse tree. Memoized.
|
245
246
|
#
|
246
247
|
# @return [Sass::Tree::Node] The root of the parse tree.
|
247
248
|
# @raise [Sass::SyntaxError] if there's an error in the document
|
248
249
|
def to_tree
|
249
|
-
|
250
|
-
|
250
|
+
@tree ||= @options[:quiet] ?
|
251
|
+
Sass::Util.silence_sass_warnings {_to_tree} :
|
252
|
+
_to_tree
|
251
253
|
end
|
252
254
|
|
253
255
|
# Returns the original encoding of the document,
|
@@ -262,6 +264,29 @@ module Sass
|
|
262
264
|
@original_encoding
|
263
265
|
end
|
264
266
|
|
267
|
+
# Gets a set of all the documents
|
268
|
+
# that are (transitive) dependencies of this document,
|
269
|
+
# not including the document itself.
|
270
|
+
#
|
271
|
+
# @return [[Sass::Engine]] The dependency documents.
|
272
|
+
def dependencies
|
273
|
+
_dependencies(Set.new, engines = Set.new)
|
274
|
+
engines - [self]
|
275
|
+
end
|
276
|
+
|
277
|
+
# Helper for \{#dependencies}.
|
278
|
+
#
|
279
|
+
# @private
|
280
|
+
def _dependencies(seen, engines)
|
281
|
+
return if seen.include?(key = [@options[:filename], @options[:importer]])
|
282
|
+
seen << key
|
283
|
+
engines << self
|
284
|
+
to_tree.grep(Tree::ImportNode) do |n|
|
285
|
+
next if n.css_import?
|
286
|
+
n.imported_file._dependencies(seen, engines)
|
287
|
+
end
|
288
|
+
end
|
289
|
+
|
265
290
|
private
|
266
291
|
|
267
292
|
def _render
|
@@ -325,7 +350,7 @@ module Sass
|
|
325
350
|
comment_tab_str = nil
|
326
351
|
first = true
|
327
352
|
lines = []
|
328
|
-
string.gsub(/\r|\n|\r\n|\r\n/, "\n").scan(
|
353
|
+
string.gsub(/\r|\n|\r\n|\r\n/, "\n").scan(/^[^\n]*?$/).each_with_index do |line, index|
|
329
354
|
index += (@options[:line] || 1)
|
330
355
|
if line.strip.empty?
|
331
356
|
lines.last.text << "\n" if lines.last && lines.last.comment?
|
data/lib/sass/importers/rails.rb
CHANGED
@@ -55,15 +55,16 @@ module Sass
|
|
55
55
|
end
|
56
56
|
|
57
57
|
def find_template(uri, prefix, partial)
|
58
|
-
return @lookup_context
|
59
|
-
|
60
|
-
|
58
|
+
return @lookup_context.
|
59
|
+
find_all(uri, prefix, partial).
|
60
|
+
find {|t| t.handler.is_a?(Sass::Plugin::TemplateHandler)}
|
61
61
|
end
|
62
62
|
|
63
63
|
def prepare_template(template, options)
|
64
64
|
return unless template
|
65
65
|
options[:syntax] = template.handler.syntax
|
66
66
|
options[:filename] = template.virtual_path
|
67
|
+
options[:_rails_filename] = template.identifier
|
67
68
|
options[:importer] = self
|
68
69
|
Sass::Engine.new(template.source, options)
|
69
70
|
end
|
data/lib/sass/plugin/rails.rb
CHANGED
@@ -4,15 +4,23 @@ unless defined?(Sass::RAILS_LOADED)
|
|
4
4
|
module Sass::Plugin::Configuration
|
5
5
|
# Different default options in a rails envirionment.
|
6
6
|
def default_options
|
7
|
-
|
8
|
-
:always_update => false,
|
9
|
-
:template_location => Sass::Util.rails_root + '/public/stylesheets/sass',
|
10
|
-
:css_location => Sass::Util.rails_root + '/public/stylesheets',
|
11
|
-
:cache_location => Sass::Util.rails_root + '/tmp/sass-cache',
|
12
|
-
:always_check => Sass::Util.rails_env == "development",
|
7
|
+
opts = {
|
13
8
|
:quiet => Sass::Util.rails_env != "production",
|
14
9
|
:full_exception => Sass::Util.rails_env != "production"
|
15
|
-
}
|
10
|
+
}
|
11
|
+
|
12
|
+
if Sass::Util.ap_geq?('3.1.0.beta')
|
13
|
+
opts.merge!(:cache => false, :load_paths => [])
|
14
|
+
else
|
15
|
+
opts.merge!(
|
16
|
+
:always_update => false,
|
17
|
+
:template_location => Sass::Util.rails_root + '/public/stylesheets/sass',
|
18
|
+
:css_location => Sass::Util.rails_root + '/public/stylesheets',
|
19
|
+
:cache_location => Sass::Util.rails_root + '/tmp/sass-cache',
|
20
|
+
:always_check => Sass::Util.rails_env == "development")
|
21
|
+
end
|
22
|
+
|
23
|
+
@default_options ||= opts.freeze
|
16
24
|
end
|
17
25
|
end
|
18
26
|
|
@@ -20,7 +28,7 @@ unless defined?(Sass::RAILS_LOADED)
|
|
20
28
|
|
21
29
|
# Disable this for now, until we figure out how to get Rails
|
22
30
|
# to pass in the view.
|
23
|
-
if
|
31
|
+
if Sass::Util.ap_geq?('3.1.0.beta')
|
24
32
|
require 'sass/importers/rails'
|
25
33
|
class Sass::Plugin::TemplateHandler
|
26
34
|
attr_reader :syntax
|
@@ -33,32 +41,65 @@ unless defined?(Sass::RAILS_LOADED)
|
|
33
41
|
|
34
42
|
def call(template, view)
|
35
43
|
rails_importer = Sass::Importers::Rails.new(view.lookup_context)
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
44
|
+
engine = Sass::Engine.new(template.source,
|
45
|
+
Sass::Plugin.options.merge(
|
46
|
+
:syntax => @syntax,
|
47
|
+
:filename => template.virtual_path,
|
48
|
+
:importer => rails_importer,
|
49
|
+
:load_paths => [rails_importer] + Sass::Plugin.options[:load_paths]))
|
50
|
+
|
51
|
+
# We need to serialize/deserialize the importers to make sure
|
52
|
+
# that each dependency is matched up to its proper importer
|
53
|
+
# for when importer#mtime is called.
|
54
|
+
dependencies = engine.dependencies
|
55
|
+
importers = Sass::Util.to_hash(
|
56
|
+
Sass::Util.enum_with_index(dependencies).map do |e, i|
|
57
|
+
importer = e.options[:importer]
|
58
|
+
[importer, {
|
59
|
+
:variable => "importer_#{i}",
|
60
|
+
:expression => (importer == rails_importer ?
|
61
|
+
"Sass::Importers::Rails.new(lookup_context)" :
|
62
|
+
"Sass::Util.load(#{Sass::Util.dump(importer)})")
|
63
|
+
}]
|
64
|
+
end)
|
65
|
+
|
66
|
+
stylesheet =
|
67
|
+
begin
|
68
|
+
engine.render
|
69
|
+
rescue Sass::SyntaxError => e
|
70
|
+
Sass::Plugin::TemplateHandler.munge_exception e, view.lookup_context
|
71
|
+
Sass::SyntaxError.exception_to_css(e, Sass::Plugin.options)
|
72
|
+
end
|
43
73
|
|
44
74
|
<<RUBY
|
45
|
-
|
46
|
-
#
|
47
|
-
|
48
|
-
#
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
#{
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
#{tree.render.inspect}
|
75
|
+
begin
|
76
|
+
#{importers.map {|_, val| "#{val[:variable]} = #{val[:expression]}"}.join("\n")}
|
77
|
+
if Sass::Plugin::TemplateHandler.dependencies_changed?(
|
78
|
+
[#{dependencies.map {|e| "[#{e.options[:filename].inspect}, #{importers[e.options[:importer]][:variable]}]"}.join(',')}],
|
79
|
+
#{Time.now.to_i})
|
80
|
+
@_template.expire!
|
81
|
+
@_template.rerender(self)
|
82
|
+
else
|
83
|
+
#{stylesheet.inspect}
|
84
|
+
end
|
85
|
+
rescue Sass::SyntaxError => e
|
86
|
+
Sass::Plugin::TemplateHandler.munge_exception e, lookup_context
|
87
|
+
Sass::SyntaxError.exception_to_css(e, Sass::Plugin.options)
|
59
88
|
end
|
60
89
|
RUBY
|
61
90
|
end
|
91
|
+
|
92
|
+
def self.dependencies_changed?(deps, since)
|
93
|
+
deps.any? {|d, i| i.mtime(d, Sass::Plugin.options) > since}
|
94
|
+
end
|
95
|
+
|
96
|
+
def self.munge_exception(e, lookup_context)
|
97
|
+
importer = Sass::Importers::Rails.new(lookup_context)
|
98
|
+
e.sass_backtrace.each do |bt|
|
99
|
+
next unless engine = importer.find(bt[:filename], Sass::Plugin.options)
|
100
|
+
bt[:filename] = engine.options[:_rails_filename]
|
101
|
+
end
|
102
|
+
end
|
62
103
|
end
|
63
104
|
|
64
105
|
ActionView::Template.register_template_handler(:sass, Sass::Plugin::TemplateHandler.new(:sass))
|
data/lib/sass/tree/root_node.rb
CHANGED
@@ -17,7 +17,7 @@ module Sass
|
|
17
17
|
def to_s(*args)
|
18
18
|
super
|
19
19
|
rescue Sass::SyntaxError => e
|
20
|
-
e.sass_template
|
20
|
+
e.sass_template ||= @template
|
21
21
|
raise e
|
22
22
|
end
|
23
23
|
|
@@ -36,7 +36,7 @@ module Sass
|
|
36
36
|
environment.options = @options if environment.options.nil? || environment.options.empty?
|
37
37
|
super
|
38
38
|
rescue Sass::SyntaxError => e
|
39
|
-
e.sass_template
|
39
|
+
e.sass_template ||= @template
|
40
40
|
raise e
|
41
41
|
end
|
42
42
|
|
@@ -49,7 +49,7 @@ module Sass
|
|
49
49
|
def cssize(extends = Sass::Util::SubsetMap.new, parent = nil)
|
50
50
|
return super(extends, parent), extends
|
51
51
|
rescue Sass::SyntaxError => e
|
52
|
-
e.sass_template
|
52
|
+
e.sass_template ||= @template
|
53
53
|
raise e
|
54
54
|
end
|
55
55
|
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: sass
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 3.1.0.alpha.
|
4
|
+
version: 3.1.0.alpha.33
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Nathan Weizenbaum
|
@@ -11,7 +11,7 @@ autorequire:
|
|
11
11
|
bindir: bin
|
12
12
|
cert_chain: []
|
13
13
|
|
14
|
-
date: 2010-11-
|
14
|
+
date: 2010-11-19 00:00:00 -05:00
|
15
15
|
default_executable:
|
16
16
|
dependencies:
|
17
17
|
- !ruby/object:Gem::Dependency
|