compass 0.8.16
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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
|