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.
Files changed (275) hide show
  1. data/CHANGELOG.markdown +551 -0
  2. data/LICENSE.markdown +29 -0
  3. data/README.markdown +44 -0
  4. data/REVISION +1 -0
  5. data/Rakefile +127 -0
  6. data/VERSION.yml +4 -0
  7. data/bin/compass +8 -0
  8. data/deps.rip +1 -0
  9. data/examples/README.markdown +4 -0
  10. data/examples/blueprint_default/config.rb +7 -0
  11. data/examples/blueprint_default/images/grid.png +0 -0
  12. data/examples/blueprint_default/index.html.haml +85 -0
  13. data/examples/blueprint_default/parts/elements.html.haml +282 -0
  14. data/examples/blueprint_default/parts/forms.html.haml +190 -0
  15. data/examples/blueprint_default/parts/grid.html.haml +274 -0
  16. data/examples/blueprint_default/parts/test-small.jpg +0 -0
  17. data/examples/blueprint_default/parts/test.jpg +0 -0
  18. data/examples/blueprint_default/parts/valid.png +0 -0
  19. data/examples/blueprint_default/src/ie.sass +3 -0
  20. data/examples/blueprint_default/src/images/grid.png +0 -0
  21. data/examples/blueprint_default/src/print.sass +3 -0
  22. data/examples/blueprint_default/src/screen.sass +8 -0
  23. data/examples/blueprint_plugins/config.rb +8 -0
  24. data/examples/blueprint_plugins/images/buttons/cross.png +0 -0
  25. data/examples/blueprint_plugins/images/buttons/key.png +0 -0
  26. data/examples/blueprint_plugins/images/buttons/tick.png +0 -0
  27. data/examples/blueprint_plugins/images/grid.png +0 -0
  28. data/examples/blueprint_plugins/images/link_icons/doc.png +0 -0
  29. data/examples/blueprint_plugins/images/link_icons/email.png +0 -0
  30. data/examples/blueprint_plugins/images/link_icons/external.png +0 -0
  31. data/examples/blueprint_plugins/images/link_icons/feed.png +0 -0
  32. data/examples/blueprint_plugins/images/link_icons/im.png +0 -0
  33. data/examples/blueprint_plugins/images/link_icons/pdf.png +0 -0
  34. data/examples/blueprint_plugins/images/link_icons/visited.png +0 -0
  35. data/examples/blueprint_plugins/images/link_icons/xls.png +0 -0
  36. data/examples/blueprint_plugins/images/test-small.jpg +0 -0
  37. data/examples/blueprint_plugins/images/test.jpg +0 -0
  38. data/examples/blueprint_plugins/images/valid.png +0 -0
  39. data/examples/blueprint_plugins/index.html.haml +96 -0
  40. data/examples/blueprint_plugins/plugins/buttons.html.haml +67 -0
  41. data/examples/blueprint_plugins/plugins/fancy_type.html.haml +100 -0
  42. data/examples/blueprint_plugins/plugins/link_icons.html.haml +61 -0
  43. data/examples/blueprint_plugins/plugins/rtl.html.haml +100 -0
  44. data/examples/blueprint_plugins/src/buttons.sass +49 -0
  45. data/examples/blueprint_plugins/src/ie.sass +3 -0
  46. data/examples/blueprint_plugins/src/images/grid.png +0 -0
  47. data/examples/blueprint_plugins/src/link_icons.sass +13 -0
  48. data/examples/blueprint_plugins/src/print.sass +3 -0
  49. data/examples/blueprint_plugins/src/rtl_screen.sass +13 -0
  50. data/examples/blueprint_plugins/src/screen.sass +11 -0
  51. data/examples/blueprint_scoped/images/grid.png +0 -0
  52. data/examples/blueprint_scoped/src/ie.sass +3 -0
  53. data/examples/blueprint_scoped/src/print.sass +3 -0
  54. data/examples/blueprint_scoped/src/screen.sass +4 -0
  55. data/examples/blueprint_scoped_form/images/grid.png +0 -0
  56. data/examples/blueprint_scoped_form/src/ie.sass +3 -0
  57. data/examples/blueprint_scoped_form/src/print.sass +3 -0
  58. data/examples/blueprint_scoped_form/src/screen.sass +10 -0
  59. data/examples/blueprint_semantic/config.rb +7 -0
  60. data/examples/blueprint_semantic/images/grid.png +0 -0
  61. data/examples/blueprint_semantic/index.html.haml +86 -0
  62. data/examples/blueprint_semantic/parts/fancy_type.html.haml +100 -0
  63. data/examples/blueprint_semantic/parts/liquid.html.haml +100 -0
  64. data/examples/blueprint_semantic/parts/test-small.jpg +0 -0
  65. data/examples/blueprint_semantic/parts/test.jpg +0 -0
  66. data/examples/blueprint_semantic/parts/valid.png +0 -0
  67. data/examples/blueprint_semantic/src/ie.sass +3 -0
  68. data/examples/blueprint_semantic/src/images/grid.png +0 -0
  69. data/examples/blueprint_semantic/src/liquid.sass +70 -0
  70. data/examples/blueprint_semantic/src/print.sass +3 -0
  71. data/examples/blueprint_semantic/src/screen.sass +71 -0
  72. data/examples/compass/compass.html.haml +39 -0
  73. data/examples/compass/config.rb +7 -0
  74. data/examples/compass/images/blue_arrow.gif +0 -0
  75. data/examples/compass/src/compass.sass +47 -0
  76. data/examples/compass/src/images/blue_arrow.gif +0 -0
  77. data/examples/compass/src/sticky_footer.sass +11 -0
  78. data/examples/compass/src/utilities.sass +108 -0
  79. data/examples/compass/sticky_footer.html.haml +14 -0
  80. data/examples/compass/utilities.html.haml +189 -0
  81. data/examples/logo/logo.html.haml +40 -0
  82. data/examples/logo/src/ie.sass +6 -0
  83. data/examples/logo/src/print.sass +6 -0
  84. data/examples/logo/src/screen.sass +29 -0
  85. data/examples/yui/divisions.html.haml +179 -0
  86. data/examples/yui/index.html.haml +19 -0
  87. data/examples/yui/src/screen.sass +13 -0
  88. data/examples/yui/sub_divisions.html.haml +169 -0
  89. data/examples/yui/templates.html.haml +54 -0
  90. data/examples/yui/test.jpg +0 -0
  91. data/examples/yui/typography.html.haml +132 -0
  92. data/frameworks/blueprint.rb +2 -0
  93. data/frameworks/blueprint/stylesheets/_blueprint.sass +3 -0
  94. data/frameworks/blueprint/stylesheets/blueprint/_ie.sass +93 -0
  95. data/frameworks/blueprint/stylesheets/blueprint/_print.sass +83 -0
  96. data/frameworks/blueprint/stylesheets/blueprint/_reset.sass +3 -0
  97. data/frameworks/blueprint/stylesheets/blueprint/_screen.sass +15 -0
  98. data/frameworks/blueprint/stylesheets/blueprint/modules/_buttons.sass +84 -0
  99. data/frameworks/blueprint/stylesheets/blueprint/modules/_colors.sass +33 -0
  100. data/frameworks/blueprint/stylesheets/blueprint/modules/_debug.sass +9 -0
  101. data/frameworks/blueprint/stylesheets/blueprint/modules/_fancy_type.sass +82 -0
  102. data/frameworks/blueprint/stylesheets/blueprint/modules/_form.sass +55 -0
  103. data/frameworks/blueprint/stylesheets/blueprint/modules/_grid.sass +178 -0
  104. data/frameworks/blueprint/stylesheets/blueprint/modules/_interaction.sass +58 -0
  105. data/frameworks/blueprint/stylesheets/blueprint/modules/_link_icons.sass +44 -0
  106. data/frameworks/blueprint/stylesheets/blueprint/modules/_liquid.sass +141 -0
  107. data/frameworks/blueprint/stylesheets/blueprint/modules/_reset.sass +56 -0
  108. data/frameworks/blueprint/stylesheets/blueprint/modules/_rtl.sass +104 -0
  109. data/frameworks/blueprint/stylesheets/blueprint/modules/_scaffolding.sass +47 -0
  110. data/frameworks/blueprint/stylesheets/blueprint/modules/_typography.sass +155 -0
  111. data/frameworks/blueprint/stylesheets/blueprint/modules/_utilities.sass +37 -0
  112. data/frameworks/blueprint/templates/buttons/buttons.sass +49 -0
  113. data/frameworks/blueprint/templates/buttons/buttons/cross.png +0 -0
  114. data/frameworks/blueprint/templates/buttons/buttons/key.png +0 -0
  115. data/frameworks/blueprint/templates/buttons/buttons/tick.png +0 -0
  116. data/frameworks/blueprint/templates/buttons/manifest.rb +5 -0
  117. data/frameworks/blueprint/templates/link_icons/link_icons.sass +13 -0
  118. data/frameworks/blueprint/templates/link_icons/link_icons/doc.png +0 -0
  119. data/frameworks/blueprint/templates/link_icons/link_icons/email.png +0 -0
  120. data/frameworks/blueprint/templates/link_icons/link_icons/external.png +0 -0
  121. data/frameworks/blueprint/templates/link_icons/link_icons/feed.png +0 -0
  122. data/frameworks/blueprint/templates/link_icons/link_icons/im.png +0 -0
  123. data/frameworks/blueprint/templates/link_icons/link_icons/pdf.png +0 -0
  124. data/frameworks/blueprint/templates/link_icons/link_icons/visited.png +0 -0
  125. data/frameworks/blueprint/templates/link_icons/link_icons/xls.png +0 -0
  126. data/frameworks/blueprint/templates/link_icons/manifest.rb +10 -0
  127. data/frameworks/blueprint/templates/project/grid.png +0 -0
  128. data/frameworks/blueprint/templates/project/ie.sass +15 -0
  129. data/frameworks/blueprint/templates/project/manifest.rb +6 -0
  130. data/frameworks/blueprint/templates/project/partials/_base.sass +11 -0
  131. data/frameworks/blueprint/templates/project/print.sass +3 -0
  132. data/frameworks/blueprint/templates/project/screen.sass +40 -0
  133. data/frameworks/compass.rb +2 -0
  134. data/frameworks/compass/stylesheets/_compass.sass +1 -0
  135. data/frameworks/compass/stylesheets/compass/_layout.sass +1 -0
  136. data/frameworks/compass/stylesheets/compass/_misc.sass +24 -0
  137. data/frameworks/compass/stylesheets/compass/_reset.sass +3 -0
  138. data/frameworks/compass/stylesheets/compass/_utilities.sass +6 -0
  139. data/frameworks/compass/stylesheets/compass/layout/_sticky_footer.sass +17 -0
  140. data/frameworks/compass/stylesheets/compass/utilities/_general.sass +6 -0
  141. data/frameworks/compass/stylesheets/compass/utilities/_links.sass +3 -0
  142. data/frameworks/compass/stylesheets/compass/utilities/_lists.sass +3 -0
  143. data/frameworks/compass/stylesheets/compass/utilities/_print.sass +24 -0
  144. data/frameworks/compass/stylesheets/compass/utilities/_sprites.sass +1 -0
  145. data/frameworks/compass/stylesheets/compass/utilities/_tables.sass +3 -0
  146. data/frameworks/compass/stylesheets/compass/utilities/_text.sass +2 -0
  147. data/frameworks/compass/stylesheets/compass/utilities/general/_clearfix.sass +24 -0
  148. data/frameworks/compass/stylesheets/compass/utilities/general/_float.sass +17 -0
  149. data/frameworks/compass/stylesheets/compass/utilities/general/_hacks.sass +6 -0
  150. data/frameworks/compass/stylesheets/compass/utilities/general/_inline_block.sass +6 -0
  151. data/frameworks/compass/stylesheets/compass/utilities/general/_reset.sass +134 -0
  152. data/frameworks/compass/stylesheets/compass/utilities/general/_tabs.sass +0 -0
  153. data/frameworks/compass/stylesheets/compass/utilities/general/_tag_cloud.sass +19 -0
  154. data/frameworks/compass/stylesheets/compass/utilities/links/_hover_link.sass +5 -0
  155. data/frameworks/compass/stylesheets/compass/utilities/links/_link_colors.sass +24 -0
  156. data/frameworks/compass/stylesheets/compass/utilities/links/_unstyled_link.sass +5 -0
  157. data/frameworks/compass/stylesheets/compass/utilities/lists/_bullets.sass +21 -0
  158. data/frameworks/compass/stylesheets/compass/utilities/lists/_horizontal_list.sass +52 -0
  159. data/frameworks/compass/stylesheets/compass/utilities/lists/_inline_list.sass +29 -0
  160. data/frameworks/compass/stylesheets/compass/utilities/sprites/_sprite_img.sass +12 -0
  161. data/frameworks/compass/stylesheets/compass/utilities/tables/_alternating_rows_and_columns.sass +20 -0
  162. data/frameworks/compass/stylesheets/compass/utilities/tables/_borders.sass +27 -0
  163. data/frameworks/compass/stylesheets/compass/utilities/tables/_scaffolding.sass +9 -0
  164. data/frameworks/compass/stylesheets/compass/utilities/text/_ellipsis.sass +13 -0
  165. data/frameworks/compass/stylesheets/compass/utilities/text/_nowrap.sass +3 -0
  166. data/frameworks/compass/stylesheets/compass/utilities/text/_replacement.sass +17 -0
  167. data/frameworks/compass/templates/ellipsis/ellipsis.sass +6 -0
  168. data/frameworks/compass/templates/ellipsis/manifest.rb +2 -0
  169. data/frameworks/compass/templates/ellipsis/xml/ellipsis.xml +14 -0
  170. data/frameworks/compass/templates/project/ie.sass +6 -0
  171. data/frameworks/compass/templates/project/manifest.rb +3 -0
  172. data/frameworks/compass/templates/project/print.sass +6 -0
  173. data/frameworks/compass/templates/project/screen.sass +13 -0
  174. data/frameworks/yui.rb +2 -0
  175. data/frameworks/yui/stylesheets/_yui.sass +7 -0
  176. data/frameworks/yui/stylesheets/yui/modules/_base.sass +60 -0
  177. data/frameworks/yui/stylesheets/yui/modules/_fonts.sass +38 -0
  178. data/frameworks/yui/stylesheets/yui/modules/_grids.sass +341 -0
  179. data/frameworks/yui/stylesheets/yui/modules/_reset.sass +61 -0
  180. data/frameworks/yui/templates/project/manifest.rb +1 -0
  181. data/frameworks/yui/templates/project/screen.sass +4 -0
  182. data/lib/compass.rb +23 -0
  183. data/lib/compass/actions.rb +110 -0
  184. data/lib/compass/app_integration.rb +5 -0
  185. data/lib/compass/app_integration/merb.rb +43 -0
  186. data/lib/compass/app_integration/rails.rb +12 -0
  187. data/lib/compass/app_integration/rails/action_controller.rb +15 -0
  188. data/lib/compass/app_integration/rails/sass_plugin.rb +5 -0
  189. data/lib/compass/app_integration/rails/templates/compass-install-rails.rb +80 -0
  190. data/lib/compass/app_integration/rails/urls.rb +14 -0
  191. data/lib/compass/commands/base.rb +33 -0
  192. data/lib/compass/commands/create_project.rb +19 -0
  193. data/lib/compass/commands/generate_grid_background.rb +24 -0
  194. data/lib/compass/commands/installer_command.rb +31 -0
  195. data/lib/compass/commands/list_frameworks.rb +16 -0
  196. data/lib/compass/commands/print_version.rb +23 -0
  197. data/lib/compass/commands/project_base.rb +112 -0
  198. data/lib/compass/commands/stamp_pattern.rb +33 -0
  199. data/lib/compass/commands/update_project.rb +34 -0
  200. data/lib/compass/commands/validate_project.rb +21 -0
  201. data/lib/compass/commands/watch_project.rb +64 -0
  202. data/lib/compass/commands/write_configuration.rb +28 -0
  203. data/lib/compass/compiler.rb +54 -0
  204. data/lib/compass/configuration.rb +324 -0
  205. data/lib/compass/core_ext.rb +14 -0
  206. data/lib/compass/dependencies.rb +10 -0
  207. data/lib/compass/errors.rb +7 -0
  208. data/lib/compass/exec.rb +251 -0
  209. data/lib/compass/frameworks.rb +29 -0
  210. data/lib/compass/grid_builder.rb +72 -0
  211. data/lib/compass/installers.rb +5 -0
  212. data/lib/compass/installers/base.rb +158 -0
  213. data/lib/compass/installers/manifest.rb +58 -0
  214. data/lib/compass/installers/rails.rb +135 -0
  215. data/lib/compass/installers/stand_alone.rb +60 -0
  216. data/lib/compass/logger.rb +42 -0
  217. data/lib/compass/sass_extensions.rb +5 -0
  218. data/lib/compass/sass_extensions/functions.rb +19 -0
  219. data/lib/compass/sass_extensions/functions/display.rb +22 -0
  220. data/lib/compass/sass_extensions/functions/enumerate.rb +6 -0
  221. data/lib/compass/sass_extensions/functions/inline_image.rb +35 -0
  222. data/lib/compass/sass_extensions/functions/selectors.rb +39 -0
  223. data/lib/compass/sass_extensions/functions/urls.rb +105 -0
  224. data/lib/compass/sass_extensions/monkey_patches.rb +3 -0
  225. data/lib/compass/sass_extensions/monkey_patches/stylesheet_updating.rb +23 -0
  226. data/lib/compass/test_case.rb +38 -0
  227. data/lib/compass/validator.rb +10 -0
  228. data/lib/compass/version.rb +57 -0
  229. data/lib/vendor/fssm.rb +41 -0
  230. data/lib/vendor/fssm/backends/fsevents.rb +37 -0
  231. data/lib/vendor/fssm/backends/polling.rb +26 -0
  232. data/lib/vendor/fssm/cache.rb +193 -0
  233. data/lib/vendor/fssm/ext.rb +37 -0
  234. data/lib/vendor/fssm/fsevents.rb +129 -0
  235. data/lib/vendor/fssm/monitor.rb +25 -0
  236. data/lib/vendor/fssm/path.rb +91 -0
  237. data/lib/vendor/fssm/state.rb +54 -0
  238. data/lib/vendor/fssm/support.rb +22 -0
  239. data/lib/vendor/fssm/tree.rb +176 -0
  240. data/test/command_line_helper.rb +102 -0
  241. data/test/command_line_test.rb +66 -0
  242. data/test/compass_test.rb +141 -0
  243. data/test/configuration_test.rb +118 -0
  244. data/test/fixtures/stylesheets/blueprint/config.rb +9 -0
  245. data/test/fixtures/stylesheets/blueprint/css/typography.css +158 -0
  246. data/test/fixtures/stylesheets/blueprint/images/grid.png +0 -0
  247. data/test/fixtures/stylesheets/blueprint/sass/ie.sass +3 -0
  248. data/test/fixtures/stylesheets/blueprint/sass/print.sass +3 -0
  249. data/test/fixtures/stylesheets/blueprint/sass/screen.sass +17 -0
  250. data/test/fixtures/stylesheets/blueprint/sass/typography.sass +3 -0
  251. data/test/fixtures/stylesheets/compass/config.rb +9 -0
  252. data/test/fixtures/stylesheets/compass/css/layout.css +13 -0
  253. data/test/fixtures/stylesheets/compass/css/print.css +18 -0
  254. data/test/fixtures/stylesheets/compass/css/reset.css +60 -0
  255. data/test/fixtures/stylesheets/compass/css/utilities.css +17 -0
  256. data/test/fixtures/stylesheets/compass/sass/layout.sass +3 -0
  257. data/test/fixtures/stylesheets/compass/sass/print.sass +5 -0
  258. data/test/fixtures/stylesheets/compass/sass/reset.sass +10 -0
  259. data/test/fixtures/stylesheets/compass/sass/utilities.sass +6 -0
  260. data/test/fixtures/stylesheets/image_urls/config.rb +17 -0
  261. data/test/fixtures/stylesheets/image_urls/css/screen.css +3 -0
  262. data/test/fixtures/stylesheets/image_urls/images/grid.png +0 -0
  263. data/test/fixtures/stylesheets/image_urls/sass/screen.sass +6 -0
  264. data/test/fixtures/stylesheets/yui/config.rb +9 -0
  265. data/test/fixtures/stylesheets/yui/css/mixins.css +13 -0
  266. data/test/fixtures/stylesheets/yui/sass/base.sass +3 -0
  267. data/test/fixtures/stylesheets/yui/sass/fonts.sass +3 -0
  268. data/test/fixtures/stylesheets/yui/sass/grids.sass +3 -0
  269. data/test/fixtures/stylesheets/yui/sass/mixins.sass +16 -0
  270. data/test/rails_integration_test.rb +83 -0
  271. data/test/sass_extensions_test.rb +31 -0
  272. data/test/test_case_helper.rb +13 -0
  273. data/test/test_helper.rb +21 -0
  274. data/test/test_rails_helper.rb +20 -0
  275. 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,5 @@
1
+ module Compass::SassExtensions
2
+ end
3
+
4
+ require File.join(File.dirname(__FILE__), 'sass_extensions', 'functions')
5
+ require File.join(File.dirname(__FILE__), 'sass_extensions', 'monkey_patches')
@@ -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,6 @@
1
+ module Compass::SassExtensions::Functions::Enumerate
2
+ def enumerate(prefix, from, through)
3
+ selectors = (from.value..through.value).map{|i| "#{prefix.value}-#{i}"}.join(", ")
4
+ Sass::Script::String.new(selectors)
5
+ end
6
+ 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