compass 0.8.16
Sign up to get free protection for your applications and to get access to all the features.
- data/CHANGELOG.markdown +551 -0
- data/LICENSE.markdown +29 -0
- data/README.markdown +44 -0
- data/REVISION +1 -0
- data/Rakefile +127 -0
- data/VERSION.yml +4 -0
- data/bin/compass +8 -0
- data/deps.rip +1 -0
- data/examples/README.markdown +4 -0
- data/examples/blueprint_default/config.rb +7 -0
- data/examples/blueprint_default/images/grid.png +0 -0
- data/examples/blueprint_default/index.html.haml +85 -0
- data/examples/blueprint_default/parts/elements.html.haml +282 -0
- data/examples/blueprint_default/parts/forms.html.haml +190 -0
- data/examples/blueprint_default/parts/grid.html.haml +274 -0
- data/examples/blueprint_default/parts/test-small.jpg +0 -0
- data/examples/blueprint_default/parts/test.jpg +0 -0
- data/examples/blueprint_default/parts/valid.png +0 -0
- data/examples/blueprint_default/src/ie.sass +3 -0
- data/examples/blueprint_default/src/images/grid.png +0 -0
- data/examples/blueprint_default/src/print.sass +3 -0
- data/examples/blueprint_default/src/screen.sass +8 -0
- data/examples/blueprint_plugins/config.rb +8 -0
- data/examples/blueprint_plugins/images/buttons/cross.png +0 -0
- data/examples/blueprint_plugins/images/buttons/key.png +0 -0
- data/examples/blueprint_plugins/images/buttons/tick.png +0 -0
- data/examples/blueprint_plugins/images/grid.png +0 -0
- data/examples/blueprint_plugins/images/link_icons/doc.png +0 -0
- data/examples/blueprint_plugins/images/link_icons/email.png +0 -0
- data/examples/blueprint_plugins/images/link_icons/external.png +0 -0
- data/examples/blueprint_plugins/images/link_icons/feed.png +0 -0
- data/examples/blueprint_plugins/images/link_icons/im.png +0 -0
- data/examples/blueprint_plugins/images/link_icons/pdf.png +0 -0
- data/examples/blueprint_plugins/images/link_icons/visited.png +0 -0
- data/examples/blueprint_plugins/images/link_icons/xls.png +0 -0
- data/examples/blueprint_plugins/images/test-small.jpg +0 -0
- data/examples/blueprint_plugins/images/test.jpg +0 -0
- data/examples/blueprint_plugins/images/valid.png +0 -0
- data/examples/blueprint_plugins/index.html.haml +96 -0
- data/examples/blueprint_plugins/plugins/buttons.html.haml +67 -0
- data/examples/blueprint_plugins/plugins/fancy_type.html.haml +100 -0
- data/examples/blueprint_plugins/plugins/link_icons.html.haml +61 -0
- data/examples/blueprint_plugins/plugins/rtl.html.haml +100 -0
- data/examples/blueprint_plugins/src/buttons.sass +49 -0
- data/examples/blueprint_plugins/src/ie.sass +3 -0
- data/examples/blueprint_plugins/src/images/grid.png +0 -0
- data/examples/blueprint_plugins/src/link_icons.sass +13 -0
- data/examples/blueprint_plugins/src/print.sass +3 -0
- data/examples/blueprint_plugins/src/rtl_screen.sass +13 -0
- data/examples/blueprint_plugins/src/screen.sass +11 -0
- data/examples/blueprint_scoped/images/grid.png +0 -0
- data/examples/blueprint_scoped/src/ie.sass +3 -0
- data/examples/blueprint_scoped/src/print.sass +3 -0
- data/examples/blueprint_scoped/src/screen.sass +4 -0
- data/examples/blueprint_scoped_form/images/grid.png +0 -0
- data/examples/blueprint_scoped_form/src/ie.sass +3 -0
- data/examples/blueprint_scoped_form/src/print.sass +3 -0
- data/examples/blueprint_scoped_form/src/screen.sass +10 -0
- data/examples/blueprint_semantic/config.rb +7 -0
- data/examples/blueprint_semantic/images/grid.png +0 -0
- data/examples/blueprint_semantic/index.html.haml +86 -0
- data/examples/blueprint_semantic/parts/fancy_type.html.haml +100 -0
- data/examples/blueprint_semantic/parts/liquid.html.haml +100 -0
- data/examples/blueprint_semantic/parts/test-small.jpg +0 -0
- data/examples/blueprint_semantic/parts/test.jpg +0 -0
- data/examples/blueprint_semantic/parts/valid.png +0 -0
- data/examples/blueprint_semantic/src/ie.sass +3 -0
- data/examples/blueprint_semantic/src/images/grid.png +0 -0
- data/examples/blueprint_semantic/src/liquid.sass +70 -0
- data/examples/blueprint_semantic/src/print.sass +3 -0
- data/examples/blueprint_semantic/src/screen.sass +71 -0
- data/examples/compass/compass.html.haml +39 -0
- data/examples/compass/config.rb +7 -0
- data/examples/compass/images/blue_arrow.gif +0 -0
- data/examples/compass/src/compass.sass +47 -0
- data/examples/compass/src/images/blue_arrow.gif +0 -0
- data/examples/compass/src/sticky_footer.sass +11 -0
- data/examples/compass/src/utilities.sass +108 -0
- data/examples/compass/sticky_footer.html.haml +14 -0
- data/examples/compass/utilities.html.haml +189 -0
- data/examples/logo/logo.html.haml +40 -0
- data/examples/logo/src/ie.sass +6 -0
- data/examples/logo/src/print.sass +6 -0
- data/examples/logo/src/screen.sass +29 -0
- data/examples/yui/divisions.html.haml +179 -0
- data/examples/yui/index.html.haml +19 -0
- data/examples/yui/src/screen.sass +13 -0
- data/examples/yui/sub_divisions.html.haml +169 -0
- data/examples/yui/templates.html.haml +54 -0
- data/examples/yui/test.jpg +0 -0
- data/examples/yui/typography.html.haml +132 -0
- data/frameworks/blueprint.rb +2 -0
- data/frameworks/blueprint/stylesheets/_blueprint.sass +3 -0
- data/frameworks/blueprint/stylesheets/blueprint/_ie.sass +93 -0
- data/frameworks/blueprint/stylesheets/blueprint/_print.sass +83 -0
- data/frameworks/blueprint/stylesheets/blueprint/_reset.sass +3 -0
- data/frameworks/blueprint/stylesheets/blueprint/_screen.sass +15 -0
- data/frameworks/blueprint/stylesheets/blueprint/modules/_buttons.sass +84 -0
- data/frameworks/blueprint/stylesheets/blueprint/modules/_colors.sass +33 -0
- data/frameworks/blueprint/stylesheets/blueprint/modules/_debug.sass +9 -0
- data/frameworks/blueprint/stylesheets/blueprint/modules/_fancy_type.sass +82 -0
- data/frameworks/blueprint/stylesheets/blueprint/modules/_form.sass +55 -0
- data/frameworks/blueprint/stylesheets/blueprint/modules/_grid.sass +178 -0
- data/frameworks/blueprint/stylesheets/blueprint/modules/_interaction.sass +58 -0
- data/frameworks/blueprint/stylesheets/blueprint/modules/_link_icons.sass +44 -0
- data/frameworks/blueprint/stylesheets/blueprint/modules/_liquid.sass +141 -0
- data/frameworks/blueprint/stylesheets/blueprint/modules/_reset.sass +56 -0
- data/frameworks/blueprint/stylesheets/blueprint/modules/_rtl.sass +104 -0
- data/frameworks/blueprint/stylesheets/blueprint/modules/_scaffolding.sass +47 -0
- data/frameworks/blueprint/stylesheets/blueprint/modules/_typography.sass +155 -0
- data/frameworks/blueprint/stylesheets/blueprint/modules/_utilities.sass +37 -0
- data/frameworks/blueprint/templates/buttons/buttons.sass +49 -0
- data/frameworks/blueprint/templates/buttons/buttons/cross.png +0 -0
- data/frameworks/blueprint/templates/buttons/buttons/key.png +0 -0
- data/frameworks/blueprint/templates/buttons/buttons/tick.png +0 -0
- data/frameworks/blueprint/templates/buttons/manifest.rb +5 -0
- data/frameworks/blueprint/templates/link_icons/link_icons.sass +13 -0
- data/frameworks/blueprint/templates/link_icons/link_icons/doc.png +0 -0
- data/frameworks/blueprint/templates/link_icons/link_icons/email.png +0 -0
- data/frameworks/blueprint/templates/link_icons/link_icons/external.png +0 -0
- data/frameworks/blueprint/templates/link_icons/link_icons/feed.png +0 -0
- data/frameworks/blueprint/templates/link_icons/link_icons/im.png +0 -0
- data/frameworks/blueprint/templates/link_icons/link_icons/pdf.png +0 -0
- data/frameworks/blueprint/templates/link_icons/link_icons/visited.png +0 -0
- data/frameworks/blueprint/templates/link_icons/link_icons/xls.png +0 -0
- data/frameworks/blueprint/templates/link_icons/manifest.rb +10 -0
- data/frameworks/blueprint/templates/project/grid.png +0 -0
- data/frameworks/blueprint/templates/project/ie.sass +15 -0
- data/frameworks/blueprint/templates/project/manifest.rb +6 -0
- data/frameworks/blueprint/templates/project/partials/_base.sass +11 -0
- data/frameworks/blueprint/templates/project/print.sass +3 -0
- data/frameworks/blueprint/templates/project/screen.sass +40 -0
- data/frameworks/compass.rb +2 -0
- data/frameworks/compass/stylesheets/_compass.sass +1 -0
- data/frameworks/compass/stylesheets/compass/_layout.sass +1 -0
- data/frameworks/compass/stylesheets/compass/_misc.sass +24 -0
- data/frameworks/compass/stylesheets/compass/_reset.sass +3 -0
- data/frameworks/compass/stylesheets/compass/_utilities.sass +6 -0
- data/frameworks/compass/stylesheets/compass/layout/_sticky_footer.sass +17 -0
- data/frameworks/compass/stylesheets/compass/utilities/_general.sass +6 -0
- data/frameworks/compass/stylesheets/compass/utilities/_links.sass +3 -0
- data/frameworks/compass/stylesheets/compass/utilities/_lists.sass +3 -0
- data/frameworks/compass/stylesheets/compass/utilities/_print.sass +24 -0
- data/frameworks/compass/stylesheets/compass/utilities/_sprites.sass +1 -0
- data/frameworks/compass/stylesheets/compass/utilities/_tables.sass +3 -0
- data/frameworks/compass/stylesheets/compass/utilities/_text.sass +2 -0
- data/frameworks/compass/stylesheets/compass/utilities/general/_clearfix.sass +24 -0
- data/frameworks/compass/stylesheets/compass/utilities/general/_float.sass +17 -0
- data/frameworks/compass/stylesheets/compass/utilities/general/_hacks.sass +6 -0
- data/frameworks/compass/stylesheets/compass/utilities/general/_inline_block.sass +6 -0
- data/frameworks/compass/stylesheets/compass/utilities/general/_reset.sass +134 -0
- data/frameworks/compass/stylesheets/compass/utilities/general/_tabs.sass +0 -0
- data/frameworks/compass/stylesheets/compass/utilities/general/_tag_cloud.sass +19 -0
- data/frameworks/compass/stylesheets/compass/utilities/links/_hover_link.sass +5 -0
- data/frameworks/compass/stylesheets/compass/utilities/links/_link_colors.sass +24 -0
- data/frameworks/compass/stylesheets/compass/utilities/links/_unstyled_link.sass +5 -0
- data/frameworks/compass/stylesheets/compass/utilities/lists/_bullets.sass +21 -0
- data/frameworks/compass/stylesheets/compass/utilities/lists/_horizontal_list.sass +52 -0
- data/frameworks/compass/stylesheets/compass/utilities/lists/_inline_list.sass +29 -0
- data/frameworks/compass/stylesheets/compass/utilities/sprites/_sprite_img.sass +12 -0
- data/frameworks/compass/stylesheets/compass/utilities/tables/_alternating_rows_and_columns.sass +20 -0
- data/frameworks/compass/stylesheets/compass/utilities/tables/_borders.sass +27 -0
- data/frameworks/compass/stylesheets/compass/utilities/tables/_scaffolding.sass +9 -0
- data/frameworks/compass/stylesheets/compass/utilities/text/_ellipsis.sass +13 -0
- data/frameworks/compass/stylesheets/compass/utilities/text/_nowrap.sass +3 -0
- data/frameworks/compass/stylesheets/compass/utilities/text/_replacement.sass +17 -0
- data/frameworks/compass/templates/ellipsis/ellipsis.sass +6 -0
- data/frameworks/compass/templates/ellipsis/manifest.rb +2 -0
- data/frameworks/compass/templates/ellipsis/xml/ellipsis.xml +14 -0
- data/frameworks/compass/templates/project/ie.sass +6 -0
- data/frameworks/compass/templates/project/manifest.rb +3 -0
- data/frameworks/compass/templates/project/print.sass +6 -0
- data/frameworks/compass/templates/project/screen.sass +13 -0
- data/frameworks/yui.rb +2 -0
- data/frameworks/yui/stylesheets/_yui.sass +7 -0
- data/frameworks/yui/stylesheets/yui/modules/_base.sass +60 -0
- data/frameworks/yui/stylesheets/yui/modules/_fonts.sass +38 -0
- data/frameworks/yui/stylesheets/yui/modules/_grids.sass +341 -0
- data/frameworks/yui/stylesheets/yui/modules/_reset.sass +61 -0
- data/frameworks/yui/templates/project/manifest.rb +1 -0
- data/frameworks/yui/templates/project/screen.sass +4 -0
- data/lib/compass.rb +23 -0
- data/lib/compass/actions.rb +110 -0
- data/lib/compass/app_integration.rb +5 -0
- data/lib/compass/app_integration/merb.rb +43 -0
- data/lib/compass/app_integration/rails.rb +12 -0
- data/lib/compass/app_integration/rails/action_controller.rb +15 -0
- data/lib/compass/app_integration/rails/sass_plugin.rb +5 -0
- data/lib/compass/app_integration/rails/templates/compass-install-rails.rb +80 -0
- data/lib/compass/app_integration/rails/urls.rb +14 -0
- data/lib/compass/commands/base.rb +33 -0
- data/lib/compass/commands/create_project.rb +19 -0
- data/lib/compass/commands/generate_grid_background.rb +24 -0
- data/lib/compass/commands/installer_command.rb +31 -0
- data/lib/compass/commands/list_frameworks.rb +16 -0
- data/lib/compass/commands/print_version.rb +23 -0
- data/lib/compass/commands/project_base.rb +112 -0
- data/lib/compass/commands/stamp_pattern.rb +33 -0
- data/lib/compass/commands/update_project.rb +34 -0
- data/lib/compass/commands/validate_project.rb +21 -0
- data/lib/compass/commands/watch_project.rb +64 -0
- data/lib/compass/commands/write_configuration.rb +28 -0
- data/lib/compass/compiler.rb +54 -0
- data/lib/compass/configuration.rb +324 -0
- data/lib/compass/core_ext.rb +14 -0
- data/lib/compass/dependencies.rb +10 -0
- data/lib/compass/errors.rb +7 -0
- data/lib/compass/exec.rb +251 -0
- data/lib/compass/frameworks.rb +29 -0
- data/lib/compass/grid_builder.rb +72 -0
- data/lib/compass/installers.rb +5 -0
- data/lib/compass/installers/base.rb +158 -0
- data/lib/compass/installers/manifest.rb +58 -0
- data/lib/compass/installers/rails.rb +135 -0
- data/lib/compass/installers/stand_alone.rb +60 -0
- data/lib/compass/logger.rb +42 -0
- data/lib/compass/sass_extensions.rb +5 -0
- data/lib/compass/sass_extensions/functions.rb +19 -0
- data/lib/compass/sass_extensions/functions/display.rb +22 -0
- data/lib/compass/sass_extensions/functions/enumerate.rb +6 -0
- data/lib/compass/sass_extensions/functions/inline_image.rb +35 -0
- data/lib/compass/sass_extensions/functions/selectors.rb +39 -0
- data/lib/compass/sass_extensions/functions/urls.rb +105 -0
- data/lib/compass/sass_extensions/monkey_patches.rb +3 -0
- data/lib/compass/sass_extensions/monkey_patches/stylesheet_updating.rb +23 -0
- data/lib/compass/test_case.rb +38 -0
- data/lib/compass/validator.rb +10 -0
- data/lib/compass/version.rb +57 -0
- data/lib/vendor/fssm.rb +41 -0
- data/lib/vendor/fssm/backends/fsevents.rb +37 -0
- data/lib/vendor/fssm/backends/polling.rb +26 -0
- data/lib/vendor/fssm/cache.rb +193 -0
- data/lib/vendor/fssm/ext.rb +37 -0
- data/lib/vendor/fssm/fsevents.rb +129 -0
- data/lib/vendor/fssm/monitor.rb +25 -0
- data/lib/vendor/fssm/path.rb +91 -0
- data/lib/vendor/fssm/state.rb +54 -0
- data/lib/vendor/fssm/support.rb +22 -0
- data/lib/vendor/fssm/tree.rb +176 -0
- data/test/command_line_helper.rb +102 -0
- data/test/command_line_test.rb +66 -0
- data/test/compass_test.rb +141 -0
- data/test/configuration_test.rb +118 -0
- data/test/fixtures/stylesheets/blueprint/config.rb +9 -0
- data/test/fixtures/stylesheets/blueprint/css/typography.css +158 -0
- data/test/fixtures/stylesheets/blueprint/images/grid.png +0 -0
- data/test/fixtures/stylesheets/blueprint/sass/ie.sass +3 -0
- data/test/fixtures/stylesheets/blueprint/sass/print.sass +3 -0
- data/test/fixtures/stylesheets/blueprint/sass/screen.sass +17 -0
- data/test/fixtures/stylesheets/blueprint/sass/typography.sass +3 -0
- data/test/fixtures/stylesheets/compass/config.rb +9 -0
- data/test/fixtures/stylesheets/compass/css/layout.css +13 -0
- data/test/fixtures/stylesheets/compass/css/print.css +18 -0
- data/test/fixtures/stylesheets/compass/css/reset.css +60 -0
- data/test/fixtures/stylesheets/compass/css/utilities.css +17 -0
- data/test/fixtures/stylesheets/compass/sass/layout.sass +3 -0
- data/test/fixtures/stylesheets/compass/sass/print.sass +5 -0
- data/test/fixtures/stylesheets/compass/sass/reset.sass +10 -0
- data/test/fixtures/stylesheets/compass/sass/utilities.sass +6 -0
- data/test/fixtures/stylesheets/image_urls/config.rb +17 -0
- data/test/fixtures/stylesheets/image_urls/css/screen.css +3 -0
- data/test/fixtures/stylesheets/image_urls/images/grid.png +0 -0
- data/test/fixtures/stylesheets/image_urls/sass/screen.sass +6 -0
- data/test/fixtures/stylesheets/yui/config.rb +9 -0
- data/test/fixtures/stylesheets/yui/css/mixins.css +13 -0
- data/test/fixtures/stylesheets/yui/sass/base.sass +3 -0
- data/test/fixtures/stylesheets/yui/sass/fonts.sass +3 -0
- data/test/fixtures/stylesheets/yui/sass/grids.sass +3 -0
- data/test/fixtures/stylesheets/yui/sass/mixins.sass +16 -0
- data/test/rails_integration_test.rb +83 -0
- data/test/sass_extensions_test.rb +31 -0
- data/test/test_case_helper.rb +13 -0
- data/test/test_helper.rb +21 -0
- data/test/test_rails_helper.rb +20 -0
- metadata +372 -0
@@ -0,0 +1,58 @@
|
|
1
|
+
module Compass
|
2
|
+
module Installers
|
3
|
+
|
4
|
+
class Manifest
|
5
|
+
include Enumerable
|
6
|
+
|
7
|
+
# A Manifest entry
|
8
|
+
class Entry < Struct.new(:type, :from, :options)
|
9
|
+
def to
|
10
|
+
options[:to] || from
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
def initialize(manifest_file = nil)
|
15
|
+
@entries = []
|
16
|
+
parse(manifest_file) if manifest_file
|
17
|
+
end
|
18
|
+
|
19
|
+
def self.type(t)
|
20
|
+
eval <<-END
|
21
|
+
def #{t}(from, options = {})
|
22
|
+
@entries << Entry.new(:#{t}, from, options)
|
23
|
+
end
|
24
|
+
def has_#{t}?
|
25
|
+
@entries.detect {|e| e.type == :#{t}}
|
26
|
+
end
|
27
|
+
def each_#{t}
|
28
|
+
@entries.select {|e| e.type == :#{t}}.each {|e| yield e}
|
29
|
+
end
|
30
|
+
END
|
31
|
+
end
|
32
|
+
|
33
|
+
type :stylesheet
|
34
|
+
type :image
|
35
|
+
type :javascript
|
36
|
+
type :file
|
37
|
+
|
38
|
+
# Enumerates over the manifest files
|
39
|
+
def each
|
40
|
+
@entries.each {|e| yield e}
|
41
|
+
end
|
42
|
+
|
43
|
+
|
44
|
+
protected
|
45
|
+
# parses a manifest file which is a ruby script
|
46
|
+
# evaluated in a Manifest instance context
|
47
|
+
def parse(manifest_file)
|
48
|
+
open(manifest_file) do |f|
|
49
|
+
eval(f.read, instance_binding, manifest_file)
|
50
|
+
end
|
51
|
+
end
|
52
|
+
def instance_binding
|
53
|
+
binding
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|
57
|
+
end
|
58
|
+
end
|
@@ -0,0 +1,135 @@
|
|
1
|
+
module Compass
|
2
|
+
module Installers
|
3
|
+
|
4
|
+
class RailsInstaller < Base
|
5
|
+
|
6
|
+
def configuration_defaults
|
7
|
+
{
|
8
|
+
:sass_dir => (sass_dir || prompt_sass_dir),
|
9
|
+
:css_dir => (css_dir || prompt_css_dir),
|
10
|
+
:images_dir => default_images_dir,
|
11
|
+
:javascripts_dir => default_javascripts_dir,
|
12
|
+
:http_stylesheets_path => default_http_stylesheets_path,
|
13
|
+
:http_javascripts_path => default_http_javascripts_path,
|
14
|
+
:http_images_path => default_http_images_path
|
15
|
+
}
|
16
|
+
end
|
17
|
+
|
18
|
+
def write_configuration_files(config_file = nil)
|
19
|
+
config_file ||= targetize('config/compass.config')
|
20
|
+
write_file config_file, config_contents
|
21
|
+
write_file targetize('config/initializers/compass.rb'), initializer_contents
|
22
|
+
end
|
23
|
+
|
24
|
+
def config_files_exist?
|
25
|
+
File.exists?(targetize('config/compass.config')) &&
|
26
|
+
File.exists?(targetize('config/initializers/compass.rb'))
|
27
|
+
end
|
28
|
+
|
29
|
+
def prepare
|
30
|
+
write_configuration_files unless config_files_exist?
|
31
|
+
end
|
32
|
+
|
33
|
+
def finalize(options = {})
|
34
|
+
if options[:create]
|
35
|
+
puts <<-NEXTSTEPS
|
36
|
+
|
37
|
+
Congratulations! Your rails project has been configured to use Compass.
|
38
|
+
Sass will automatically compile your stylesheets during the next
|
39
|
+
page request and keep them up to date when they change.
|
40
|
+
Make sure you restart your server!
|
41
|
+
NEXTSTEPS
|
42
|
+
end
|
43
|
+
puts "\nNext add these lines to the head of your layouts:\n\n"
|
44
|
+
puts stylesheet_links
|
45
|
+
puts "\n(You are using haml, aren't you?)"
|
46
|
+
end
|
47
|
+
|
48
|
+
def default_images_dir
|
49
|
+
separate("public/images")
|
50
|
+
end
|
51
|
+
|
52
|
+
def default_javascripts_dir
|
53
|
+
separate("public/javascripts")
|
54
|
+
end
|
55
|
+
|
56
|
+
def default_http_images_path
|
57
|
+
"/images"
|
58
|
+
end
|
59
|
+
|
60
|
+
def default_http_javascripts_path
|
61
|
+
"/javascripts"
|
62
|
+
end
|
63
|
+
|
64
|
+
def default_http_stylesheets_path
|
65
|
+
"/stylesheets"
|
66
|
+
end
|
67
|
+
|
68
|
+
def prompt_sass_dir
|
69
|
+
recommended_location = separate('app/stylesheets')
|
70
|
+
default_location = separate('public/stylesheets/sass')
|
71
|
+
print %Q{Compass recommends that you keep your stylesheets in #{recommended_location}
|
72
|
+
instead of the Sass default location of #{default_location}.
|
73
|
+
Is this OK? (Y/n) }
|
74
|
+
answer = gets.downcase[0]
|
75
|
+
answer == ?n ? default_location : recommended_location
|
76
|
+
end
|
77
|
+
|
78
|
+
def prompt_css_dir
|
79
|
+
recommended_location = separate("public/stylesheets/compiled")
|
80
|
+
default_location = separate("public/stylesheets")
|
81
|
+
puts
|
82
|
+
print %Q{Compass recommends that you keep your compiled css in #{recommended_location}/
|
83
|
+
instead the Sass default of #{default_location}/.
|
84
|
+
However, if you're exclusively using Sass, then #{default_location}/ is recommended.
|
85
|
+
Emit compiled stylesheets to #{recommended_location}/? (Y/n) }
|
86
|
+
answer = gets.downcase[0]
|
87
|
+
answer == ?n ? default_location : recommended_location
|
88
|
+
end
|
89
|
+
|
90
|
+
def config_contents
|
91
|
+
Compass.configuration.serialize do |prop, value|
|
92
|
+
if prop == :project_path
|
93
|
+
"project_path = RAILS_ROOT if defined?(RAILS_ROOT)\n"
|
94
|
+
elsif prop == :output_style
|
95
|
+
""
|
96
|
+
end
|
97
|
+
end
|
98
|
+
end
|
99
|
+
|
100
|
+
def initializer_contents
|
101
|
+
%Q{require 'compass'
|
102
|
+
# If you have any compass plugins, require them here.
|
103
|
+
Compass.configuration.parse(File.join(RAILS_ROOT, "config", "compass.config"))
|
104
|
+
Compass.configuration.environment = RAILS_ENV.to_sym
|
105
|
+
Compass.configure_sass_plugin!
|
106
|
+
}
|
107
|
+
end
|
108
|
+
|
109
|
+
def stylesheet_prefix
|
110
|
+
if css_dir.length >= 19
|
111
|
+
"#{css_dir[19..-1]}/"
|
112
|
+
else
|
113
|
+
nil
|
114
|
+
end
|
115
|
+
end
|
116
|
+
|
117
|
+
def stylesheet_links
|
118
|
+
html = "%head\n"
|
119
|
+
manifest.each_stylesheet do |stylesheet|
|
120
|
+
# Skip partials.
|
121
|
+
next if File.basename(stylesheet.from)[0..0] == "_"
|
122
|
+
ss_line = " = stylesheet_link_tag '#{stylesheet_prefix}#{stylesheet.to.sub(/\.sass$/,'.css')}'"
|
123
|
+
if stylesheet.options[:media]
|
124
|
+
ss_line += ", :media => '#{stylesheet.options[:media]}'"
|
125
|
+
end
|
126
|
+
if stylesheet.options[:condition]
|
127
|
+
ss_line = " /[if #{stylesheet.options[:condition]}]\n " + ss_line
|
128
|
+
end
|
129
|
+
html << ss_line + "\n"
|
130
|
+
end
|
131
|
+
html
|
132
|
+
end
|
133
|
+
end
|
134
|
+
end
|
135
|
+
end
|
@@ -0,0 +1,60 @@
|
|
1
|
+
module Compass
|
2
|
+
module Installers
|
3
|
+
|
4
|
+
class StandAloneInstaller < Base
|
5
|
+
|
6
|
+
def init
|
7
|
+
directory targetize("")
|
8
|
+
super
|
9
|
+
end
|
10
|
+
|
11
|
+
def write_configuration_files(config_file = nil)
|
12
|
+
config_file ||= targetize('config.rb')
|
13
|
+
write_file config_file, config_contents
|
14
|
+
end
|
15
|
+
|
16
|
+
def config_files_exist?
|
17
|
+
File.exists? targetize('config.rb')
|
18
|
+
end
|
19
|
+
|
20
|
+
def config_contents
|
21
|
+
project_path, Compass.configuration.project_path = Compass.configuration.project_path, nil
|
22
|
+
Compass.configuration.serialize
|
23
|
+
ensure
|
24
|
+
Compass.configuration.project_path = project_path
|
25
|
+
end
|
26
|
+
|
27
|
+
def prepare
|
28
|
+
write_configuration_files unless config_files_exist?
|
29
|
+
end
|
30
|
+
|
31
|
+
# We want to rely on the defaults provided by Configuration
|
32
|
+
def configuration_defaults
|
33
|
+
{}
|
34
|
+
end
|
35
|
+
|
36
|
+
def finalize(options = {})
|
37
|
+
if options[:create]
|
38
|
+
puts <<-NEXTSTEPS
|
39
|
+
|
40
|
+
Congratulations! Your compass project has been created.
|
41
|
+
You must recompile your sass stylesheets when they change.
|
42
|
+
This can be done in one of the following ways:
|
43
|
+
1. From within your project directory run:
|
44
|
+
compass
|
45
|
+
2. From any directory run:
|
46
|
+
compass -u path/to/project
|
47
|
+
3. To monitor your project for changes and automatically recompile:
|
48
|
+
compass --watch [path/to/project]
|
49
|
+
NEXTSTEPS
|
50
|
+
end
|
51
|
+
puts "\nTo import your new stylesheets add the following lines of HTML (or equivalent) to your webpage:"
|
52
|
+
puts stylesheet_links
|
53
|
+
end
|
54
|
+
|
55
|
+
def compilation_required?
|
56
|
+
true
|
57
|
+
end
|
58
|
+
end
|
59
|
+
end
|
60
|
+
end
|
@@ -0,0 +1,42 @@
|
|
1
|
+
module Compass
|
2
|
+
class Logger
|
3
|
+
|
4
|
+
DEFAULT_ACTIONS = [:directory, :exists, :remove, :create, :overwrite, :compile]
|
5
|
+
|
6
|
+
attr_accessor :actions, :options
|
7
|
+
|
8
|
+
def initialize(*actions)
|
9
|
+
self.options = actions.last.is_a?(Hash) ? actions.pop : {}
|
10
|
+
@actions = DEFAULT_ACTIONS.dup
|
11
|
+
@actions += actions
|
12
|
+
end
|
13
|
+
|
14
|
+
# Record an action that has occurred
|
15
|
+
def record(action, *arguments)
|
16
|
+
log "#{action_padding(action)}#{action} #{arguments.join(' ')}"
|
17
|
+
end
|
18
|
+
|
19
|
+
# Emit a log message
|
20
|
+
def log(msg)
|
21
|
+
puts msg
|
22
|
+
end
|
23
|
+
|
24
|
+
# add padding to the left of an action that was performed.
|
25
|
+
def action_padding(action)
|
26
|
+
' ' * [(max_action_length - action.to_s.length), 0].max
|
27
|
+
end
|
28
|
+
|
29
|
+
# the maximum length of all the actions known to the logger.
|
30
|
+
def max_action_length
|
31
|
+
@max_action_length ||= actions.inject(0){|memo, a| [memo, a.to_s.length].max}
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
class NullLogger
|
36
|
+
def record(*args)
|
37
|
+
end
|
38
|
+
|
39
|
+
def log(msg)
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
module Compass::SassExtensions::Functions
|
2
|
+
end
|
3
|
+
|
4
|
+
['selectors', 'enumerate', 'urls', 'display', 'inline_image'].each do |func|
|
5
|
+
require File.join(File.dirname(__FILE__), 'functions', func)
|
6
|
+
end
|
7
|
+
|
8
|
+
module Sass::Script::Functions
|
9
|
+
include Compass::SassExtensions::Functions::Selectors
|
10
|
+
include Compass::SassExtensions::Functions::Enumerate
|
11
|
+
include Compass::SassExtensions::Functions::Urls
|
12
|
+
include Compass::SassExtensions::Functions::Display
|
13
|
+
include Compass::SassExtensions::Functions::InlineImage
|
14
|
+
end
|
15
|
+
|
16
|
+
# Wierd that this has to be re-included to pick up sub-modules. Ruby bug?
|
17
|
+
class Sass::Script::Functions::EvaluationContext
|
18
|
+
include Sass::Script::Functions
|
19
|
+
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
module Compass::SassExtensions::Functions::Display
|
2
|
+
DEFAULT_DISPLAY = {
|
3
|
+
:block => %w{address blockquote center dir div dd dl dt fieldset form
|
4
|
+
frameset h1 h2 h3 h4 h5 h6 hr isindex menu noframes
|
5
|
+
noscript ol p pre ul},
|
6
|
+
:inline => %w{a abbr acronym b basefont bdo big br cite code dfn em
|
7
|
+
font i img input kbd label q s samp select small span
|
8
|
+
strike strong sub sup textarea tt u var},
|
9
|
+
:table => %w{table},
|
10
|
+
:"list-item" => %w{li},
|
11
|
+
:"table-row-group" => %w{tbody},
|
12
|
+
:"table-header-group" => %w{thead},
|
13
|
+
:"table-footer-group" => %w{tfoot},
|
14
|
+
:"table-row" => %w{tr},
|
15
|
+
:"table-cell" => %w{th td}
|
16
|
+
}
|
17
|
+
|
18
|
+
# returns a comma delimited string for all the elements according to their default css3 display value.
|
19
|
+
def elements_of_type(display)
|
20
|
+
Sass::Script::String.new(DEFAULT_DISPLAY.fetch(display.value.to_sym).join(", "))
|
21
|
+
end
|
22
|
+
end
|
@@ -0,0 +1,35 @@
|
|
1
|
+
require 'base64'
|
2
|
+
module Compass::SassExtensions::Functions::InlineImage
|
3
|
+
|
4
|
+
def inline_image(path, mime_type = nil)
|
5
|
+
path = path.value
|
6
|
+
real_path = File.join(Compass.configuration.project_path, Compass.configuration.images_dir, path)
|
7
|
+
url = "url('data:#{compute_mime_type(path,mime_type)};base64,#{data(real_path)}')"
|
8
|
+
Sass::Script::String.new(url)
|
9
|
+
end
|
10
|
+
|
11
|
+
private
|
12
|
+
def compute_mime_type(path, mime_type)
|
13
|
+
return mime_type if mime_type
|
14
|
+
case path
|
15
|
+
when /\.png$/i
|
16
|
+
'image/png'
|
17
|
+
when /\.jpe?g$/i
|
18
|
+
'image/jpeg'
|
19
|
+
when /\.gif$/i
|
20
|
+
'image/gif'
|
21
|
+
when /\.([a-zA-Z]+)$/
|
22
|
+
"image/#{Regexp.last_match(1).downcase}"
|
23
|
+
else
|
24
|
+
raise Compass::Error, "A mime type could not be determined for #{path}, please specify one explicitly."
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
def data(real_path)
|
29
|
+
if File.readable?(real_path)
|
30
|
+
Base64.encode64(File.read(real_path)).gsub("\n","")
|
31
|
+
else
|
32
|
+
raise Compass::Error, "File not found or cannot be read: #{real_path}"
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
@@ -0,0 +1,39 @@
|
|
1
|
+
module Compass::SassExtensions::Functions::Selectors
|
2
|
+
COMMA_SEPARATOR = /\s*,\s*/
|
3
|
+
|
4
|
+
# Permute multiple selectors each of which may be comma delimited, the end result is
|
5
|
+
# a new selector that is the equivalent of nesting each under the previous selector.
|
6
|
+
# To illustrate, the following mixins are equivalent:
|
7
|
+
# =mixin-a(!selector1, !selector2, !selector3)
|
8
|
+
# #{!selector1}
|
9
|
+
# #{selector2}
|
10
|
+
# #{selector3}
|
11
|
+
# width: 2px
|
12
|
+
# =mixin-b(!selector1, !selector2)
|
13
|
+
# #{nest(!selector, !selector2, !selector3)}
|
14
|
+
# width: 2px
|
15
|
+
def nest(*arguments)
|
16
|
+
nested = arguments.map{|a| a.value}.inject do |memo,arg|
|
17
|
+
ancestors = memo.split(COMMA_SEPARATOR)
|
18
|
+
descendants = arg.split(COMMA_SEPARATOR)
|
19
|
+
ancestors.map{|a| descendants.map{|d| "#{a} #{d}"}.join(", ")}.join(", ")
|
20
|
+
end
|
21
|
+
Sass::Script::String.new(nested)
|
22
|
+
end
|
23
|
+
|
24
|
+
# Permute two selectors, the first may be comma delimited.
|
25
|
+
# The end result is a new selector that is the equivalent of nesting the second
|
26
|
+
# selector under the first one in a sass file and preceding it with an &.
|
27
|
+
# To illustrate, the following mixins are equivalent:
|
28
|
+
# =mixin-a(!selector, !to_append)
|
29
|
+
# #{!selector}
|
30
|
+
# &#{!to_append}
|
31
|
+
# width: 2px
|
32
|
+
# =mixin-b(!selector, !to_append)
|
33
|
+
# #{append_selector(!selector, !to_append)}
|
34
|
+
# width: 2px
|
35
|
+
def append_selector(selector, to_append)
|
36
|
+
Sass::Script::String.new(selector.value.split(COMMA_SEPARATOR).map{|s| "#{s}#{to_append}"}.join(", "))
|
37
|
+
end
|
38
|
+
|
39
|
+
end
|
@@ -0,0 +1,105 @@
|
|
1
|
+
module Compass::SassExtensions::Functions::Urls
|
2
|
+
|
3
|
+
def stylesheet_url(path)
|
4
|
+
# Compute the path to the stylesheet, either root relative or stylesheet relative
|
5
|
+
# or nil if the http_images_path is not set in the configuration.
|
6
|
+
http_stylesheets_path = if relative?
|
7
|
+
compute_relative_path(Compass.configuration.css_dir)
|
8
|
+
elsif Compass.configuration.http_stylesheets_path
|
9
|
+
Compass.configuration.http_stylesheets_path
|
10
|
+
else
|
11
|
+
Compass.configuration.root_relative(Compass.configuration.css_dir)
|
12
|
+
end
|
13
|
+
|
14
|
+
url("#{http_stylesheets_path}/#{path}")
|
15
|
+
end
|
16
|
+
|
17
|
+
def image_url(path)
|
18
|
+
path = path.value # get to the string value of the literal.
|
19
|
+
# Short curcuit if they have provided an absolute url.
|
20
|
+
if absolute_path?(path)
|
21
|
+
return Sass::Script::String.new("url(#{path})")
|
22
|
+
end
|
23
|
+
|
24
|
+
# Compute the path to the image, either root relative or stylesheet relative
|
25
|
+
# or nil if the http_images_path is not set in the configuration.
|
26
|
+
http_images_path = if relative?
|
27
|
+
compute_relative_path(Compass.configuration.images_dir)
|
28
|
+
elsif Compass.configuration.http_images_path
|
29
|
+
Compass.configuration.http_images_path
|
30
|
+
else
|
31
|
+
Compass.configuration.root_relative(Compass.configuration.images_dir)
|
32
|
+
end
|
33
|
+
|
34
|
+
# Compute the real path to the image on the file stystem if the images_dir is set.
|
35
|
+
real_path = if Compass.configuration.images_dir
|
36
|
+
File.join(Compass.configuration.project_path, Compass.configuration.images_dir, path)
|
37
|
+
end
|
38
|
+
|
39
|
+
# prepend the path to the image if there's one
|
40
|
+
if http_images_path
|
41
|
+
http_images_path = "#{http_images_path}/" unless http_images_path[-1..-1] == "/"
|
42
|
+
path = "#{http_images_path}#{path}"
|
43
|
+
end
|
44
|
+
|
45
|
+
# Compute the asset host unless in relative mode.
|
46
|
+
asset_host = if !relative? && Compass.configuration.asset_host
|
47
|
+
Compass.configuration.asset_host.call(path)
|
48
|
+
end
|
49
|
+
|
50
|
+
# Compute and append the cache buster if there is one.
|
51
|
+
if buster = compute_cache_buster(path, real_path)
|
52
|
+
path += "?#{buster}"
|
53
|
+
end
|
54
|
+
|
55
|
+
# prepend the asset host if there is one.
|
56
|
+
path = "#{asset_host}#{'/' unless path[0..0] == "/"}#{path}" if asset_host
|
57
|
+
|
58
|
+
url(path)
|
59
|
+
end
|
60
|
+
|
61
|
+
# Emits a url, taking off any leading "./"
|
62
|
+
def url(url)
|
63
|
+
url = url.to_s
|
64
|
+
url = url[0..1] == "./" ? url[2..-1] : url
|
65
|
+
Sass::Script::String.new("url('#{url}')")
|
66
|
+
end
|
67
|
+
|
68
|
+
private
|
69
|
+
|
70
|
+
def relative?
|
71
|
+
Compass.configuration.relative_assets?
|
72
|
+
end
|
73
|
+
|
74
|
+
def absolute_path?(path)
|
75
|
+
path[0..0] == "/" || path[0..3] == "http"
|
76
|
+
end
|
77
|
+
|
78
|
+
def compute_relative_path(dir)
|
79
|
+
if (target_css_file = options[:css_filename])
|
80
|
+
path = File.join(Compass.configuration.project_path, dir)
|
81
|
+
Pathname.new(path).relative_path_from(Pathname.new(File.dirname(target_css_file))).to_s
|
82
|
+
end
|
83
|
+
end
|
84
|
+
|
85
|
+
def compute_cache_buster(path, real_path)
|
86
|
+
if Compass.configuration.asset_cache_buster
|
87
|
+
args = [path]
|
88
|
+
if Compass.configuration.asset_cache_buster.arity > 1
|
89
|
+
args << (File.new(real_path) if real_path)
|
90
|
+
end
|
91
|
+
Compass.configuration.asset_cache_buster.call(*args)
|
92
|
+
elsif real_path
|
93
|
+
default_cache_buster(path, real_path)
|
94
|
+
end
|
95
|
+
end
|
96
|
+
|
97
|
+
def default_cache_buster(path, real_path)
|
98
|
+
if File.readable?(real_path)
|
99
|
+
File.mtime(real_path).strftime("%s")
|
100
|
+
else
|
101
|
+
$stderr.puts "WARNING: '#{File.basename(path)}' was not found (or cannot be read) in #{File.dirname(real_path)}"
|
102
|
+
end
|
103
|
+
end
|
104
|
+
|
105
|
+
end
|