haml 3.0.21 → 3.0.22
Sign up to get free protection for your applications and to get access to all the features.
Potentially problematic release.
This version of haml might be problematic. Click here for more details.
- data/Rakefile +1 -41
- data/VERSION +1 -1
- data/lib/haml/precompiler.rb +8 -6
- data/lib/haml/template/plugin.rb +16 -6
- data/lib/sass/less.rb +31 -12
- data/lib/sass/script/funcall.rb +2 -1
- data/lib/sass/script/operation.rb +10 -5
- data/lib/sass/script/parser.rb +9 -0
- data/test/haml/engine_test.rb +25 -0
- data/test/sass/less_conversion_test.rb +24 -3
- data/test/sass/script_conversion_test.rb +60 -0
- metadata +243 -426
- data/vendor/sass/CONTRIBUTING +0 -3
- data/vendor/sass/MIT-LICENSE +0 -20
- data/vendor/sass/README.md +0 -201
- data/vendor/sass/Rakefile +0 -363
- data/vendor/sass/TODO +0 -39
- data/vendor/sass/VERSION +0 -1
- data/vendor/sass/VERSION_NAME +0 -1
- data/vendor/sass/bin/css2sass +0 -13
- data/vendor/sass/bin/sass +0 -8
- data/vendor/sass/bin/sass-convert +0 -7
- data/vendor/sass/doc-src/FAQ.md +0 -35
- data/vendor/sass/doc-src/INDENTED_SYNTAX.md +0 -210
- data/vendor/sass/doc-src/SASS_CHANGELOG.md +0 -1870
- data/vendor/sass/doc-src/SASS_REFERENCE.md +0 -1713
- data/vendor/sass/doc-src/SCSS_FOR_SASS_USERS.md +0 -155
- data/vendor/sass/ext/extconf.rb +0 -10
- data/vendor/sass/extra/update_watch.rb +0 -13
- data/vendor/sass/init.rb +0 -18
- data/vendor/sass/lib/sass.rb +0 -71
- data/vendor/sass/lib/sass/cache_store.rb +0 -208
- data/vendor/sass/lib/sass/callbacks.rb +0 -66
- data/vendor/sass/lib/sass/css.rb +0 -294
- data/vendor/sass/lib/sass/engine.rb +0 -792
- data/vendor/sass/lib/sass/environment.rb +0 -143
- data/vendor/sass/lib/sass/error.rb +0 -201
- data/vendor/sass/lib/sass/exec.rb +0 -619
- data/vendor/sass/lib/sass/importers.rb +0 -22
- data/vendor/sass/lib/sass/importers/base.rb +0 -138
- data/vendor/sass/lib/sass/importers/filesystem.rb +0 -121
- data/vendor/sass/lib/sass/less.rb +0 -363
- data/vendor/sass/lib/sass/plugin.rb +0 -126
- data/vendor/sass/lib/sass/plugin/compiler.rb +0 -346
- data/vendor/sass/lib/sass/plugin/configuration.rb +0 -123
- data/vendor/sass/lib/sass/plugin/generic.rb +0 -15
- data/vendor/sass/lib/sass/plugin/merb.rb +0 -48
- data/vendor/sass/lib/sass/plugin/rack.rb +0 -47
- data/vendor/sass/lib/sass/plugin/rails.rb +0 -41
- data/vendor/sass/lib/sass/plugin/staleness_checker.rb +0 -145
- data/vendor/sass/lib/sass/railtie.rb +0 -8
- data/vendor/sass/lib/sass/repl.rb +0 -58
- data/vendor/sass/lib/sass/root.rb +0 -7
- data/vendor/sass/lib/sass/script.rb +0 -63
- data/vendor/sass/lib/sass/script/bool.rb +0 -18
- data/vendor/sass/lib/sass/script/color.rb +0 -491
- data/vendor/sass/lib/sass/script/css_lexer.rb +0 -29
- data/vendor/sass/lib/sass/script/css_parser.rb +0 -31
- data/vendor/sass/lib/sass/script/funcall.rb +0 -79
- data/vendor/sass/lib/sass/script/functions.rb +0 -852
- data/vendor/sass/lib/sass/script/interpolation.rb +0 -70
- data/vendor/sass/lib/sass/script/lexer.rb +0 -337
- data/vendor/sass/lib/sass/script/literal.rb +0 -236
- data/vendor/sass/lib/sass/script/node.rb +0 -101
- data/vendor/sass/lib/sass/script/number.rb +0 -423
- data/vendor/sass/lib/sass/script/operation.rb +0 -92
- data/vendor/sass/lib/sass/script/parser.rb +0 -392
- data/vendor/sass/lib/sass/script/string.rb +0 -67
- data/vendor/sass/lib/sass/script/string_interpolation.rb +0 -93
- data/vendor/sass/lib/sass/script/unary_operation.rb +0 -57
- data/vendor/sass/lib/sass/script/variable.rb +0 -48
- data/vendor/sass/lib/sass/scss.rb +0 -17
- data/vendor/sass/lib/sass/scss/css_parser.rb +0 -51
- data/vendor/sass/lib/sass/scss/parser.rb +0 -838
- data/vendor/sass/lib/sass/scss/rx.rb +0 -126
- data/vendor/sass/lib/sass/scss/sass_parser.rb +0 -11
- data/vendor/sass/lib/sass/scss/script_lexer.rb +0 -15
- data/vendor/sass/lib/sass/scss/script_parser.rb +0 -25
- data/vendor/sass/lib/sass/scss/static_parser.rb +0 -40
- data/vendor/sass/lib/sass/selector.rb +0 -361
- data/vendor/sass/lib/sass/selector/abstract_sequence.rb +0 -62
- data/vendor/sass/lib/sass/selector/comma_sequence.rb +0 -82
- data/vendor/sass/lib/sass/selector/sequence.rb +0 -236
- data/vendor/sass/lib/sass/selector/simple.rb +0 -113
- data/vendor/sass/lib/sass/selector/simple_sequence.rb +0 -135
- data/vendor/sass/lib/sass/shared.rb +0 -78
- data/vendor/sass/lib/sass/tree/comment_node.rb +0 -128
- data/vendor/sass/lib/sass/tree/debug_node.rb +0 -36
- data/vendor/sass/lib/sass/tree/directive_node.rb +0 -75
- data/vendor/sass/lib/sass/tree/extend_node.rb +0 -65
- data/vendor/sass/lib/sass/tree/for_node.rb +0 -67
- data/vendor/sass/lib/sass/tree/if_node.rb +0 -81
- data/vendor/sass/lib/sass/tree/import_node.rb +0 -124
- data/vendor/sass/lib/sass/tree/mixin_def_node.rb +0 -60
- data/vendor/sass/lib/sass/tree/mixin_node.rb +0 -123
- data/vendor/sass/lib/sass/tree/node.rb +0 -490
- data/vendor/sass/lib/sass/tree/prop_node.rb +0 -220
- data/vendor/sass/lib/sass/tree/root_node.rb +0 -125
- data/vendor/sass/lib/sass/tree/rule_node.rb +0 -273
- data/vendor/sass/lib/sass/tree/variable_node.rb +0 -39
- data/vendor/sass/lib/sass/tree/warn_node.rb +0 -42
- data/vendor/sass/lib/sass/tree/while_node.rb +0 -48
- data/vendor/sass/lib/sass/util.rb +0 -700
- data/vendor/sass/lib/sass/util/subset_map.rb +0 -101
- data/vendor/sass/lib/sass/version.rb +0 -109
- data/vendor/sass/rails/init.rb +0 -1
- data/vendor/sass/sass.gemspec +0 -32
- data/vendor/sass/test/sass/cache_test.rb +0 -74
- data/vendor/sass/test/sass/callbacks_test.rb +0 -61
- data/vendor/sass/test/sass/conversion_test.rb +0 -1210
- data/vendor/sass/test/sass/css2sass_test.rb +0 -364
- data/vendor/sass/test/sass/data/hsl-rgb.txt +0 -319
- data/vendor/sass/test/sass/engine_test.rb +0 -2283
- data/vendor/sass/test/sass/extend_test.rb +0 -1348
- data/vendor/sass/test/sass/functions_test.rb +0 -565
- data/vendor/sass/test/sass/importer_test.rb +0 -104
- data/vendor/sass/test/sass/less_conversion_test.rb +0 -632
- data/vendor/sass/test/sass/mock_importer.rb +0 -49
- data/vendor/sass/test/sass/more_results/more1.css +0 -9
- data/vendor/sass/test/sass/more_results/more1_with_line_comments.css +0 -26
- data/vendor/sass/test/sass/more_results/more_import.css +0 -29
- data/vendor/sass/test/sass/more_templates/_more_partial.sass +0 -2
- data/vendor/sass/test/sass/more_templates/more1.sass +0 -23
- data/vendor/sass/test/sass/more_templates/more_import.sass +0 -11
- data/vendor/sass/test/sass/plugin_test.rb +0 -430
- data/vendor/sass/test/sass/results/alt.css +0 -4
- data/vendor/sass/test/sass/results/basic.css +0 -9
- data/vendor/sass/test/sass/results/compact.css +0 -5
- data/vendor/sass/test/sass/results/complex.css +0 -86
- data/vendor/sass/test/sass/results/compressed.css +0 -1
- data/vendor/sass/test/sass/results/expanded.css +0 -19
- data/vendor/sass/test/sass/results/import.css +0 -31
- data/vendor/sass/test/sass/results/line_numbers.css +0 -49
- data/vendor/sass/test/sass/results/mixins.css +0 -95
- data/vendor/sass/test/sass/results/multiline.css +0 -24
- data/vendor/sass/test/sass/results/nested.css +0 -22
- data/vendor/sass/test/sass/results/options.css +0 -1
- data/vendor/sass/test/sass/results/parent_ref.css +0 -13
- data/vendor/sass/test/sass/results/script.css +0 -16
- data/vendor/sass/test/sass/results/scss_import.css +0 -31
- data/vendor/sass/test/sass/results/scss_importee.css +0 -2
- data/vendor/sass/test/sass/results/subdir/nested_subdir/nested_subdir.css +0 -1
- data/vendor/sass/test/sass/results/subdir/subdir.css +0 -3
- data/vendor/sass/test/sass/results/units.css +0 -11
- data/vendor/sass/test/sass/results/warn.css +0 -0
- data/vendor/sass/test/sass/results/warn_imported.css +0 -0
- data/vendor/sass/test/sass/script_conversion_test.rb +0 -254
- data/vendor/sass/test/sass/script_test.rb +0 -470
- data/vendor/sass/test/sass/scss/css_test.rb +0 -897
- data/vendor/sass/test/sass/scss/rx_test.rb +0 -156
- data/vendor/sass/test/sass/scss/scss_test.rb +0 -1088
- data/vendor/sass/test/sass/scss/test_helper.rb +0 -37
- data/vendor/sass/test/sass/templates/_partial.sass +0 -2
- data/vendor/sass/test/sass/templates/alt.sass +0 -16
- data/vendor/sass/test/sass/templates/basic.sass +0 -23
- data/vendor/sass/test/sass/templates/bork1.sass +0 -2
- data/vendor/sass/test/sass/templates/bork2.sass +0 -2
- data/vendor/sass/test/sass/templates/bork3.sass +0 -2
- data/vendor/sass/test/sass/templates/bork4.sass +0 -2
- data/vendor/sass/test/sass/templates/compact.sass +0 -17
- data/vendor/sass/test/sass/templates/complex.sass +0 -305
- data/vendor/sass/test/sass/templates/compressed.sass +0 -15
- data/vendor/sass/test/sass/templates/expanded.sass +0 -17
- data/vendor/sass/test/sass/templates/import.sass +0 -12
- data/vendor/sass/test/sass/templates/importee.less +0 -2
- data/vendor/sass/test/sass/templates/importee.sass +0 -19
- data/vendor/sass/test/sass/templates/line_numbers.sass +0 -13
- data/vendor/sass/test/sass/templates/mixin_bork.sass +0 -5
- data/vendor/sass/test/sass/templates/mixins.sass +0 -76
- data/vendor/sass/test/sass/templates/multiline.sass +0 -20
- data/vendor/sass/test/sass/templates/nested.sass +0 -25
- data/vendor/sass/test/sass/templates/nested_bork1.sass +0 -2
- data/vendor/sass/test/sass/templates/nested_bork2.sass +0 -2
- data/vendor/sass/test/sass/templates/nested_bork3.sass +0 -2
- data/vendor/sass/test/sass/templates/nested_bork4.sass +0 -2
- data/vendor/sass/test/sass/templates/nested_mixin_bork.sass +0 -6
- data/vendor/sass/test/sass/templates/options.sass +0 -2
- data/vendor/sass/test/sass/templates/parent_ref.sass +0 -25
- data/vendor/sass/test/sass/templates/script.sass +0 -101
- data/vendor/sass/test/sass/templates/scss_import.scss +0 -11
- data/vendor/sass/test/sass/templates/scss_importee.scss +0 -1
- data/vendor/sass/test/sass/templates/subdir/nested_subdir/_nested_partial.sass +0 -2
- data/vendor/sass/test/sass/templates/subdir/nested_subdir/nested_subdir.sass +0 -3
- data/vendor/sass/test/sass/templates/subdir/subdir.sass +0 -6
- data/vendor/sass/test/sass/templates/units.sass +0 -11
- data/vendor/sass/test/sass/templates/warn.sass +0 -3
- data/vendor/sass/test/sass/templates/warn_imported.sass +0 -4
- data/vendor/sass/test/sass/test_helper.rb +0 -8
- data/vendor/sass/test/sass/util/subset_map_test.rb +0 -91
- data/vendor/sass/test/sass/util_test.rb +0 -275
- data/vendor/sass/test/test_helper.rb +0 -64
- data/vendor/sass/yard/callbacks.rb +0 -29
- data/vendor/sass/yard/default/fulldoc/html/css/common.sass +0 -26
- data/vendor/sass/yard/default/layout/html/footer.erb +0 -12
- data/vendor/sass/yard/inherited_hash.rb +0 -41
@@ -1,155 +0,0 @@
|
|
1
|
-
# Intro to SCSS for Sass Users
|
2
|
-
|
3
|
-
Sass 3 introduces a new syntax known as SCSS
|
4
|
-
which is fully compatible with the syntax of CSS3,
|
5
|
-
while still supporting the full power of Sass.
|
6
|
-
This means that every valid CSS3 stylesheet
|
7
|
-
is a valid SCSS file with the same meaning.
|
8
|
-
In addition, SCSS understands most CSS hacks
|
9
|
-
and vendor-specific syntax, such as [IE's old `filter` syntax](http://msdn.microsoft.com/en-us/library/ms533754%28VS.85%29.aspx).
|
10
|
-
|
11
|
-
Since SCSS is a CSS extension,
|
12
|
-
everything that works in CSS works in SCSS.
|
13
|
-
This means that for a Sass user to understand it,
|
14
|
-
they need only understand how the Sass extensions work.
|
15
|
-
Most of these, such as variables, parent references, and directives work the same;
|
16
|
-
the only difference is that SCSS requires semicolons
|
17
|
-
and brackets instead of newlines and indentation.
|
18
|
-
For example, a simple rule in Sass:
|
19
|
-
|
20
|
-
#sidebar
|
21
|
-
width: 30%
|
22
|
-
background-color: #faa
|
23
|
-
|
24
|
-
could be converted to SCSS just by adding brackets and semicolons:
|
25
|
-
|
26
|
-
#sidebar {
|
27
|
-
width: 30%;
|
28
|
-
background-color: #faa;
|
29
|
-
}
|
30
|
-
|
31
|
-
In addition, SCSS is completely whitespace-insensitive.
|
32
|
-
That means the above could also be written as:
|
33
|
-
|
34
|
-
#sidebar {width: 30%; background-color: #faa}
|
35
|
-
|
36
|
-
There are some differences that are slightly more complicated.
|
37
|
-
These are detailed below.
|
38
|
-
Note, though, that SCSS uses all the
|
39
|
-
{file:SASS_CHANGELOG.md#3-0-0-syntax-changes syntax changes in Sass 3},
|
40
|
-
so make sure you understand those before going forward.
|
41
|
-
|
42
|
-
## Nested Selectors
|
43
|
-
|
44
|
-
To nest selectors, simply define a new ruleset
|
45
|
-
inside an existing ruleset:
|
46
|
-
|
47
|
-
#sidebar {
|
48
|
-
a { text-decoration: none; }
|
49
|
-
}
|
50
|
-
|
51
|
-
Of course, white space is insignificant
|
52
|
-
and the last trailing semicolon is optional
|
53
|
-
so you can also do it like this:
|
54
|
-
|
55
|
-
#sidebar { a { text-decoration: none } }
|
56
|
-
|
57
|
-
## Nested Properties
|
58
|
-
|
59
|
-
To nest properties,
|
60
|
-
simply create a new property set
|
61
|
-
after an existing property's colon:
|
62
|
-
|
63
|
-
#footer {
|
64
|
-
border: {
|
65
|
-
width: 1px;
|
66
|
-
color: #ccc;
|
67
|
-
style: solid;
|
68
|
-
}
|
69
|
-
}
|
70
|
-
|
71
|
-
This compiles to:
|
72
|
-
|
73
|
-
#footer {
|
74
|
-
border-width: 1px;
|
75
|
-
border-color: #cccccc;
|
76
|
-
border-style: solid; }
|
77
|
-
|
78
|
-
## Mixins
|
79
|
-
|
80
|
-
A mixin is declared with the `@mixin` directive:
|
81
|
-
|
82
|
-
@mixin rounded($amount) {
|
83
|
-
-moz-border-radius: $amount;
|
84
|
-
-webkit-border-radius: $amount;
|
85
|
-
border-radius: $amount;
|
86
|
-
}
|
87
|
-
|
88
|
-
A mixin is used with the `@include` directive:
|
89
|
-
|
90
|
-
.box {
|
91
|
-
border: 3px solid #777;
|
92
|
-
@include rounded(0.5em);
|
93
|
-
}
|
94
|
-
|
95
|
-
This syntax is also available in the indented syntax,
|
96
|
-
although the old `=` and `+` syntax still works.
|
97
|
-
|
98
|
-
This is rather verbose compared to the `=` and `+` characters used in Sass syntax.
|
99
|
-
This is because the SCSS format is designed for CSS compatibility rather than conciseness,
|
100
|
-
and creating new syntax when the CSS directive syntax already exists
|
101
|
-
adds new syntax needlessly and
|
102
|
-
could create incompatibilities with future versions of CSS.
|
103
|
-
|
104
|
-
## Comments
|
105
|
-
|
106
|
-
Like Sass, SCSS supports both comments that are preserved in the CSS output
|
107
|
-
and comments that aren't.
|
108
|
-
However, SCSS's comments are significantly more flexible.
|
109
|
-
It supports standard multiline CSS comments with `/* */`,
|
110
|
-
which are preserved where possible in the output.
|
111
|
-
These comments can have whatever formatting you like;
|
112
|
-
Sass will do its best to format them nicely.
|
113
|
-
|
114
|
-
SCSS also uses `//` for comments that are thrown away, like Sass.
|
115
|
-
Unlike Sass, though, `//` comments in SCSS may appear anywhere
|
116
|
-
and last only until the end of the line.
|
117
|
-
|
118
|
-
For example:
|
119
|
-
|
120
|
-
/* This comment is
|
121
|
-
* several lines long.
|
122
|
-
* since it uses the CSS comment syntax,
|
123
|
-
* it will appear in the CSS output. */
|
124
|
-
body { color: black; }
|
125
|
-
|
126
|
-
// These comments are only one line long each.
|
127
|
-
// They won't appear in the CSS output,
|
128
|
-
// since they use the single-line comment syntax.
|
129
|
-
a { color: green; }
|
130
|
-
|
131
|
-
is compiled to:
|
132
|
-
|
133
|
-
/* This comment is
|
134
|
-
* several lines long.
|
135
|
-
* since it uses the CSS comment syntax,
|
136
|
-
* it will appear in the CSS output. */
|
137
|
-
body {
|
138
|
-
color: black; }
|
139
|
-
|
140
|
-
a {
|
141
|
-
color: green; }
|
142
|
-
|
143
|
-
## `@import`
|
144
|
-
|
145
|
-
The `@import` directive in SCSS functions just like that in Sass,
|
146
|
-
except that it takes a quoted string to import.
|
147
|
-
For example, this Sass:
|
148
|
-
|
149
|
-
@import themes/dark
|
150
|
-
@import font.sass
|
151
|
-
|
152
|
-
would be this SCSS:
|
153
|
-
|
154
|
-
@import "themes/dark";
|
155
|
-
@import "font.sass";
|
data/vendor/sass/ext/extconf.rb
DELETED
@@ -1,13 +0,0 @@
|
|
1
|
-
require 'rubygems'
|
2
|
-
require 'sinatra'
|
3
|
-
require 'json'
|
4
|
-
set :port, 3124
|
5
|
-
set :environment, :production
|
6
|
-
enable :lock
|
7
|
-
Dir.chdir(File.dirname(__FILE__) + "/..")
|
8
|
-
|
9
|
-
post "/" do
|
10
|
-
puts "Recieved payload!"
|
11
|
-
puts "Rev: #{`git name-rev HEAD`.strip}"
|
12
|
-
system %{rake handle_update --trace REF=#{JSON.parse(params["payload"])["ref"].inspect}}
|
13
|
-
end
|
data/vendor/sass/init.rb
DELETED
@@ -1,18 +0,0 @@
|
|
1
|
-
begin
|
2
|
-
require File.join(File.dirname(__FILE__), 'lib', 'sass') # From here
|
3
|
-
rescue LoadError
|
4
|
-
begin
|
5
|
-
require 'sass' # From gem
|
6
|
-
rescue LoadError => e
|
7
|
-
# gems:install may be run to install Haml with the skeleton plugin
|
8
|
-
# but not the gem itself installed.
|
9
|
-
# Don't die if this is the case.
|
10
|
-
raise e unless defined?(Rake) &&
|
11
|
-
(Rake.application.top_level_tasks.include?('gems') ||
|
12
|
-
Rake.application.top_level_tasks.include?('gems:install'))
|
13
|
-
end
|
14
|
-
end
|
15
|
-
|
16
|
-
# Load Sass.
|
17
|
-
# Sass may be undefined if we're running gems:install.
|
18
|
-
require 'sass/plugin' if defined?(Sass)
|
data/vendor/sass/lib/sass.rb
DELETED
@@ -1,71 +0,0 @@
|
|
1
|
-
dir = File.dirname(__FILE__)
|
2
|
-
$LOAD_PATH.unshift dir unless $LOAD_PATH.include?(dir)
|
3
|
-
|
4
|
-
# This is necessary to set so that the Haml code that tries to load Sass
|
5
|
-
# knows that Sass is indeed loading,
|
6
|
-
# even if there's some crazy autoload stuff going on.
|
7
|
-
SASS_BEGUN_TO_LOAD = true unless defined?(SASS_BEGUN_TO_LOAD)
|
8
|
-
|
9
|
-
require 'sass/version'
|
10
|
-
|
11
|
-
# The module that contains everything Sass-related:
|
12
|
-
#
|
13
|
-
# * {Sass::Engine} is the class used to render Sass/SCSS within Ruby code.
|
14
|
-
# * {Sass::Plugin} is interfaces with web frameworks (Rails and Merb in particular).
|
15
|
-
# * {Sass::SyntaxError} is raised when Sass encounters an error.
|
16
|
-
# * {Sass::CSS} handles conversion of CSS to Sass.
|
17
|
-
#
|
18
|
-
# Also see the {file:SASS_REFERENCE.md full Sass reference}.
|
19
|
-
module Sass
|
20
|
-
# Compile a Sass or SCSS string to CSS.
|
21
|
-
# Defaults to SCSS.
|
22
|
-
#
|
23
|
-
# @param contents [String] The contents of the Sass file.
|
24
|
-
# @param options [{Symbol => Object}] An options hash;
|
25
|
-
# see {file:SASS_REFERENCE.md#sass_options the Sass options documentation}
|
26
|
-
# @raise [Sass::SyntaxError] if there's an error in the document
|
27
|
-
# @raise [Encoding::UndefinedConversionError] if the source encoding
|
28
|
-
# cannot be converted to UTF-8
|
29
|
-
# @raise [ArgumentError] if the document uses an unknown encoding with `@charset`
|
30
|
-
def self.compile(contents, options = {})
|
31
|
-
options[:syntax] ||= :scss
|
32
|
-
Engine.new(contents, options).to_css
|
33
|
-
end
|
34
|
-
|
35
|
-
# Compile a file on disk to CSS.
|
36
|
-
#
|
37
|
-
# @param filename [String] The path to the Sass, SCSS, or CSS file on disk.
|
38
|
-
# @param options [{Symbol => Object}] An options hash;
|
39
|
-
# see {file:SASS_REFERENCE.md#sass_options the Sass options documentation}
|
40
|
-
# @raise [Sass::SyntaxError] if there's an error in the document
|
41
|
-
# @raise [Encoding::UndefinedConversionError] if the source encoding
|
42
|
-
# cannot be converted to UTF-8
|
43
|
-
# @raise [ArgumentError] if the document uses an unknown encoding with `@charset`
|
44
|
-
#
|
45
|
-
# @overload compile_file(filename, options = {})
|
46
|
-
# @return [String] The compiled CSS.
|
47
|
-
#
|
48
|
-
# @overload compile_file(filename, css_filename, options = {})
|
49
|
-
# @param css_filename [String] The location to which to write the compiled CSS.
|
50
|
-
def self.compile_file(filename, *args)
|
51
|
-
options = args.last.is_a?(Hash) ? args.pop : {}
|
52
|
-
css_filename ||= args.shift
|
53
|
-
options[:css_filename] = css_filename
|
54
|
-
result = Sass::Engine.for_file(filename, options).render
|
55
|
-
if css_filename
|
56
|
-
open(css_filename,"w") {|css_file| css_file.write(result) }
|
57
|
-
nil
|
58
|
-
else
|
59
|
-
result
|
60
|
-
end
|
61
|
-
end
|
62
|
-
end
|
63
|
-
|
64
|
-
require 'sass/util'
|
65
|
-
|
66
|
-
dir = Sass::Util.scope("vendor/fssm/lib")
|
67
|
-
$LOAD_PATH.unshift dir unless $LOAD_PATH.include?(dir)
|
68
|
-
|
69
|
-
require 'sass/engine'
|
70
|
-
require 'sass/plugin' if defined?(Merb::Plugins)
|
71
|
-
require 'sass/railtie'
|
@@ -1,208 +0,0 @@
|
|
1
|
-
require 'stringio'
|
2
|
-
|
3
|
-
module Sass
|
4
|
-
# An abstract base class for backends for the Sass cache.
|
5
|
-
# Any key-value store can act as such a backend;
|
6
|
-
# it just needs to implement the
|
7
|
-
# \{#_store} and \{#_retrieve} methods.
|
8
|
-
#
|
9
|
-
# To use a cache store with Sass,
|
10
|
-
# use the {file:SASS_REFERENCE.md#cache_store-option `:cache_store` option}.
|
11
|
-
class CacheStore
|
12
|
-
# Store cached contents for later retrieval
|
13
|
-
# Must be implemented by all CacheStore subclasses
|
14
|
-
#
|
15
|
-
# Note: cache contents contain binary data.
|
16
|
-
#
|
17
|
-
# @param key [String] The key to store the contents under
|
18
|
-
# @param version [String] The current sass version.
|
19
|
-
# Cached contents must not be retrieved across different versions of sass.
|
20
|
-
# @param sha [String] The sha of the sass source.
|
21
|
-
# Cached contents must not be retrieved if the sha has changed.
|
22
|
-
# @param contents [String] The contents to store.
|
23
|
-
def _store(key, version, sha, contents)
|
24
|
-
raise "#{self.class} must implement #_store."
|
25
|
-
end
|
26
|
-
|
27
|
-
# Retrieved cached contents.
|
28
|
-
# Must be implemented by all subclasses.
|
29
|
-
#
|
30
|
-
# Note: if the key exists but the sha or version have changed,
|
31
|
-
# then the key may be deleted by the cache store, if it wants to do so.
|
32
|
-
#
|
33
|
-
# @param key [String] The key to retrieve
|
34
|
-
# @param version [String] The current sass version.
|
35
|
-
# Cached contents must not be retrieved across different versions of sass.
|
36
|
-
# @param sha [String] The sha of the sass source.
|
37
|
-
# Cached contents must not be retrieved if the sha has changed.
|
38
|
-
# @return [String] The contents that were previously stored.
|
39
|
-
# @return [NilClass] when the cache key is not found or the version or sha have changed.
|
40
|
-
def _retrieve(key, version, sha)
|
41
|
-
raise "#{self.class} must implement #_retrieve."
|
42
|
-
end
|
43
|
-
|
44
|
-
# Store a {Sass::Tree::RootNode}.
|
45
|
-
#
|
46
|
-
# @param key [String] The key to store it under.
|
47
|
-
# @param sha [String] The checksum for the contents that are being stored.
|
48
|
-
# @param obj [Object] The object to cache.
|
49
|
-
def store(key, sha, root)
|
50
|
-
_store(key, Sass::VERSION, sha, Sass::Util.dump(root))
|
51
|
-
end
|
52
|
-
|
53
|
-
# Retrieve a {Sass::Tree::RootNode}.
|
54
|
-
#
|
55
|
-
# @param key [String] The key the root element was stored under.
|
56
|
-
# @param sha [String] The checksum of the root element's content.
|
57
|
-
# @return [Object] The cached object.
|
58
|
-
def retrieve(key, sha)
|
59
|
-
contents = _retrieve(key, Sass::VERSION, sha)
|
60
|
-
Sass::Util.load(contents) if contents
|
61
|
-
rescue EOFError, TypeError, ArgumentError => e
|
62
|
-
raise
|
63
|
-
Sass::Util.sass_warn "Warning. Error encountered while reading cache #{path_to(key)}: #{e}"
|
64
|
-
end
|
65
|
-
|
66
|
-
# Return the key for the sass file.
|
67
|
-
#
|
68
|
-
# The `(sass_dirname, sass_basename)` pair
|
69
|
-
# should uniquely identify the Sass document,
|
70
|
-
# but otherwise there are no restrictions on their content.
|
71
|
-
#
|
72
|
-
# @param sass_dirname [String]
|
73
|
-
# The fully-expanded location of the Sass file.
|
74
|
-
# This corresponds to the directory name on a filesystem.
|
75
|
-
# @param sass_basename [String] The name of the Sass file that is being referenced.
|
76
|
-
# This corresponds to the basename on a filesystem.
|
77
|
-
def key(sass_dirname, sass_basename)
|
78
|
-
dir = Digest::SHA1.hexdigest(sass_dirname)
|
79
|
-
filename = "#{sass_basename}c"
|
80
|
-
"#{dir}/#{filename}"
|
81
|
-
end
|
82
|
-
end
|
83
|
-
|
84
|
-
# A backend for the Sass cache using the filesystem.
|
85
|
-
class FileCacheStore < CacheStore
|
86
|
-
# The directory where the cached files will be stored.
|
87
|
-
#
|
88
|
-
# @return [String]
|
89
|
-
attr_accessor :cache_location
|
90
|
-
|
91
|
-
# Create a new FileCacheStore.
|
92
|
-
#
|
93
|
-
# @param cache_location [String] see \{#cache\_location}
|
94
|
-
def initialize(cache_location)
|
95
|
-
@cache_location = cache_location
|
96
|
-
end
|
97
|
-
|
98
|
-
# @see {CacheStore#\_retrieve\_}
|
99
|
-
def _retrieve(key, version, sha)
|
100
|
-
return unless File.readable?(path_to(key))
|
101
|
-
contents = nil
|
102
|
-
File.open(path_to(key), "rb") do |f|
|
103
|
-
if f.readline("\n").strip == version && f.readline("\n").strip == sha
|
104
|
-
return f.read
|
105
|
-
end
|
106
|
-
end
|
107
|
-
File.unlink path_to(key)
|
108
|
-
nil
|
109
|
-
rescue EOFError, TypeError, ArgumentError => e
|
110
|
-
Sass::Util.sass_warn "Warning. Error encountered while reading cache #{path_to(key)}: #{e}"
|
111
|
-
end
|
112
|
-
|
113
|
-
# @see {CacheStore#\_store\_}
|
114
|
-
def _store(key, version, sha, contents)
|
115
|
-
return unless File.writable?(File.dirname(@cache_location))
|
116
|
-
return if File.exists?(@cache_location) && !File.writable?(@cache_location)
|
117
|
-
compiled_filename = path_to(key)
|
118
|
-
return if File.exists?(File.dirname(compiled_filename)) && !File.writable?(File.dirname(compiled_filename))
|
119
|
-
return if File.exists?(compiled_filename) && !File.writable?(compiled_filename)
|
120
|
-
FileUtils.mkdir_p(File.dirname(compiled_filename))
|
121
|
-
File.open(compiled_filename, "wb") do |f|
|
122
|
-
f.puts(version)
|
123
|
-
f.puts(sha)
|
124
|
-
f.write(contents)
|
125
|
-
end
|
126
|
-
end
|
127
|
-
|
128
|
-
private
|
129
|
-
|
130
|
-
# Returns the path to a file for the given key.
|
131
|
-
#
|
132
|
-
# @param key [String]
|
133
|
-
# @return [String] The path to the cache file.
|
134
|
-
def path_to(key)
|
135
|
-
File.join(cache_location, key)
|
136
|
-
end
|
137
|
-
end
|
138
|
-
|
139
|
-
# A backend for the Sass cache using in-process memory.
|
140
|
-
class InMemoryCacheStore < CacheStore
|
141
|
-
# Since the {InMemoryCacheStore} is stored in the Sass tree's options hash,
|
142
|
-
# when the options get serialized as part of serializing the tree,
|
143
|
-
# you get crazy exponential growth in the size of the cached objects
|
144
|
-
# unless you don't dump the cache.
|
145
|
-
#
|
146
|
-
# @private
|
147
|
-
def _dump(depth)
|
148
|
-
""
|
149
|
-
end
|
150
|
-
|
151
|
-
# If we deserialize this class, just make a new empty one.
|
152
|
-
#
|
153
|
-
# @private
|
154
|
-
def self._load(repr)
|
155
|
-
InMemoryCacheStore.new
|
156
|
-
end
|
157
|
-
|
158
|
-
# Create a new, empty cache store.
|
159
|
-
def initialize
|
160
|
-
@contents = {}
|
161
|
-
end
|
162
|
-
|
163
|
-
# @see CacheStore#_retrieve
|
164
|
-
def _retrieve(key, version, sha)
|
165
|
-
if @contents.has_key?(key)
|
166
|
-
return unless @contents[key][:version] == version
|
167
|
-
return unless @contents[key][:sha] == sha
|
168
|
-
return @contents[key][:contents]
|
169
|
-
end
|
170
|
-
end
|
171
|
-
|
172
|
-
# @see CacheStore#_store
|
173
|
-
def _store(key, version, sha, contents)
|
174
|
-
@contents[key] = {
|
175
|
-
:version => version,
|
176
|
-
:sha => sha,
|
177
|
-
:contents => contents
|
178
|
-
}
|
179
|
-
end
|
180
|
-
|
181
|
-
# Destructively clear the cache.
|
182
|
-
def reset!
|
183
|
-
@contents = {}
|
184
|
-
end
|
185
|
-
end
|
186
|
-
|
187
|
-
# Doesn't store anything, but records what things it should have stored.
|
188
|
-
# This doesn't currently have any use except for testing and debugging.
|
189
|
-
#
|
190
|
-
# @private
|
191
|
-
class NullCacheStore < CacheStore
|
192
|
-
def initialize
|
193
|
-
@keys = {}
|
194
|
-
end
|
195
|
-
|
196
|
-
def _retrieve(key, version, sha)
|
197
|
-
nil
|
198
|
-
end
|
199
|
-
|
200
|
-
def _store(key, version, sha, contents)
|
201
|
-
@keys[key] = true
|
202
|
-
end
|
203
|
-
|
204
|
-
def was_set?(key)
|
205
|
-
@keys[key]
|
206
|
-
end
|
207
|
-
end
|
208
|
-
end
|