Showing preview only (2,316K chars total). Download the full file or copy to clipboard to get everything.
Repository: Compass/compass
Branch: stable
Commit: 4de01475c984
Files: 883
Total size: 2.0 MB
Directory structure:
gitextract_y675jjmd/
├── .gitignore
├── .travis.yml
├── CONTRIBUTING.md
├── Guardfile
├── LICENSE.markdown
├── README.markdown
├── Rakefile
├── TODO.md
├── cli/
│ ├── .gitignore
│ ├── Gemfile
│ ├── Rakefile
│ ├── VERSION
│ ├── VERSION_NAME
│ ├── bin/
│ │ └── compass
│ ├── compass.gemspec
│ ├── features/
│ │ ├── command_line.feature
│ │ ├── extensions.feature
│ │ └── step_definitions/
│ │ ├── command_line_steps.rb
│ │ └── extension_steps.rb
│ ├── gemfiles/
│ │ ├── listen_2.gemfile
│ │ ├── sass_3_3.gemfile
│ │ └── sass_local.gemfile
│ ├── lib/
│ │ ├── compass/
│ │ │ ├── actions.rb
│ │ │ ├── app_integration/
│ │ │ │ ├── stand_alone/
│ │ │ │ │ ├── configuration_defaults.rb
│ │ │ │ │ └── installer.rb
│ │ │ │ └── stand_alone.rb
│ │ │ ├── app_integration.rb
│ │ │ ├── commands/
│ │ │ │ ├── base.rb
│ │ │ │ ├── clean_project.rb
│ │ │ │ ├── create_project.rb
│ │ │ │ ├── default.rb
│ │ │ │ ├── extension_command.rb
│ │ │ │ ├── help.rb
│ │ │ │ ├── imports.rb
│ │ │ │ ├── installer_command.rb
│ │ │ │ ├── interactive.rb
│ │ │ │ ├── list_frameworks.rb
│ │ │ │ ├── print_version.rb
│ │ │ │ ├── project_base.rb
│ │ │ │ ├── project_stats.rb
│ │ │ │ ├── project_structure.rb
│ │ │ │ ├── registry.rb
│ │ │ │ ├── sprite.rb
│ │ │ │ ├── stamp_pattern.rb
│ │ │ │ ├── unpack_extension.rb
│ │ │ │ ├── update_project.rb
│ │ │ │ ├── validate_project.rb
│ │ │ │ ├── watch_project.rb
│ │ │ │ └── write_configuration.rb
│ │ │ ├── commands.rb
│ │ │ ├── compiler.rb
│ │ │ ├── configuration/
│ │ │ │ ├── comments.rb
│ │ │ │ ├── file_data.rb
│ │ │ │ ├── helpers.rb
│ │ │ │ └── serialization.rb
│ │ │ ├── dependencies.rb
│ │ │ ├── deprecation.rb
│ │ │ ├── errors.rb
│ │ │ ├── exec/
│ │ │ │ ├── command_option_parser.rb
│ │ │ │ ├── global_options_parser.rb
│ │ │ │ ├── helpers.rb
│ │ │ │ ├── project_options_parser.rb
│ │ │ │ └── sub_command_ui.rb
│ │ │ ├── exec.rb
│ │ │ ├── generated_version.rb
│ │ │ ├── installers/
│ │ │ │ ├── bare_installer.rb
│ │ │ │ ├── base.rb
│ │ │ │ ├── manifest.rb
│ │ │ │ ├── manifest_installer.rb
│ │ │ │ └── template_context.rb
│ │ │ ├── installers.rb
│ │ │ ├── logger.rb
│ │ │ ├── quick_cache.rb
│ │ │ ├── rails.rb
│ │ │ ├── sass_compiler.rb
│ │ │ ├── sass_extensions/
│ │ │ │ ├── functions/
│ │ │ │ │ └── sprites.rb
│ │ │ │ ├── functions.rb
│ │ │ │ ├── sprites/
│ │ │ │ │ ├── engines/
│ │ │ │ │ │ └── chunky_png_engine.rb
│ │ │ │ │ ├── engines.rb
│ │ │ │ │ ├── image.rb
│ │ │ │ │ ├── image_methods.rb
│ │ │ │ │ ├── image_row.rb
│ │ │ │ │ ├── images.rb
│ │ │ │ │ ├── layout/
│ │ │ │ │ │ ├── diagonal.rb
│ │ │ │ │ │ ├── horizontal.rb
│ │ │ │ │ │ ├── smart.rb
│ │ │ │ │ │ └── vertical.rb
│ │ │ │ │ ├── layout.rb
│ │ │ │ │ ├── layout_methods.rb
│ │ │ │ │ ├── row_fitter.rb
│ │ │ │ │ ├── sprite_map.rb
│ │ │ │ │ └── sprite_methods.rb
│ │ │ │ └── sprites.rb
│ │ │ ├── sass_extensions.rb
│ │ │ ├── sprite_importer/
│ │ │ │ ├── binding.rb
│ │ │ │ └── content.erb
│ │ │ ├── sprite_importer.rb
│ │ │ ├── stats.rb
│ │ │ ├── test_case.rb
│ │ │ ├── validator.rb
│ │ │ └── version.rb
│ │ └── compass.rb
│ └── test/
│ ├── fixtures/
│ │ ├── extensions/
│ │ │ └── only_stylesheets/
│ │ │ ├── compass_init.rb
│ │ │ └── scss/
│ │ │ └── only_stylesheets/
│ │ │ └── foo.scss
│ │ ├── fonts/
│ │ │ └── bgrove.base64.txt
│ │ └── stylesheets/
│ │ ├── busted_font_urls/
│ │ │ ├── config.rb
│ │ │ ├── css/
│ │ │ │ └── screen.css
│ │ │ └── sass/
│ │ │ └── screen.sass
│ │ ├── busted_image_urls/
│ │ │ ├── config.rb
│ │ │ ├── css/
│ │ │ │ └── screen.css
│ │ │ └── sass/
│ │ │ └── screen.sass
│ │ ├── compass/
│ │ │ ├── config.rb
│ │ │ ├── css/
│ │ │ │ ├── animation-with-legacy-ie.css
│ │ │ │ ├── animation.css
│ │ │ │ ├── appearance.css
│ │ │ │ ├── background-clip.css
│ │ │ │ ├── background-origin.css
│ │ │ │ ├── background-size.css
│ │ │ │ ├── border_radius.css
│ │ │ │ ├── box-sizing.css
│ │ │ │ ├── box.css
│ │ │ │ ├── box_shadow.css
│ │ │ │ ├── brightness.css
│ │ │ │ ├── browser-support.css
│ │ │ │ ├── color.css
│ │ │ │ ├── columns.css
│ │ │ │ ├── filters.css
│ │ │ │ ├── flexbox.css
│ │ │ │ ├── fonts.css
│ │ │ │ ├── force-wrap.css
│ │ │ │ ├── gradients.css
│ │ │ │ ├── grid_background.css
│ │ │ │ ├── hyphenation.css
│ │ │ │ ├── image_size.css
│ │ │ │ ├── images.css
│ │ │ │ ├── layout.css
│ │ │ │ ├── legacy_clearfix.css
│ │ │ │ ├── lists.css
│ │ │ │ ├── opacity.css
│ │ │ │ ├── print.css
│ │ │ │ ├── regions.css
│ │ │ │ ├── replacement.css
│ │ │ │ ├── reset.css
│ │ │ │ ├── selection.css
│ │ │ │ ├── sprites_with_explicit_separator.css
│ │ │ │ ├── stretching.css
│ │ │ │ ├── support.css
│ │ │ │ ├── text_shadow.css
│ │ │ │ ├── transform.css
│ │ │ │ ├── transition.css
│ │ │ │ ├── typography/
│ │ │ │ │ └── links/
│ │ │ │ │ └── hover-link.css
│ │ │ │ ├── units.css
│ │ │ │ ├── user-interface.css
│ │ │ │ ├── utilities.css
│ │ │ │ ├── vertical_rhythm.css
│ │ │ │ ├── vertical_rhythm_with_ems.css
│ │ │ │ ├── vertical_rhythm_with_px.css
│ │ │ │ └── vertical_rhythm_with_rems.css
│ │ │ └── sass/
│ │ │ ├── animation-with-legacy-ie.scss
│ │ │ ├── animation.scss
│ │ │ ├── appearance.scss
│ │ │ ├── background-clip.scss
│ │ │ ├── background-origin.scss
│ │ │ ├── background-size.scss
│ │ │ ├── border_radius.scss
│ │ │ ├── box-sizing.scss
│ │ │ ├── box.sass
│ │ │ ├── box_shadow.scss
│ │ │ ├── brightness.scss
│ │ │ ├── browser-support.scss
│ │ │ ├── color.scss
│ │ │ ├── columns.scss
│ │ │ ├── filters.scss
│ │ │ ├── flexbox.scss
│ │ │ ├── fonts.sass
│ │ │ ├── force-wrap.scss
│ │ │ ├── gradients.sass
│ │ │ ├── grid_background.scss
│ │ │ ├── hyphenation.scss
│ │ │ ├── image_size.sass
│ │ │ ├── images.scss
│ │ │ ├── layout.sass
│ │ │ ├── legacy_clearfix.scss
│ │ │ ├── lists.scss
│ │ │ ├── opacity.scss
│ │ │ ├── print.sass
│ │ │ ├── regions.scss
│ │ │ ├── replacement.scss
│ │ │ ├── reset.sass
│ │ │ ├── selection.scss
│ │ │ ├── sprites_with_explicit_separator.scss
│ │ │ ├── stretching.sass
│ │ │ ├── support.scss
│ │ │ ├── text_shadow.scss
│ │ │ ├── transform.scss
│ │ │ ├── transition.scss
│ │ │ ├── typography/
│ │ │ │ └── links/
│ │ │ │ └── hover-link.scss
│ │ │ ├── units.scss
│ │ │ ├── user-interface.scss
│ │ │ ├── utilities.scss
│ │ │ ├── vertical_rhythm.scss
│ │ │ ├── vertical_rhythm_with_ems.scss
│ │ │ ├── vertical_rhythm_with_px.scss
│ │ │ └── vertical_rhythm_with_rems.scss
│ │ ├── envtest/
│ │ │ ├── config.rb
│ │ │ ├── css/
│ │ │ │ └── env.css
│ │ │ └── sass/
│ │ │ └── env.scss
│ │ ├── error/
│ │ │ ├── config.rb
│ │ │ └── sass/
│ │ │ └── screen.sass
│ │ ├── image_urls/
│ │ │ ├── config.rb
│ │ │ ├── css/
│ │ │ │ └── screen.css
│ │ │ └── sass/
│ │ │ └── screen.sass
│ │ ├── relative/
│ │ │ ├── config.rb
│ │ │ ├── css/
│ │ │ │ ├── ie.css
│ │ │ │ ├── print.css
│ │ │ │ └── screen.css
│ │ │ └── sass/
│ │ │ ├── ie.sass
│ │ │ ├── print.sass
│ │ │ └── screen.sass
│ │ ├── sourcemaps/
│ │ │ ├── config.rb
│ │ │ ├── css/
│ │ │ │ ├── another_simple.css
│ │ │ │ ├── simple.css
│ │ │ │ └── with_libraries.css
│ │ │ └── sass/
│ │ │ ├── another_simple.scss
│ │ │ ├── simple.sass
│ │ │ └── with_libraries.scss
│ │ ├── uses_only_stylesheets_ext/
│ │ │ ├── config.rb
│ │ │ ├── sass/
│ │ │ │ ├── ie.scss
│ │ │ │ ├── print.scss
│ │ │ │ └── screen.scss
│ │ │ └── stylesheets/
│ │ │ ├── ie.css
│ │ │ ├── print.css
│ │ │ └── screen.css
│ │ ├── valid/
│ │ │ ├── config.rb
│ │ │ └── sass/
│ │ │ ├── another_simple.scss
│ │ │ └── simple.sass
│ │ └── with_sass_globbing/
│ │ ├── config.rb
│ │ ├── css/
│ │ │ └── screen.css
│ │ └── sass/
│ │ ├── partials/
│ │ │ ├── _1.scss
│ │ │ ├── _2.scss
│ │ │ └── _3.scss
│ │ └── screen.scss
│ ├── helpers/
│ │ ├── command_line.rb
│ │ ├── diff.rb
│ │ ├── io.rb
│ │ ├── rails.rb
│ │ └── test_case.rb
│ ├── integrations/
│ │ ├── compass_test.rb
│ │ └── sprites_test.rb
│ ├── test_helper.rb
│ └── units/
│ ├── actions_test.rb
│ ├── caniuse_test.rb
│ ├── command_line_test.rb
│ ├── compass_util_test.rb
│ ├── compiler_test.rb
│ ├── configuration_test.rb
│ ├── regressions_test.rb
│ ├── sass_extensions_test.rb
│ ├── sass_extenstions/
│ │ └── gradients_test.rb
│ └── sprites/
│ ├── engine_test.rb
│ ├── image_row_test.rb
│ ├── image_test.rb
│ ├── images_test.rb
│ ├── importer_test.rb
│ ├── layout_test.rb
│ ├── row_fitter_test.rb
│ ├── sprite_command_test.rb
│ └── sprite_map_test.rb
├── compass-style.org/
│ ├── .compass/
│ │ └── config.rb
│ ├── .gitignore
│ ├── .livereload
│ ├── Gemfile
│ ├── Procfile
│ ├── README.markdown
│ ├── Rakefile
│ ├── Rules
│ ├── assets/
│ │ ├── fonts/
│ │ │ └── examples/
│ │ │ └── bgrove.otf
│ │ ├── htaccess
│ │ └── javascripts/
│ │ ├── fixups.js
│ │ ├── install.js
│ │ ├── jquery.cookie.js
│ │ ├── jquery.url.packed.js
│ │ ├── placeholder.js
│ │ ├── shAutoloader.js
│ │ ├── shBrushCss.js
│ │ ├── shBrushPlain.js
│ │ ├── shBrushSass.js
│ │ ├── shBrushScss.js
│ │ ├── shBrushXml.js
│ │ ├── shCore.js
│ │ └── site.js
│ ├── authors.yml
│ ├── config.yaml
│ ├── content/
│ │ ├── .livereload
│ │ ├── CHANGELOG.markdown
│ │ ├── blog/
│ │ │ ├── archive.haml
│ │ │ └── atom.haml
│ │ ├── blog.haml
│ │ ├── copyright.markdown
│ │ ├── examples/
│ │ │ ├── blueprint/
│ │ │ │ └── grid/
│ │ │ │ ├── pull/
│ │ │ │ │ └── stylesheet.scss
│ │ │ │ └── two_cols/
│ │ │ │ └── stylesheet.scss
│ │ │ ├── compass/
│ │ │ │ ├── css3/
│ │ │ │ │ ├── background-clip/
│ │ │ │ │ │ ├── markup.haml
│ │ │ │ │ │ └── stylesheet.scss
│ │ │ │ │ ├── background-clip.haml
│ │ │ │ │ ├── background-origin/
│ │ │ │ │ │ ├── markup.haml
│ │ │ │ │ │ └── stylesheet.scss
│ │ │ │ │ ├── background-origin.haml
│ │ │ │ │ ├── background-size/
│ │ │ │ │ │ ├── markup.haml
│ │ │ │ │ │ └── stylesheet.scss
│ │ │ │ │ ├── background-size.haml
│ │ │ │ │ ├── border_radius/
│ │ │ │ │ │ ├── markup.haml
│ │ │ │ │ │ └── stylesheet.scss
│ │ │ │ │ ├── border_radius.haml
│ │ │ │ │ ├── box_shadow/
│ │ │ │ │ │ ├── markup.haml
│ │ │ │ │ │ └── stylesheet.scss
│ │ │ │ │ ├── box_shadow.haml
│ │ │ │ │ ├── box_sizing/
│ │ │ │ │ │ ├── markup.haml
│ │ │ │ │ │ └── stylesheet.scss
│ │ │ │ │ ├── box_sizing.haml
│ │ │ │ │ ├── columns/
│ │ │ │ │ │ ├── markup.haml
│ │ │ │ │ │ └── stylesheet.scss
│ │ │ │ │ ├── columns.haml
│ │ │ │ │ ├── flexbox/
│ │ │ │ │ │ ├── markup.haml
│ │ │ │ │ │ └── stylesheet.scss
│ │ │ │ │ ├── flexbox.haml
│ │ │ │ │ ├── font-face/
│ │ │ │ │ │ ├── markup.haml
│ │ │ │ │ │ └── stylesheet.scss
│ │ │ │ │ ├── font-face.haml
│ │ │ │ │ ├── gradient/
│ │ │ │ │ │ ├── markup.haml
│ │ │ │ │ │ └── stylesheet.scss
│ │ │ │ │ ├── gradient.haml
│ │ │ │ │ ├── inline_block/
│ │ │ │ │ │ ├── markup.haml
│ │ │ │ │ │ └── stylesheet.scss
│ │ │ │ │ ├── inline_block.haml
│ │ │ │ │ ├── input-placeholder/
│ │ │ │ │ │ ├── markup.haml
│ │ │ │ │ │ └── stylesheet.scss
│ │ │ │ │ ├── input-placeholder.haml
│ │ │ │ │ ├── opacity/
│ │ │ │ │ │ ├── markup.haml
│ │ │ │ │ │ └── stylesheet.scss
│ │ │ │ │ ├── opacity.haml
│ │ │ │ │ ├── regions/
│ │ │ │ │ │ ├── markup.haml
│ │ │ │ │ │ └── stylesheet.scss
│ │ │ │ │ ├── regions.haml
│ │ │ │ │ ├── text_shadow/
│ │ │ │ │ │ ├── markup.haml
│ │ │ │ │ │ └── stylesheet.scss
│ │ │ │ │ ├── text_shadow.haml
│ │ │ │ │ ├── transition/
│ │ │ │ │ │ ├── markup.haml
│ │ │ │ │ │ └── stylesheet.scss
│ │ │ │ │ └── transition.haml
│ │ │ │ ├── helpers/
│ │ │ │ │ ├── elements-of-type/
│ │ │ │ │ │ ├── markup.haml
│ │ │ │ │ │ └── stylesheet.scss
│ │ │ │ │ ├── elements-of-type.haml
│ │ │ │ │ ├── enumerate/
│ │ │ │ │ │ ├── markup.haml
│ │ │ │ │ │ └── stylesheet.scss
│ │ │ │ │ ├── enumerate.haml
│ │ │ │ │ ├── using-extend-in-place-of-enumerate/
│ │ │ │ │ │ ├── markup.haml
│ │ │ │ │ │ └── stylesheet.scss
│ │ │ │ │ └── using-extend-in-place-of-enumerate.haml
│ │ │ │ ├── layout/
│ │ │ │ │ ├── sticky-footer/
│ │ │ │ │ │ ├── markup.haml
│ │ │ │ │ │ └── stylesheet.scss
│ │ │ │ │ ├── sticky-footer.haml
│ │ │ │ │ ├── stretching/
│ │ │ │ │ │ ├── markup.haml
│ │ │ │ │ │ └── stylesheet.scss
│ │ │ │ │ └── stretching.haml
│ │ │ │ ├── tables/
│ │ │ │ │ ├── all/
│ │ │ │ │ │ ├── markup.haml
│ │ │ │ │ │ └── stylesheet.scss
│ │ │ │ │ ├── all.haml
│ │ │ │ │ ├── borders/
│ │ │ │ │ │ ├── markup.haml
│ │ │ │ │ │ └── stylesheet.scss
│ │ │ │ │ ├── borders.haml
│ │ │ │ │ ├── scaffolding/
│ │ │ │ │ │ ├── markup.haml
│ │ │ │ │ │ └── stylesheet.scss
│ │ │ │ │ ├── scaffolding.haml
│ │ │ │ │ ├── striping/
│ │ │ │ │ │ ├── markup.haml
│ │ │ │ │ │ └── stylesheet.scss
│ │ │ │ │ └── striping.haml
│ │ │ │ └── utilities/
│ │ │ │ ├── contrast/
│ │ │ │ │ ├── markup.haml
│ │ │ │ │ └── stylesheet.scss
│ │ │ │ └── contrast.haml
│ │ │ └── index.haml
│ │ ├── frameworks.haml
│ │ ├── get-involved/
│ │ │ └── index.haml
│ │ ├── help/
│ │ │ ├── documentation/
│ │ │ │ ├── command-line.markdown
│ │ │ │ ├── configuration-reference.markdown
│ │ │ │ ├── sass-based-configuration-options.markdown
│ │ │ │ └── tuning-vendor-prefixes.markdown
│ │ │ ├── documentation.haml
│ │ │ ├── index.haml
│ │ │ ├── tutorials/
│ │ │ │ ├── best_practices.markdown
│ │ │ │ ├── configurable-variables.haml
│ │ │ │ ├── contributing.markdown
│ │ │ │ ├── extending.markdown
│ │ │ │ ├── extensions.markdown
│ │ │ │ ├── integration.markdown
│ │ │ │ ├── production-css.markdown
│ │ │ │ ├── spriting/
│ │ │ │ │ ├── customization-options.markdown
│ │ │ │ │ ├── magic-selectors.markdown
│ │ │ │ │ └── sprite-layouts.markdown
│ │ │ │ ├── spriting.markdown
│ │ │ │ ├── testing.markdown
│ │ │ │ ├── upgrading/
│ │ │ │ │ ├── antares.markdown
│ │ │ │ │ ├── im-scared.markdown
│ │ │ │ │ └── lemonade_upgrade_guide.markdown
│ │ │ │ └── upgrading.markdown
│ │ │ └── tutorials.haml
│ │ ├── index/
│ │ │ ├── functions.haml
│ │ │ ├── mixins.haml
│ │ │ └── variables.haml
│ │ ├── index.haml
│ │ ├── install.haml
│ │ ├── posts/
│ │ │ ├── 2011-04-24-v011-release.markdown
│ │ │ ├── 2011-04-26-compass-release-strategy.markdown
│ │ │ ├── 2011-05-09-compass-django.markdown
│ │ │ ├── 2012-01-29-compass-and-rails-integration.markdown
│ │ │ ├── 2012-02-01-compass-0-12-is-released.markdown
│ │ │ ├── 2012-05-20-removing-blueprint.markdown
│ │ │ ├── 2013-11-27-compass-versioning-change.markdown
│ │ │ └── 2014-08-15-omg-compass-1-0.markdown
│ │ ├── reference/
│ │ │ ├── compass/
│ │ │ │ ├── css3/
│ │ │ │ │ ├── animation.haml
│ │ │ │ │ ├── appearance.haml
│ │ │ │ │ ├── background_clip.haml
│ │ │ │ │ ├── background_origin.haml
│ │ │ │ │ ├── background_size.haml
│ │ │ │ │ ├── border_radius.haml
│ │ │ │ │ ├── box.haml
│ │ │ │ │ ├── box_shadow.haml
│ │ │ │ │ ├── box_sizing.haml
│ │ │ │ │ ├── columns.haml
│ │ │ │ │ ├── filter.haml
│ │ │ │ │ ├── flexbox.haml
│ │ │ │ │ ├── font_face.haml
│ │ │ │ │ ├── hyphenation.haml
│ │ │ │ │ ├── images.haml
│ │ │ │ │ ├── inline_block.haml
│ │ │ │ │ ├── opacity.haml
│ │ │ │ │ ├── pie.haml
│ │ │ │ │ ├── regions.haml
│ │ │ │ │ ├── selection.haml
│ │ │ │ │ ├── shared.haml
│ │ │ │ │ ├── text-shadow.haml
│ │ │ │ │ ├── transform.haml
│ │ │ │ │ ├── transition.haml
│ │ │ │ │ └── user_interface.haml
│ │ │ │ ├── css3.haml
│ │ │ │ ├── helpers/
│ │ │ │ │ ├── color-stops.haml
│ │ │ │ │ ├── colors.haml
│ │ │ │ │ ├── constants.haml
│ │ │ │ │ ├── cross-browser.haml
│ │ │ │ │ ├── display.haml
│ │ │ │ │ ├── env.haml
│ │ │ │ │ ├── font-files.haml
│ │ │ │ │ ├── image-dimensions.haml
│ │ │ │ │ ├── inline-data.haml
│ │ │ │ │ ├── math.haml
│ │ │ │ │ ├── selectors.haml
│ │ │ │ │ ├── sprites.haml
│ │ │ │ │ └── urls.haml
│ │ │ │ ├── helpers.haml
│ │ │ │ ├── layout/
│ │ │ │ │ ├── grid_background.haml
│ │ │ │ │ ├── sticky_footer.haml
│ │ │ │ │ └── stretching.haml
│ │ │ │ ├── layout.haml
│ │ │ │ ├── reset/
│ │ │ │ │ └── utilities.haml
│ │ │ │ ├── reset-legacy/
│ │ │ │ │ └── utilities-legacy.haml
│ │ │ │ ├── reset-legacy.haml
│ │ │ │ ├── reset.haml
│ │ │ │ ├── support.haml
│ │ │ │ ├── typography/
│ │ │ │ │ ├── links/
│ │ │ │ │ │ ├── hover_link.haml
│ │ │ │ │ │ ├── link_colors.haml
│ │ │ │ │ │ └── unstyled_link.haml
│ │ │ │ │ ├── links.haml
│ │ │ │ │ ├── lists/
│ │ │ │ │ │ ├── bullets.haml
│ │ │ │ │ │ ├── horizontal_list.haml
│ │ │ │ │ │ ├── inline-block-list.haml
│ │ │ │ │ │ └── inline_list.haml
│ │ │ │ │ ├── lists.haml
│ │ │ │ │ ├── text/
│ │ │ │ │ │ ├── ellipsis.haml
│ │ │ │ │ │ ├── force-wrap.haml
│ │ │ │ │ │ ├── nowrap.haml
│ │ │ │ │ │ └── replacement.haml
│ │ │ │ │ ├── text.haml
│ │ │ │ │ └── vertical_rhythm.haml
│ │ │ │ ├── typography.haml
│ │ │ │ ├── utilities/
│ │ │ │ │ ├── color/
│ │ │ │ │ │ ├── brightness.haml
│ │ │ │ │ │ └── contrast.haml
│ │ │ │ │ ├── color.haml
│ │ │ │ │ ├── general/
│ │ │ │ │ │ ├── clearfix.haml
│ │ │ │ │ │ ├── float.haml
│ │ │ │ │ │ ├── hacks.haml
│ │ │ │ │ │ ├── min.haml
│ │ │ │ │ │ ├── reset.haml
│ │ │ │ │ │ └── tag_cloud.haml
│ │ │ │ │ ├── general.haml
│ │ │ │ │ ├── print.haml
│ │ │ │ │ ├── sprites/
│ │ │ │ │ │ ├── base.haml
│ │ │ │ │ │ └── sprite_img.haml
│ │ │ │ │ ├── sprites.haml
│ │ │ │ │ ├── tables/
│ │ │ │ │ │ ├── alternating_rows_and_columns.haml
│ │ │ │ │ │ ├── borders.haml
│ │ │ │ │ │ └── scaffolding.haml
│ │ │ │ │ └── tables.haml
│ │ │ │ └── utilities.haml
│ │ │ └── compass.haml
│ │ ├── reference.haml
│ │ ├── screencast.haml
│ │ ├── search-data.js.erb
│ │ ├── search.haml
│ │ ├── sitemap.xml
│ │ └── stylesheets/
│ │ ├── core/
│ │ │ ├── _base-classes.sass
│ │ │ ├── _clearing-classes.sass
│ │ │ ├── _extensions.scss
│ │ │ └── _media-block.scss
│ │ ├── home.scss
│ │ ├── ie.scss
│ │ ├── partials/
│ │ │ ├── _ads.scss
│ │ │ ├── _blog.scss
│ │ │ ├── _code.scss
│ │ │ ├── _example.scss
│ │ │ ├── _home.scss
│ │ │ ├── _install.scss
│ │ │ ├── _layout.scss
│ │ │ ├── _main.scss
│ │ │ ├── _nav.scss
│ │ │ ├── _sidebar.scss
│ │ │ ├── _theme.scss
│ │ │ └── _typography.scss
│ │ ├── screen.scss
│ │ └── syntax/
│ │ ├── _shCore.scss
│ │ ├── _shThemeRDark.scss
│ │ ├── _syntax-theme.scss
│ │ └── _theme_template.scss
│ ├── layouts/
│ │ ├── article.haml
│ │ ├── basic.haml
│ │ ├── blog.haml
│ │ ├── core.haml
│ │ ├── default.haml
│ │ ├── documentation.haml
│ │ ├── example.haml
│ │ ├── homepage.haml
│ │ ├── main.haml
│ │ ├── partials/
│ │ │ ├── ad.haml
│ │ │ ├── analytics.haml
│ │ │ ├── breadcrumbs.haml
│ │ │ ├── example.haml
│ │ │ ├── footer.haml
│ │ │ ├── js-core.haml
│ │ │ ├── js-highlighter.haml
│ │ │ ├── main-navigation.haml
│ │ │ ├── reference/
│ │ │ │ ├── const_table.haml
│ │ │ │ ├── constants.haml
│ │ │ │ ├── examples.haml
│ │ │ │ ├── functions.haml
│ │ │ │ ├── import-few.haml
│ │ │ │ ├── import.haml
│ │ │ │ ├── imports.haml
│ │ │ │ ├── mixins.haml
│ │ │ │ └── selectors.haml
│ │ │ ├── sidebar/
│ │ │ │ ├── container.haml
│ │ │ │ ├── heading.haml
│ │ │ │ └── item.haml
│ │ │ └── sidebar.haml
│ │ ├── post.haml
│ │ ├── redirect.haml
│ │ ├── reference.haml
│ │ ├── simple_core.haml
│ │ ├── site.haml
│ │ └── tutorial.haml
│ ├── lib/
│ │ ├── blog.rb
│ │ ├── data_sources/
│ │ │ ├── asset_data_source.rb
│ │ │ ├── better_combined_datasource.rb
│ │ │ ├── core_extensions.rb
│ │ │ ├── nanoc_monkey_patches.rb
│ │ │ └── syntax_highter.rb
│ │ ├── default.rb
│ │ ├── examples.rb
│ │ ├── search.rb
│ │ ├── stylesheets/
│ │ │ └── sass_extensions.rb
│ │ └── stylesheets.rb
│ └── tasks/
│ └── generators.thor
├── core/
│ ├── .gitignore
│ ├── Gemfile
│ ├── LICENSE.txt
│ ├── README.md
│ ├── Rakefile
│ ├── VERSION
│ ├── compass-core.gemspec
│ ├── data/
│ │ ├── caniuse.json
│ │ └── caniuse_extras/
│ │ └── css-placeholder.json
│ ├── lib/
│ │ ├── compass/
│ │ │ ├── browser_support.rb
│ │ │ ├── configuration/
│ │ │ │ ├── adapters.rb
│ │ │ │ ├── data.rb
│ │ │ │ ├── defaults.rb
│ │ │ │ ├── inheritance.rb
│ │ │ │ ├── paths.rb
│ │ │ │ └── watch.rb
│ │ │ ├── configuration.rb
│ │ │ ├── core/
│ │ │ │ ├── caniuse.rb
│ │ │ │ ├── generated_version.rb
│ │ │ │ ├── sass_extensions/
│ │ │ │ │ ├── functions/
│ │ │ │ │ │ ├── colors.rb
│ │ │ │ │ │ ├── configuration.rb
│ │ │ │ │ │ ├── constants.rb
│ │ │ │ │ │ ├── cross_browser_support.rb
│ │ │ │ │ │ ├── display.rb
│ │ │ │ │ │ ├── enumerate.rb
│ │ │ │ │ │ ├── env.rb
│ │ │ │ │ │ ├── files.rb
│ │ │ │ │ │ ├── font_files.rb
│ │ │ │ │ │ ├── gradient_support.rb
│ │ │ │ │ │ ├── image_size.rb
│ │ │ │ │ │ ├── inline_image.rb
│ │ │ │ │ │ ├── lists.rb
│ │ │ │ │ │ ├── math.rb
│ │ │ │ │ │ ├── selectors.rb
│ │ │ │ │ │ └── urls.rb
│ │ │ │ │ ├── functions.rb
│ │ │ │ │ ├── monkey_patches/
│ │ │ │ │ │ ├── browser_support.rb
│ │ │ │ │ │ └── traversal.rb
│ │ │ │ │ └── monkey_patches.rb
│ │ │ │ ├── sass_extensions.rb
│ │ │ │ └── version.rb
│ │ │ ├── core.rb
│ │ │ ├── error.rb
│ │ │ ├── frameworks.rb
│ │ │ └── util.rb
│ │ └── compass-core.rb
│ ├── stylesheets/
│ │ ├── _compass.scss
│ │ ├── _lemonade.scss
│ │ └── compass/
│ │ ├── _configuration.scss
│ │ ├── _css3.scss
│ │ ├── _layout.scss
│ │ ├── _reset-legacy.scss
│ │ ├── _reset.scss
│ │ ├── _support.scss
│ │ ├── _typography.scss
│ │ ├── _utilities.scss
│ │ ├── css3/
│ │ │ ├── _animation.scss
│ │ │ ├── _appearance.scss
│ │ │ ├── _background-clip.scss
│ │ │ ├── _background-origin.scss
│ │ │ ├── _background-size.scss
│ │ │ ├── _border-radius.scss
│ │ │ ├── _box-shadow.scss
│ │ │ ├── _box-sizing.scss
│ │ │ ├── _box.scss
│ │ │ ├── _columns.scss
│ │ │ ├── _deprecated-support.scss
│ │ │ ├── _filter.scss
│ │ │ ├── _flexbox.scss
│ │ │ ├── _font-face.scss
│ │ │ ├── _hyphenation.scss
│ │ │ ├── _images.scss
│ │ │ ├── _inline-block.scss
│ │ │ ├── _opacity.scss
│ │ │ ├── _pie.scss
│ │ │ ├── _regions.scss
│ │ │ ├── _selection.scss
│ │ │ ├── _shared.scss
│ │ │ ├── _text-shadow.scss
│ │ │ ├── _transform.scss
│ │ │ ├── _transition.scss
│ │ │ └── _user-interface.scss
│ │ ├── layout/
│ │ │ ├── _grid-background.scss
│ │ │ ├── _sticky-footer.scss
│ │ │ └── _stretching.scss
│ │ ├── reset/
│ │ │ ├── _utilities-legacy.scss
│ │ │ └── _utilities.scss
│ │ ├── typography/
│ │ │ ├── _links.scss
│ │ │ ├── _lists.scss
│ │ │ ├── _text.scss
│ │ │ ├── _units.scss
│ │ │ ├── _vertical_rhythm.scss
│ │ │ ├── links/
│ │ │ │ ├── _hover-link.scss
│ │ │ │ ├── _link-colors.scss
│ │ │ │ └── _unstyled-link.scss
│ │ │ ├── lists/
│ │ │ │ ├── _bullets.scss
│ │ │ │ ├── _horizontal-list.scss
│ │ │ │ ├── _inline-block-list.scss
│ │ │ │ └── _inline-list.scss
│ │ │ └── text/
│ │ │ ├── _ellipsis.scss
│ │ │ ├── _force-wrap.scss
│ │ │ ├── _nowrap.scss
│ │ │ └── _replacement.scss
│ │ └── utilities/
│ │ ├── _color.scss
│ │ ├── _general.scss
│ │ ├── _links.scss
│ │ ├── _lists.scss
│ │ ├── _print.scss
│ │ ├── _sass.scss
│ │ ├── _sprites.scss
│ │ ├── _tables.scss
│ │ ├── _text.scss
│ │ ├── color/
│ │ │ ├── _brightness.scss
│ │ │ └── _contrast.scss
│ │ ├── general/
│ │ │ ├── _clearfix.scss
│ │ │ ├── _float.scss
│ │ │ ├── _hacks.scss
│ │ │ ├── _min.scss
│ │ │ ├── _reset.scss
│ │ │ ├── _tabs.scss
│ │ │ └── _tag-cloud.scss
│ │ ├── links/
│ │ │ ├── _hover-link.scss
│ │ │ ├── _link-colors.scss
│ │ │ └── _unstyled-link.scss
│ │ ├── lists/
│ │ │ ├── _bullets.scss
│ │ │ ├── _horizontal-list.scss
│ │ │ ├── _inline-block-list.scss
│ │ │ └── _inline-list.scss
│ │ ├── sass/
│ │ │ ├── _lists.scss
│ │ │ └── _maps.scss
│ │ ├── sprites/
│ │ │ ├── _base.scss
│ │ │ └── _sprite-img.scss
│ │ ├── tables/
│ │ │ ├── _alternating-rows-and-columns.scss
│ │ │ ├── _borders.scss
│ │ │ └── _scaffolding.scss
│ │ └── text/
│ │ ├── _ellipsis.scss
│ │ ├── _nowrap.scss
│ │ └── _replacement.scss
│ ├── templates/
│ │ ├── ellipsis/
│ │ │ ├── ellipsis.sass
│ │ │ ├── manifest.rb
│ │ │ └── xml/
│ │ │ └── ellipsis.xml
│ │ ├── extension/
│ │ │ ├── manifest.rb
│ │ │ ├── stylesheets/
│ │ │ │ └── main.sass
│ │ │ └── templates/
│ │ │ └── project/
│ │ │ ├── manifest.rb
│ │ │ └── screen.sass
│ │ └── project/
│ │ ├── USAGE.markdown
│ │ ├── ie.sass
│ │ ├── manifest.rb
│ │ ├── print.sass
│ │ └── screen.sass
│ └── test/
│ ├── helpers/
│ │ └── diff.rb
│ ├── integrations/
│ │ ├── projects/
│ │ │ ├── .gitignore
│ │ │ ├── busted_font_urls/
│ │ │ │ ├── css/
│ │ │ │ │ └── screen.css
│ │ │ │ └── sass/
│ │ │ │ ├── _project-setup.scss
│ │ │ │ └── screen.sass
│ │ │ ├── busted_image_urls/
│ │ │ │ ├── css/
│ │ │ │ │ └── screen.css
│ │ │ │ └── sass/
│ │ │ │ ├── _project-setup.scss
│ │ │ │ └── screen.sass
│ │ │ ├── compass/
│ │ │ │ ├── css/
│ │ │ │ │ ├── animation-with-legacy-ie.css
│ │ │ │ │ ├── animation.css
│ │ │ │ │ ├── appearance.css
│ │ │ │ │ ├── background-clip.css
│ │ │ │ │ ├── background-origin.css
│ │ │ │ │ ├── background-size.css
│ │ │ │ │ ├── border_radius.css
│ │ │ │ │ ├── box-sizing.css
│ │ │ │ │ ├── box.css
│ │ │ │ │ ├── box_shadow.css
│ │ │ │ │ ├── brightness.css
│ │ │ │ │ ├── browser-support.css
│ │ │ │ │ ├── color.css
│ │ │ │ │ ├── columns.css
│ │ │ │ │ ├── env.css
│ │ │ │ │ ├── filters.css
│ │ │ │ │ ├── flexbox.css
│ │ │ │ │ ├── fonts.css
│ │ │ │ │ ├── force-wrap.css
│ │ │ │ │ ├── gradients.css
│ │ │ │ │ ├── grid_background.css
│ │ │ │ │ ├── hyphenation.css
│ │ │ │ │ ├── image_size.css
│ │ │ │ │ ├── images.css
│ │ │ │ │ ├── issue-1853.css
│ │ │ │ │ ├── layout.css
│ │ │ │ │ ├── legacy_clearfix.css
│ │ │ │ │ ├── lists.css
│ │ │ │ │ ├── opacity.css
│ │ │ │ │ ├── print.css
│ │ │ │ │ ├── regions.css
│ │ │ │ │ ├── replacement.css
│ │ │ │ │ ├── reset.css
│ │ │ │ │ ├── selection.css
│ │ │ │ │ ├── selection.css.3.3
│ │ │ │ │ ├── stretching.css
│ │ │ │ │ ├── support.css
│ │ │ │ │ ├── table.css
│ │ │ │ │ ├── text_shadow.css
│ │ │ │ │ ├── transform.css
│ │ │ │ │ ├── transition.css
│ │ │ │ │ ├── typography/
│ │ │ │ │ │ └── links/
│ │ │ │ │ │ └── hover-link.css
│ │ │ │ │ ├── units.css
│ │ │ │ │ ├── user-interface.css
│ │ │ │ │ ├── utilities.css
│ │ │ │ │ ├── utilities.css.3.3
│ │ │ │ │ └── vertical_rhythm.css
│ │ │ │ └── sass/
│ │ │ │ ├── _project-setup.scss
│ │ │ │ ├── animation-with-legacy-ie.scss
│ │ │ │ ├── animation.scss
│ │ │ │ ├── appearance.scss
│ │ │ │ ├── background-clip.scss
│ │ │ │ ├── background-origin.scss
│ │ │ │ ├── background-size.scss
│ │ │ │ ├── border_radius.scss
│ │ │ │ ├── box-sizing.scss
│ │ │ │ ├── box.sass
│ │ │ │ ├── box_shadow.scss
│ │ │ │ ├── brightness.scss
│ │ │ │ ├── browser-support.scss
│ │ │ │ ├── color.scss
│ │ │ │ ├── columns.scss
│ │ │ │ ├── env.scss
│ │ │ │ ├── filters.scss
│ │ │ │ ├── flexbox.scss
│ │ │ │ ├── fonts.sass
│ │ │ │ ├── force-wrap.scss
│ │ │ │ ├── gradients.sass
│ │ │ │ ├── grid_background.scss
│ │ │ │ ├── hyphenation.scss
│ │ │ │ ├── image_size.sass
│ │ │ │ ├── images.scss
│ │ │ │ ├── issue-1853.scss
│ │ │ │ ├── layout.sass
│ │ │ │ ├── legacy_clearfix.scss
│ │ │ │ ├── lists.scss
│ │ │ │ ├── opacity.scss
│ │ │ │ ├── print.sass
│ │ │ │ ├── regions.scss
│ │ │ │ ├── replacement.scss
│ │ │ │ ├── reset.sass
│ │ │ │ ├── selection.scss
│ │ │ │ ├── stretching.sass
│ │ │ │ ├── support.scss
│ │ │ │ ├── table.scss
│ │ │ │ ├── text_shadow.scss
│ │ │ │ ├── transform.scss
│ │ │ │ ├── transition.scss
│ │ │ │ ├── typography/
│ │ │ │ │ └── links/
│ │ │ │ │ └── hover-link.scss
│ │ │ │ ├── units.scss
│ │ │ │ ├── user-interface.scss
│ │ │ │ ├── utilities.scss
│ │ │ │ └── vertical_rhythm.scss
│ │ │ ├── envtest/
│ │ │ │ ├── css/
│ │ │ │ │ └── env.css
│ │ │ │ └── sass/
│ │ │ │ ├── _project-setup.scss
│ │ │ │ └── env.scss
│ │ │ ├── image_urls/
│ │ │ │ ├── css/
│ │ │ │ │ └── screen.css
│ │ │ │ └── sass/
│ │ │ │ ├── _project-setup.scss
│ │ │ │ └── screen.sass
│ │ │ ├── relative/
│ │ │ │ ├── css/
│ │ │ │ │ ├── ie.css
│ │ │ │ │ ├── print.css
│ │ │ │ │ └── screen.css
│ │ │ │ └── sass/
│ │ │ │ ├── _project-setup.scss
│ │ │ │ ├── ie.sass
│ │ │ │ ├── print.sass
│ │ │ │ └── screen.sass
│ │ │ ├── uses_only_stylesheets_ext/
│ │ │ │ ├── css/
│ │ │ │ │ ├── ie.css
│ │ │ │ │ ├── print.css
│ │ │ │ │ └── screen.css
│ │ │ │ └── sass/
│ │ │ │ ├── ie.scss
│ │ │ │ ├── print.scss
│ │ │ │ └── screen.scss
│ │ │ └── valid/
│ │ │ ├── css/
│ │ │ │ └── simple.css
│ │ │ └── sass/
│ │ │ └── simple.sass
│ │ ├── projects_test.rb
│ │ └── test_helper.rb
│ └── units/
│ ├── configuration_test.rb
│ ├── frameworks_test.rb
│ ├── shared_extension_paths_test.rb
│ ├── test_helper.rb
│ └── urls_test.rb
├── import-once/
│ ├── .gitignore
│ ├── Gemfile
│ ├── Gemfile_sass_3_2
│ ├── LICENSE.txt
│ ├── README.md
│ ├── Rakefile
│ ├── VERSION
│ ├── compass-import-once.gemspec
│ ├── lib/
│ │ ├── compass/
│ │ │ ├── import-once/
│ │ │ │ ├── activate.rb
│ │ │ │ ├── engine.rb
│ │ │ │ ├── importer.rb
│ │ │ │ └── version.rb
│ │ │ └── import-once.rb
│ │ └── compass-import-once.rb
│ └── test/
│ ├── diff_as_string.rb
│ ├── fixtures/
│ │ ├── _simple_partial.scss
│ │ ├── basic.css
│ │ ├── basic.scss
│ │ ├── force_import.css
│ │ ├── force_import.scss
│ │ ├── with_globbing.css
│ │ └── with_globbing.scss
│ ├── import_once_test.rb
│ └── test_helper.rb
└── test_all.sh
================================================
FILE CONTENTS
================================================
================================================
FILE: .gitignore
================================================
*.gem
================================================
FILE: .travis.yml
================================================
language: ruby
rvm:
- 1.8.7
- 1.9.2
- 1.9.3
- jruby-18mode
- jruby-19mode
- rbx
- ree
- 2.0.0
- 2.1.0
- 2.2.0
sudo: false
env:
- CI_TEST=core
- CI_TEST=cli
gemfile:
- core/Gemfile
- cli/gemfiles/sass_3_3.gemfile
- cli/gemfiles/listen_2.gemfile
script: cd $CI_TEST && bundle exec rake
matrix:
exclude:
- gemfile: cli/gemfiles/sass_3_3.gemfile
env: CI_TEST=core
rvm: 1.8.7
- gemfile: cli/gemfiles/listen_2.gemfile
env: CI_TEST=core
rvm: 1.8.7
- gemfile: core/Gemfile
env: CI_TEST=cli
rvm: 1.8.7
- gemfile: cli/gemfiles/sass_3_3.gemfile
env: CI_TEST=core
rvm: 1.9.2
- gemfile: cli/gemfiles/listen_2.gemfile
env: CI_TEST=core
rvm: 1.9.2
- gemfile: core/Gemfile
env: CI_TEST=cli
rvm: 1.9.2
- gemfile: cli/gemfiles/sass_3_3.gemfile
env: CI_TEST=core
rvm: 1.9.3
- gemfile: cli/gemfiles/listen_2.gemfile
env: CI_TEST=core
rvm: 1.9.3
- gemfile: core/Gemfile
env: CI_TEST=cli
rvm: 1.9.3
- gemfile: cli/gemfiles/sass_3_3.gemfile
env: CI_TEST=core
rvm: jruby-18mode
- gemfile: cli/gemfiles/listen_2.gemfile
env: CI_TEST=core
rvm: jruby-18mode
- gemfile: core/Gemfile
env: CI_TEST=cli
rvm: jruby-18mode
- gemfile: cli/gemfiles/sass_3_3.gemfile
env: CI_TEST=core
rvm: jruby-19mode
- gemfile: cli/gemfiles/listen_2.gemfile
env: CI_TEST=core
rvm: jruby-19mode
- gemfile: core/Gemfile
env: CI_TEST=cli
rvm: jruby-19mode
- gemfile: cli/gemfiles/sass_3_3.gemfile
env: CI_TEST=core
rvm: rbx
- gemfile: cli/gemfiles/listen_2.gemfile
env: CI_TEST=core
rvm: rbx
- gemfile: core/Gemfile
env: CI_TEST=cli
rvm: rbx
- gemfile: cli/gemfiles/sass_3_3.gemfile
env: CI_TEST=core
rvm: ree
- gemfile: cli/gemfiles/listen_2.gemfile
env: CI_TEST=core
rvm: ree
- gemfile: core/Gemfile
env: CI_TEST=cli
rvm: ree
- gemfile: cli/gemfiles/sass_3_3.gemfile
env: CI_TEST=core
rvm: 2.0.0
- gemfile: cli/gemfiles/listen_2.gemfile
env: CI_TEST=core
rvm: 2.0.0
- gemfile: core/Gemfile
env: CI_TEST=cli
rvm: 2.0.0
- gemfile: cli/gemfiles/sass_3_3.gemfile
env: CI_TEST=core
rvm: 2.1.0
- gemfile: cli/gemfiles/listen_2.gemfile
env: CI_TEST=core
rvm: 2.1.0
- gemfile: core/Gemfile
env: CI_TEST=cli
rvm: 2.1.0
- gemfile: cli/gemfiles/listen_2.gemfile
env: CI_TEST=cli
rvm: 1.8.7
- gemfile: cli/gemfiles/listen_2.gemfile
env: CI_TEST=cli
rvm: 1.9.2
- gemfile: cli/gemfiles/listen_2.gemfile
env: CI_TEST=cli
rvm: jruby-18mode
- gemfile: cli/gemfiles/listen_2.gemfile
env: CI_TEST=cli
rvm: jruby-19mode
- gemfile: cli/gemfiles/listen_2.gemfile
env: CI_TEST=cli
rvm: ree
notifications:
irc: {channels: "irc.freenode.org#compass"}
campfire:
rooms:
secure: GXnvuoZ8BVMv+JwJIBb0Ey1ARbfeypmCvpmynykD5taooedTqwyTeT32jw1YTQAOuBewgeWW1H4bF10ySz0GWmu6X2sNx9CVYT1dFudoMvLtnvEmAe0JyyRuSCBFj45jP21eRUAACltxzyX4q/gh+zRIlaRin9YBo/Xv84gDzLw=
================================================
FILE: CONTRIBUTING.md
================================================
Contributing Stylesheets to Compass
===================================
**Please make all pull requests against the master branch**
Thank you for your interest in contributing to Compass. Our goal is to make it as easy
as we can for you to contribute changes to compass -- So if there's something here that
seems harder than it ought to be, please let us know.
If you find a bug **in this document**, you are bound to contribute a fix. Stop reading now
if you do not wish to abide by this rule.
**Step 1**: If you do not have a github account, create one.
**Step 2**: Fork Compass to your account. Go to the [main repo](http://github.com/chriseppstein/compass)
and click the fork button.

Now we're at a decision point. What kind of change do you intend to make?
* [Fix a typo (or some other trivial change)](#trivial-changes)
* [Documentation Changes](#documentation-changes)
* [Fixing Stylesheet Bugs](#stylesheet-bugs)
* [New Stylesheet Features](#stylesheet-changes)
* [Ruby Changes](#ruby-changes)
Here's some general information about the project you might find useful along the way:
* [Submitting Patches](#patches)
* [Project Structure](#project-structure)
* [General Philosophy](#project-philosophy)
* [Stylesheet Conventions](#stylesheet-conventions)
* [Miscellaneous Stuff](#faq)
* [Setting up Git](#setting-up-git)
* [Using Compass while Under Development](#running-local-code)
* [Running Tests](#running-tests)
* [Recovering from a cherry-pick or a rebase](#recovering-from-rebased-or-cherry-picked-changesets)
<h2 id="trivial-changes">Making Trivial Changes</h2>
Thanks to Github, making small changes is super easy. After forking the project navigate
to the file you want to change and click the edit link.

Change the file, write a commit message, and click the `Commit` button.

Now you need to get your change [accepted](#patches).
<h2 id="documentation-changes">Making Documentation Changes</h2>
The compass documentation is stored in two places. First, the `doc-src` directory is
where the documentation lives -- however much of the documentation is generated
from comments in the Sass files themselves. More information on [changing
documentation][documentation]. Once your changes are pushed, please
[submit them](#patches).
<h2 id="stylesheet-bugs">Fixing Stylesheet Bugs</h2>
**Step 3**: If this is a bug you discovered. Please [report it][issues] before working on a fix.
This helps us better understand the patch.
**Step 4**: Get [the code](#setting-up-git) if you haven't yet done so.
**Step 5**: Fix the bug and commit the changes. Please make sure to mention the bug
id in your commit message like so:
Fixed the display of the fizzlebuzz in IE6.
Closes GH-123.
**Step 6**: Verify the fix in as many browsers as you can as well as against your own
project. How to [use compass while changing it](#running-local-code).
**Step 7**: Make sure the tests pass. More info on [running tests](#running-tests)
If the tests fail, fix the tests or the stylesheets accordingly. If the tests, don't
fail, that means this aspect was not well enough tested. Please [add or augment
a test](#writing-tests).
You're done. Please [submit your changes](#patches).
<h2 id="stylesheet-changes">Making Stylesheet Changes</h2>
It is a good idea to discuss new features ideas with the compass users and developers
before building something. Please don't be shy; send an email to the [compass mailing
list](http://groups.google.com/group/compass-users).
Many feature ideas are good but not obviously a good fit for the compass core library.
In these cases, you can and should create a [compass extension][extensions]. Sometimes
this is because the concept does not align with the [compass philosophy](#project-philosophy).
But sometimes it's just because we think the idea needs time to bake. [Documentation on
making extensions.][extensions]
**Step 3**: Get [the code](#setting-up-git) if you haven't yet done so.
**Step 4**: Add the feature -- contact the mailing list if you have any questions.
**Step 5**: Add a test case. More info on [writing tests for compass](#writing-tests).
**Step 6**: Documentation - Add or update the reference documentation. Add
an example of using the feature. See the [doc readme for details][documentation].
You're done. Please [submit your changes](#patches).
<h2 id="ruby-changes">Making Ruby Changes</h2>
At this time, if you're a rubyist who's planning on working on the ruby-side of
things, it's assumed you know how to read code and use standard ruby tools like
rake, gem, bundler, test/unit, cucumber, rspec, etc. If you have any questions,
please ask. No changes will be accepted without accompanying tests.
<h2 id="patches">Submitting Patches</h2>
If you are submitting features that have more than one changeset, please create a
topic branch to hold the changes while they are pending merge and also to track
iterations to the original submission. To create a topic branch:
$ git checkout -b new_branch_name
... make more commits if needed ...
$ git push origin new_branch_name
You can now see these changes online at a url like:
http://github.com/your_user_name/compass/commits/new_branch_name
If you have single-commit patches, it is fine to keep them on master. But do keep in
mind that these changesets might be
[cherry-picked](#recovering-from-rebased-or-cherry-picked-changesets).
Once your changeset(s) are on github, select the appropriate branch containing your
changes and send a pull request. Make sure to choose the same upstream branch that
you developed against (probably stable or master). Most of the description of your
changes should be in the commit messages -- so no need to write a whole lot in the
pull request message. However, the pull request message is a good place to provide a
rationale or use case for the change if you think one is needed. More info on [pull
requests][pulls].

Pull requests are then managed like an issue from the [compass issues page][issues].
A code review will be performed by a compass core team member, and one of three outcomes
will result:
1. The change is rejected -- Not all changes are right for [compass's
philosophy](#project-philosophy). If your change is rejected it might be better
suited for a plugin, at least until it matures and/or proves itself with the users.
2. The change is rejected, *unless* -- Sometimes, there are missing pieces, or
other changes that need to be made before the change can be accepted. Comments
will be left on the commits indicating what issues need to be addressed.
3. The change is accepted -- The change is merged into compass, sometimes minor
changes are then applied by the committer after the merge.
<h2 id="project-structure">Project Structure</h2>
compass/
bin/
compass - CLI executable
devbin/ - development scripts after installing the bundle
doc-src/ - source for documentation
docs/ - generated documentation
features/ - tests for compass
frameworks/ - All frameworks in this directory are loaded automatically
compass/ - The compass framework
stylesheets/ - The compass libraries
templates/ - The compass project templates and patterns
blueprint/
stylesheets/ - The blueprint libraries
templates/ - The blueprint project templates and patterns
lib/
compass.rb - The main compass ruby library
compass/
app_integration/ - integration with app frameworks
commands/ - UI agnostic support for the CLI
configuration/ - support for project configuration
exec/ - UI code for the CLI
installers/ - support for installing templates
sass_extensions/ - enhancements to Sass
functions/ - Sass functions exposed by compass
monkey_patches/ - Changes to sass itself
test/ - unit tests
<h2 id="project-philosophy">General Philosophy</h2>
1. Users specify their own selectors. Compass never forces a user
to use a presentational class name.
2. Compass does not require javascript. It is a CSS framework.
3. Compass core is "design agnostic". This is why compass core has no
grid framework -- grids are not design agnostic.
4. Compass frameworks are not special. If compass can do it, so should an extension
be able.
5. Sass is awesome -- Compass should make sass more accessible and
demonstrate how to use Sass to its fullest potential.
6. Developing across browsers is hard and will always be hard. It takes
a community to get it right.
7. By default, Compass supports as many browsers as it can. Where it can't
it progressively enhances. Where it degrades, the documentation should
make a note. Deviation from this requires an excellent reason.
8. Compass is a proving ground for Sass features. The watcher and color
functions are examples of features that started in Compass and got
moved to Sass.
<h2 id="stylesheet-conventions">Stylesheet Conventions</h2>
1. All framework stylesheets are partials. Their filename begin with an underscore.
Otherwise, Sass will create stylesheets directly into the user's CSS directory.
2. Compass imports do not emit styles. There are a few limited exceptions to this like
the resets and base classes for inheritance.
3. Mixins with two-level defaults. Mixins often provide two levels of default
values. The first is a global default that can be overridden once. The second
is a default that can be overridden when the mixin is included.
4. Mixin argument names are part of the public API, make sure they are understandable and not
needlessly truncated or terse.
5. If adding a new folder of stylesheets, add a single stylesheet with the same name that
imports all of the stylesheets in the folder.
6. Try to avoid passing selectors as arguments. This is what mixins are for.
<h2 id="faq">Common Problems & Miscellaneous Info</h2>
<h3 id="setting-up-git">Setting up Git</h3>
Please follow [these instructions](http://help.github.com/git-email-settings/)
to set up your email address and attribution information.
Download your git repo:
git clone git@github.com:your_username/compass.git
Set up a remote to the main repo:
cd compass
git remote add chriseppstein git://github.com/chriseppstein/compass.git
Getting recent changes from the main repo:
git fetch chriseppstein
<h3 id="running-local-code">Using Compass while Under Development</h3>
1. Use the bin script. `/path/to/compass/bin/compass` is a version of the compass
command line that uses the local changes you have made. You can add `/path/to/compass/bin`
to your `$PATH`, or refer to it directly.
2. `gem build compass.gemspec`
3. `gem install compass-<version for the file that was just created>.gem` -- If installing to your
system gems, you'll probably need to add `sudo` to the front. If you don't know
what that means, you probably need to add `sudo` to the front.
4. In a [bundled][bundler] environment, you can configure your gem to use compass
while you work on it like so: `gem 'compass', :path => "/Users/myusername/some/path/to/compass"`
Bundler will perform some sort of charm on ruby to make it work.
5. Configuring ruby directly. If you're a ruby pro, you probably don't need to be
told that you can set compass on the load path like so: `export RUBYLIB=/Users/myusername/some/path/to/compass/lib`
<h3 id="running-tests">Running Tests</h3>
1. You must have Ruby installed on your system. After [setting up git](#setting-up-git),
change to the root directory of your git checkout of Compass.
`cd compass`
2. Install the bundler Ruby gem.
`gem install bundler`
If installing to your system gems, you'll probably need to add `sudo` to the
front of that command. If you don't know what that means, you probably need
to add `sudo` to the front.
3. Install development dependencies:
`bundle install --binstubs devbin`
4. Running core library and stylesheet tests:
`bundle exec rake test features`
5. Running behavior tests
`./devbin/cucumber`
If stylesheet tests fail, the output of the test project is captured in
`test/fixtures/stylesheets/<project>/saved/` and the error message will report where
the error was. Here's an example:

<h3 id="writing-tests">Writing Stylesheet Tests</h3>
Compass has stylesheet tests to ensure that:
- each stylesheet compiles
- each stylesheet can be imported directly without any other dependencies
- refactorings that should not affect the output, don't
At some point, it would be great to have a test system that verifies that the stylesheets
*work correctly* in various browsers. If you have ideas for how to accomplish this in a sane
way, please let us know.
In the `test/fixtures/stylesheets` directory, there are a number of compass projects.
The tests work by adding or updating the sass files, running the tests to make sure they fail,
and then changing the expected css output to make the test pass. It is rudimentary, but as
a safety net, it has caught a number of problems that might have been missed otherwise.
If you add a new stylesheet to compass, please make sure to add a new test stylesheet
that only imports the newly added stylesheet and add rules that use the new features in that
stylesheet.
<h3 id="recovering-from-rebased-or-cherry-picked-changesets">You cherry-picked/rebased
my changes. What should I do?</h3>
Depending on any number of reasons, including but not limited to the alignment of the stars,
Your changes might not be merged into compass using a simple merge. For instance, we might
decide to place a change against master into stable instead, or we might squish all your
changes together into a single commit at the time of merge, or we might want a change you've
submitted but not a change that it was placed onto top of. In these cases, there are
a couple of ways you can react:
1. If you have some changes on a branch that were not yet accepted, but other changes on that
branch were accepted then you should run the following command (make sure to fetch first):
`git checkout branch_name; git rebase chriseppstein/master` (assuming the change was applied
to the master branch)
2. If all your changes on the topic branch were accepted or you don't care to keep it around
anymore: `git checkout master; git branch -D branch_name; git push origin :branch_name`
[pulls]: http://help.github.com/pull-requests/
[issues]: http://github.com/chriseppstein/compass/issues
[documentation]: http://github.com/chriseppstein/compass/blob/stable/doc-src/README.markdown
[bundler]: http://gembundler.com/
[extensions]: /help/tutorials/extensions/
================================================
FILE: Guardfile
================================================
group :tests do
guard :test do
watch(%r{^lib/(.+)\.rb$}) { |m| "test/#{m[1]}_test.rb" }
watch(%r{^test/.+_test\.rb$})
watch(%r{^test/units/.+_test\.rb$})
watch('test/test_helper.rb') { "test" }
end
end
group :features do
guard :cucumber do
watch(%r{^features/.+\.feature$})
watch(%r{^features/support/.+$}) { 'features' }
watch(%r{^features/step_definitions/(.+)_steps\.rb$}) { |m| Dir[File.join("**/#{m[1]}.feature")][0] || 'features' }
end
end
================================================
FILE: LICENSE.markdown
================================================
Copyright (c) 2009-2014 Christopher M. Eppstein
Permission is hereby granted, free of charge, to any person obtaining
a copy of this software and associated documentation files (the
"Software"), to deal in the Software without restriction, including
without limitation the rights to use, copy, modify, merge, publish,
distribute, sublicense, and/or sell copies of the Software, and to
permit persons to whom the Software is furnished to do so, subject to
the following conditions:
The above copyright notice and this permission notice shall be
included in all copies or substantial portions of the Software.
No attribution is required by products that make use of this software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
Except as contained in this notice, the name(s) of the above copyright
holders shall not be used in advertising or otherwise to promote the sale,
use or other dealings in this Software without prior written authorization.
Contributors to this project agree to grant all rights to the copyright
holder of the primary product. Attribution is maintained in the source
control history of the product.
================================================
FILE: README.markdown
================================================
# Compass Stylesheet Authoring Framework
**Depreciated:** Compass is no longer supported.
Build Status: [](https://travis-ci.org/Compass/compass)
Code Quality: [](https://codeclimate.com/github/Compass/compass)
## Resources
* [Compass Homepage](http://compass-style.org/)
* [Installing Compass](http://compass-style.org/install/)
* [Compass Reference](http://compass-style.org/install/reference/)
## Author
Compass is written by [Chris Eppstein](http://chriseppstein.github.io/).<br>
Chris is a software engineer at [LinkedIn](http://www.linkedin.com/) and a member of the [Sass](https://github.com/nex3/sass) core team.
## Core Team Members
* [Scott Davis](https://github.com/scottdavis)
* [Miriam Suzanne](https://github.com/mirisuzanne)
* [Brandon Mathis](https://github.com/imathis)
## Major Contributors
* [Nico Hagenburger](https://github.com/hagenburger)
## License
Copyright (c) 2008-2014 Christopher M. Eppstein<br>
All Rights Reserved.<br>
Released under a [slightly modified MIT License](LICENSE.markdown).
================================================
FILE: Rakefile
================================================
GEMS = ['core', 'cli', 'import-once']
task :default => %w[test]
desc "Run all tests"
task :test do
sh %{./test_all.sh} do |ok, res|
Rake::Task["test_cleanup"].invoke if ok
end
end
desc "build gems"
task :build_gems => [:test] do
GEMS.each do |gem|
chdir gem do
if gem == 'cli'
sh "gem build compass.gemspec"
else
sh "gem build compass-#{gem}.gemspec"
end
end
end
end
desc "publish gems"
task :publish_gems => [:build_gems] do
GEMS.each do |gem|
chdir gem do
if gem == 'cli'
sh "gem push compass.gemspec"
else
sh "gem push compass-#{gem}.gemspec"
end
end
end
end
desc "Clean up all test files"
task :test_cleanup do
dirs = [
'core/devbin/',
'core/.sass-cache/',
'core/test/integrations/projects/busted_font_urls/tmp/',
'core/test/integrations/projects/busted_image_urls/tmp/',
'core/test/integrations/projects/compass/tmp/',
'core/test/integrations/projects/envtest/tmp/',
'core/test/integrations/projects/image_urls/tmp/',
'core/test/integrations/projects/relative/tmp/',
'core/test/integrations/projects/uses_only_stylesheets_ext/tmp/',
'core/test/integrations/projects/valid/tmp/',
'import-once/.sass-cache/'
]
dirs.each { |dir| rm_rf dir }
end
desc "Bundle Update"
task :bundle_update do
GEMS.each do |gem|
chdir gem do
sh "bundle update"
end
end
end
================================================
FILE: TODO.md
================================================
FYI: I'm abandoning the even/odd release numbering scheme in favor of using preview releases. Going forward the master branch will use the following release numbering:
* 0.11.0.alpha.N.shortsha (Not tagged)
* 0.11.0.beta.N (tagged, new features expected)
* 0.11.0.rc.N (tagged, no new features expected)
MUST:
* A proper welcome page for blueprint projects (or delete it)
* Rails Integration
NICE:
* some extension commands
* Better help for commands and patterns
* Color Palette extraction and management commands
v0.11
=====
Planned Release Date: Aug 2, 2010
This is a quick iteration release. The focus on turning out
even better documentation and some stylesheet updates and
enhancements that take better advantage of the Sass 3 features.
### Docs (can be done on stable)
* Improve the design
* Better tutorials and getting started guides.
* Terminal for Designers
* Better examples & example navigation
* Contribution guide:
* Compass stylesheets
* Compass ruby code
* Documentation patches
* SCSS Style Guide
* Bundler 1.0 support
* Upgrade nanoc
* Better search experience
* Search mixins and constants and code fragments that might use those.
* Awesome homepage that is better integrated with the docs.
* HTML5 the docs so they can run locally in offline mode.
### Compass Core
* Updates as necessary to the CSS3 module as the spec process develops.
* Typography module
### Blueprint
* Provide an option to use @extend in the blueprint grid
### Rails
* Fully integrated support of Rails 3
### Other
* Consider adding app integration with: Node.js, Django, Drupal, Wordpress
(Wherever opinionated layouts exist). Also, try to make one of these a plugin
to test out the concept.
* clean up all the argument names in preparation for keyword argument support from sass.
v0.12
=====
This release depends on Sass 3.2 and is aimed at taking advantage of
the new sass 3.2 feature set as well as really making the extensions
system come alive. Since I don't foresee any deprecations in Sass 3.2,
this will not be a coordinated release. Instead, this release will
trail Sass 3.2 by a month or two.
### Compass Core
* Figure out what to do about multiple attribute properties like background.
Might require list and function support from sass.
### Blueprint
* If sass 3.2 is out with @function support, use that for grid
calculations, otherwise punt to 1.0.
### Extensions
* Extension registry on compass-style.org.
* One step publishing via github + webhooks
* Easy install via CLI
* Local (per-user) extension repo with auto-discovery.
* Video showing how easy it is to create, publish, and install an extension.
v1.0 - Polaris
==============
### Blueprint
* If the @extend version of the grid is full of win, make it the default.
### Sassdoc
Extract the compass documentation system into a stand-alone project.
### Extensions
* Build basic docs and host them for all extensions using sassdoc.
* Support for selling extensions and taking a cut for umdf.org?
### Project Tools
* enable building project docs using the sassdoc tool.
v2.0
====
Version 2 is all about making compass easier to use. Compass and Sass
will have a GUI that makes it simple to manage your projects.
### GUI Prerelease 1
* Concept brainstorming
* mockups
* How can compass gui and sass gui interoperate or plug in.
### GUI Prerelease 2
Beta release as a separate install.
### GUI Prerelease 3
* Iterate based on feedback.
* Integrate with a Sass GUI.
* Embed the docs
### One-click Installers
Install compass and sass with one click
* Windows (Only if someone else wants to build and maintain it.)
* Mac (.dmg + drag & drop app or installer)
* Linux (Get distro packages going and in place for the 1.0 release)
================================================
FILE: cli/.gitignore
================================================
*.DS_Store
*.tmproj
*.lock
tmp/*
devbin
.sass-cache
test/tmp
test/fixtures/stylesheets/*/tmp
test/fixtures/stylesheets/*/saved
test/fixtures/stylesheets/empty
test/fixtures/stylesheets/*/sass/.sass-cache
test/fixtures/stylesheets/valid/css/*
pkg/*
compass-*.gem
coverage*
docs
.bundle
attic
devbin
.rvmrc
*.rbc
vendor/ruby
vendor
Gemfile.lock
*.pkg
RELEASE_VERSION
================================================
FILE: cli/Gemfile
================================================
source 'https://rubygems.org'
gemspec unless defined?(CI)
unless ENV['PKG']
gem "sass", "~> 3.3.13" unless defined?(CI)
gem "compass-core", :path => "../core" unless defined?(CI)
gem "compass-import-once", :path => "../import-once" unless defined?(CI)
gem 'sass-globbing', "~> 1.1.1"
gem "cucumber", "~> 1.2.1"
gem "rspec", "~> 2.0.0"
gem "compass-validator", "3.0.1"
gem "css_parser", "~> 1.0.1"
gem "rubyzip", "0.9.9"
gem 'mocha', '0.11.4'
gem 'minitest', '2.12.1'
gem 'diff-lcs', '~> 1.1.2'
gem 'rake'
gem 'json', '~> 1.7.7', :platforms => :ruby_18
gem 'true', "~> 0.2.3"
gem 'test-unit', '~> 3.0.9'
# Warning be carful adding OS dependant gems above this line it will break the CI server please
# place them below so they are excluded
unless ENV["CI"]
gem 'rb-fsevent'
gem 'ruby_gntp'
gem "ruby-prof", :platforms => [:mri_19, :mri_20]
gem "rcov", :platforms => :mri_18
gem 'guard', :platforms => [:mri_20]
gem 'guard-test', :platforms => [:mri_20]
gem 'guard-cucumber', :platforms => [:mri_20]
# gem 'packager'
gem 'colorize'
gem 'pry'
end
end
================================================
FILE: cli/Rakefile
================================================
sh "git checkout lib/compass/generated_version.rb"
require 'rubygems'
require 'rubygems/package_task'
require 'rake/testtask'
require 'fileutils'
if ENV["PKG"]
$: << File.expand_path(File.dirname(__FILE__))+"/lib"
else
require 'bundler/setup'
end
unless ENV['CI']
require 'colorize'
require 'fileutils'
end
begin
require 'rake/dsl_definition'
rescue LoadError
# pass
end
# ----- Default: Testing ------
task :default => [:test, :features]
begin
require 'cucumber'
require 'cucumber/rake/task'
Cucumber::Rake::Task.new(:features) do |t|
#t.cucumber_opts = %w{--format progress}
end
rescue LoadError
$stderr.puts "cannot load cucumber"
end
Rake::TestTask.new :test do |t|
t.libs << 'lib'
t.libs << 'test'
test_files = FileList['test/**/*_test.rb']
test_files.exclude('test/rails/*', 'test/haml/*')
t.test_files = test_files
t.verbose = true
end
Rake::TestTask.new :units do |t|
t.libs << 'lib'
t.libs << 'test'
test_files = FileList['test/units/**/*_test.rb']
test_files.exclude('test/rails/*', 'test/haml/*')
t.test_files = test_files
t.verbose = true
end
Rake::TestTask.new :integrations do |t|
t.libs << 'lib'
t.libs << 'test'
test_files = FileList['test/integrations/**/*_test.rb']
test_files.exclude('test/rails/*', 'test/haml/*')
t.test_files = test_files
t.verbose = true
end
namespace :git do
task :clean do
sh "git", "clean", "-fdx"
end
end
begin
require 'cucumber/rake/task'
require 'rcov/rcovtask'
namespace :rcov do
Cucumber::Rake::Task.new(:cucumber) do |t|
t.rcov = true
t.rcov_opts = %w{--exclude osx\/objc,gems\/,spec\/,features\/ --aggregate coverage.data}
t.rcov_opts << %[-o "coverage"]
end
Rcov::RcovTask.new(:units) do |rcov|
rcov.libs << 'lib'
test_files = FileList['test/**/*_test.rb']
test_files.exclude('test/rails/*', 'test/haml/*')
rcov.pattern = test_files
rcov.output_dir = 'coverage'
rcov.verbose = true
rcov.rcov_opts = %w{--exclude osx\/objc,gems\/,spec\/,features\/ --aggregate coverage.data}
rcov.rcov_opts << %[-o "coverage" --sort coverage]
end
desc "Run both specs and features to generate aggregated coverage"
task :all do |t|
rm "coverage.data" if File.exist?("coverage.data")
Rake::Task["rcov:units"].invoke
Rake::Task["rcov:cucumber"].invoke
end
end
rescue LoadError => e
puts "WARNING: #{e}"
end
namespace :test do
debug = false
desc "update test expectations if needed"
task :update do
Rake::Task['test:update:fixtures'].invoke
end
task :debug do
debug = true
Rake::Task['test:update:fixtures'].invoke
end
namespace :update do
EXPECTED = 'css'
TMP = 'tmp'
#desc "update fixture expectations for test cases if needed"
task :fixtures do
fixtures = File.join('test/fixtures/stylesheets/compass'.split('/'))
# remove any existing temporary files
FileUtils.rm_rf(File.join(File.dirname(__FILE__), fixtures, TMP, '.'))
# compile the fixtures
puts "checking test cases..."
CHECKMARK = "\u2713 "
filter = debug ? '--trace' : "| grep 'error.*#{fixtures}'"
errors = %x[compass compile #{fixtures} #{filter}]
# check for compilation errors
if not errors.empty?
puts "Please fix the following errors before proceeding:".colorize(:red) if not debug
puts errors
else
# check to see what's changed
diff = %x[diff -r #{File.join(fixtures, EXPECTED, '')} #{File.join(fixtures, TMP, '')}]
# ignore non-CSS files in css/
diff.gsub!(/^Only in .*\/css\/(.*)\:.*[^.]/, '')
if diff.empty?
puts "#{CHECKMARK}Cool! Looks like all the tests are up to date".colorize(:green)
else
puts "The following changes were found:"
puts "===================================="
# check for new or removed expectations
diff.scan(/^Only in .*\/(#{EXPECTED}|#{TMP})\/(.*)\: (.*).css/).each do |match|
config = (match[0] == TMP) ? [:green, '>', 'NEW TEST'] : [:red, '<', 'DELETED']
puts "[#{File.join(match[1], match[2])}] #{config[2].colorize(config[0])}".colorize(:cyan)
new_file = File.join(File.dirname(__FILE__), fixtures, match[0], match[1], match[2]) + '.css'
puts File.read(new_file).gsub(/^(.*)/, config[1] + ' \1').colorize(config[0])
end
diff = diff.gsub(/^diff\s\-r\s.*\/tmp\/(.*).css/, '[\1]'.colorize(:cyan))
diff = diff.gsub(/^Only in .*\n?/, '')
diff = diff.gsub(/^(\<.*)/, '\1'.colorize(:red))
diff = diff.gsub(/^(\>.*)/, '\1'.colorize(:green))
diff = diff.gsub(/^(\d+.*)/, '\1'.colorize(:cyan))
puts diff
puts "===================================="
puts "Are all of these changes expected? [y/n]".colorize(:yellow)
if (($stdin.gets.chomp)[0] == 'y')
FileUtils.rm_rf(File.join(File.dirname(__FILE__), fixtures, EXPECTED, '.'))
FileUtils.cp_r(File.join(File.dirname(__FILE__), fixtures, TMP, '.'), File.join(File.dirname(__FILE__), fixtures, EXPECTED))
puts "#{CHECKMARK}Thanks! The test expectations have been updated".colorize(:green)
else
puts "Please manually update the test cases and expectations".colorize(:red)
end
end
end
end
end
end
# Release tasks
gemspec_file = FileList['compass.gemspec'].first
spec = eval(File.read(gemspec_file), binding, gemspec_file)
spec.files.delete("VERSION")
spec.files.delete("VERSION_NAME")
def spec.bump!
segments = version.to_s.split(".")
segments[-1] = segments.last.succ
self.version = Gem::Version.new(segments.join("."))
end
# Set SAME_VERSION when moving to a new major version and you want to specify the new version
# explicitly instead of bumping the current version.
# E.g. rake build SAME_VERSION=true
spec.bump! unless ENV["SAME_VERSION"]
desc "Run tests and build compass-#{spec.version}.gem"
task :build => [:default, :gem]
task :gem => :release_version
task :release_version do
open("lib/compass/generated_version.rb", "w") do |f|
f.write(<<VERSION_EOF)
module Compass
VERSION = "#{spec.version}"
VERSION_NAME = "#{File.read('VERSION_NAME').strip}"
end
VERSION_EOF
end
end
desc "Make the prebuilt gem compass-#{spec.version}.gem public."
task :publish => [:record_version, :push_gem, :tag]
desc "Build & Publish version #{spec.version}"
task :release => [:build, :publish]
Gem::PackageTask.new(spec) do |pkg|
pkg.need_zip = true
pkg.need_tar = true
end
desc "Record the new version in version control for posterity"
task :record_version do
unless ENV["SAME_VERSION"]
open(FileList["VERSION"].first, "w") do |f|
f.write(spec.version.to_s)
end
sh "git add VERSION"
sh "git checkout lib/compass/generated_version.rb"
sh %Q{git commit -m "Bump version to #{spec.version}."}
end
end
desc "Tag the repo as #{spec.version} and push the code and tag."
task :tag do
sh "git tag -a -m 'Version #{spec.version}' #{spec.version}"
sh "git push --tags origin #{`git rev-parse --abbrev-ref HEAD`}"
end
desc "Push compass-#{spec.version}.gem to the rubygems server"
task :push_gem do
sh "gem push pkg/compass-#{spec.version}.gem"
end
================================================
FILE: cli/VERSION
================================================
1.0.3
================================================
FILE: cli/VERSION_NAME
================================================
Polaris
================================================
FILE: cli/bin/compass
================================================
#!/usr/bin/env ruby
# The compass command line utility
# This allows compass to run easily from a git checkout without install.
def fallback_load_path(path)
retried = false
begin
yield
rescue LoadError
unless retried
$: << path
retried = true
retry
end
raise
end
end
fallback_load_path(File.join(File.dirname(__FILE__), '..', 'lib')) do
require 'compass'
require 'compass/exec'
end
if defined?(Bundler)
require 'bundler/shared_helpers'
Bundler.require :assets if Bundler::SharedHelpers.in_bundle?
end
runner = Proc.new do
Compass::Exec::SubCommandUI.new(ARGV).run!
end
if ARGV.delete("--profile")
require 'ruby-prof'
RubyProf.start
exit_code = runner.call
result = RubyProf.stop
# Print a flat profile to text
printer = RubyProf::FlatPrinter.new(result)
printer.print(STDERR, 0)
exit exit_code
else
exit runner.call || 1
end
================================================
FILE: cli/compass.gemspec
================================================
path = File.expand_path("lib", File.dirname(__FILE__))
$:.unshift(path) unless $:.include?(path)
require 'compass/version'
Gem::Specification.new do |gemspec|
gemspec.name = "compass"
gemspec.version = Compass::VERSION # Update VERSION file to set this.
gemspec.description = "Compass is a Sass-based Stylesheet Framework that streamlines the creation and maintenance of CSS."
gemspec.homepage = "http://compass-style.org"
gemspec.authors = ["Chris Eppstein", "Scott Davis", "Eric M. Suzanne", "Brandon Mathis", "Nico Hagenburger"]
gemspec.email = "chris@eppsteins.net"
gemspec.executables = %w(compass)
gemspec.require_paths = %w(lib)
gemspec.rubygems_version = "1.3.5"
gemspec.summary = %q{A Real Stylesheet Framework}
gemspec.add_dependency 'sass', '>= 3.3.13', '< 3.5'
gemspec.add_dependency 'compass-core', "~> #{File.read(File.join(File.dirname(__FILE__),"..","core","VERSION")).strip}"
gemspec.add_dependency 'compass-import-once', "~> #{File.read(File.join(File.dirname(__FILE__),"..","import-once","VERSION")).strip}"
gemspec.add_dependency 'chunky_png', '~> 1.2'
gemspec.add_dependency 'rb-fsevent', '>= 0.9.3'
gemspec.add_dependency 'rb-inotify', '>= 0.9'
gemspec.post_install_message = <<-MESSAGE
Compass is charityware. If you love it, please donate on our behalf at http://umdf.org/compass Thanks!
MESSAGE
gemspec.files = %w(LICENSE.markdown VERSION VERSION_NAME Rakefile)
gemspec.files += Dir.glob("bin/*")
gemspec.files += Dir.glob("data/**/*")
gemspec.files += Dir.glob("frameworks/**/*")
gemspec.files += Dir.glob("lib/**/*")
gemspec.files += Dir.glob("test/**/*.*")
gemspec.files -= Dir.glob("test/fixtures/stylesheets/*/saved/**/*.*")
gemspec.test_files = Dir.glob("test/**/*.*")
gemspec.test_files -= Dir.glob("test/fixtures/stylesheets/*/saved/**/*.*")
gemspec.test_files += Dir.glob("features/**/*.*")
end
================================================
FILE: cli/features/command_line.feature
================================================
Feature: Command Line
In order to manage my stylesheets
As a user on the command line
I want to create a new project
Scenario: Install a project without a framework
When I create a project using: compass create my_project
Then a directory my_project/ is created
And a configuration file my_project/config.rb is created
And a sass file my_project/sass/screen.scss is created
And a sass file my_project/sass/print.scss is created
And a sass file my_project/sass/ie.scss is created
And a css file my_project/stylesheets/screen.css is created
And a css file my_project/stylesheets/print.css is created
And a css file my_project/stylesheets/ie.css is created
And I am told how to link to /stylesheets/screen.css for media "screen, projection"
And I am told how to link to /stylesheets/print.css for media "print"
And I am told how to conditionally link "IE" to /stylesheets/ie.css for media "screen, projection"
Scenario: Install a project with specific directories
When I create a project using: compass create custom_project --using compass --sass-dir sass --css-dir css --images-dir assets/imgs
Then a directory custom_project/ is created
And a directory custom_project/sass/ is created
And a directory custom_project/css/ is created
And a sass file custom_project/sass/screen.scss is created
And a css file custom_project/css/screen.css is created
Scenario: Creating a bare project
When I create a project using: compass create bare_project --bare
Then a directory bare_project/ is created
And a configuration file bare_project/config.rb is created
And a directory bare_project/sass/ is created
And a directory bare_project/stylesheets/ is not created
And I am congratulated
And I am told that I can place stylesheets in the sass subdirectory
And I am told how to compile my sass stylesheets
Scenario: Compiling a project with errors
Given I am using the existing project in test/fixtures/stylesheets/valid
And the project has a file named "sass/error.scss" containing:
"""
.broken {
"""
When I run: compass compile
Then the command exits with a non-zero error code
Scenario: Creating a bare project with a framework
When I create a project using: compass create bare_project --using blueprint --bare
Then an error message is printed out: A bare project cannot be created when a framework is specified.
And the command exits with a non-zero error code
Scenario: Compiling an existing project.
Given I am using the existing project in test/fixtures/stylesheets/valid
When I run: compass compile
Then a directory tmp/ is created
And a css file tmp/simple.css is created
Scenario: Compiling an existing project with a specified project
Given I am using the existing project in test/fixtures/stylesheets/valid
And I am in the parent directory
When I run: compass compile tmp_valid
Then a directory tmp_valid/tmp/ is created
And a css file tmp_valid/tmp/simple.css is created
Scenario: Recompiling a project with no changes
Given I am using the existing project in test/fixtures/stylesheets/valid
When I run: compass compile
And I run: compass compile
Scenario: compiling a specific file in a project
Given I am using the existing project in test/fixtures/stylesheets/valid
And I run: compass compile sass/simple.sass
Then a sass file sass/another_simple.scss is not mentioned
And a css file tmp/simple.css is reported written
And a css file tmp/simple.css is created
And a css file tmp/another_simple.css is not created
Scenario: Re-compiling a specific file in a project with no changes
Given I am using the existing project in test/fixtures/stylesheets/valid
When I run: compass compile
And I run: compass compile sass/simple.sass --force
Then a sass file sass/another_simple.scss is not mentioned
And a css file tmp/simple.css is reported written
Scenario: Basic help
When I run: compass help
Then I should see the following "primary" commands:
| clean |
| compile |
| create |
| init |
| watch |
And I should see the following "other" commands:
| config |
| extension |
| frameworks |
| help |
| imports |
| install |
| interactive |
| sprite |
| stats |
| unpack |
| validate |
| version |
Scenario: Recompiling a project with no material changes
Given I am using the existing project in test/fixtures/stylesheets/valid
When I run: compass compile
And I wait 1 second
And I touch sass/simple.sass
And I run: compass compile
Then a css file tmp/simple.css is reported written
Scenario: Recompiling a project with changes
Given I am using the existing project in test/fixtures/stylesheets/valid
When I run: compass compile
And I wait 1 second
And I add some sass to sass/simple.sass
And I run: compass compile
And a css file tmp/simple.css is reported written
Scenario: Cleaning a project
Given I am using the existing project in test/fixtures/stylesheets/valid
When I run: compass compile
And I run: compass clean
Then the following files are reported removed:
| .sass-cache/ |
| tmp/simple.css |
| tmp/another_simple.css |
And the following files are removed:
| .sass-cache/ |
| tmp/simple.css |
| tmp/another_simple.css |
@now
Scenario: Watching a project for changes
Given ruby supports fork
Given I am using the existing project in test/fixtures/stylesheets/valid
When I run: compass compile
And I run in a separate process: compass watch
And I wait 4 seconds
And I touch sass/simple.sass
And I wait 2 seconds
And I shutdown the other process
Then a css file tmp/simple.css is reported written
Scenario: Generate a compass configuration file
Given I should clean up the directory: config
When I run: compass config config/compass.rb --sass-dir sass --css-dir assets/css
Then a configuration file config/compass.rb is created
And the following configuration properties are set in config/compass.rb:
| property | value |
| sass_dir | sass |
| css_dir | assets/css |
Scenario Outline: Print out a configuration value
Given I am using the existing project in test/fixtures/stylesheets/valid
When I run: compass config -p <property>
Then I should see the following output: <value>
And the command exits <exit>
Examples:
| property | value | exit |
| extensions_dir | extensions | normally |
| extensions_path | $PROJECT_PATH/extensions | normally |
| css_dir | tmp | normally |
| css_path | $PROJECT_PATH/tmp | normally |
| sass_dir | sass | normally |
| sass_path | $PROJECT_PATH/sass | normally |
| foobar | ERROR: configuration property 'foobar' does not exist | with a non-zero error code |
@validator
Scenario: Validate the generated CSS
Given I am using the existing project in test/fixtures/stylesheets/valid
When I run: compass validate
Then my css is validated
And I am informed that my css is valid.
@stats
Scenario: Get stats for my project
Given I am using the existing project in test/fixtures/stylesheets/valid
When I run: bundle exec compass stats
Then I am told statistics for each file:
| Filename | Rules | Properties | Mixins Defs | Mixins Used | Filesize | CSS Selectors | CSS Properties | CSS Filesize |
| sass/simple.sass | \d+ | \d+ | \d+ | \d+ | \d+ K?B | \d+ | \d+ | \d+ K?B |
| sass/another_simple.scss | \d+ | \d+ | \d+ | \d+ | \d+ K?B | \d+ | \d+ | \d+ K?B |
| Total.* | \d+ | \d+ | \d+ | \d+ | \d+ K?B | \d+ | \d+ | \d+ K?B |
@listframeworks
Scenario: List frameworks registered with compass
When I run: compass frameworks
Then I should see the following lines of output:
| compass |
================================================
FILE: cli/features/extensions.feature
================================================
Feature: Extensions
In order to have an open source ecosystem for stylesheets
As a compass user
I can install extensions that others have created
And I can create and publish my own extensions
@listframeworks
Scenario: Extensions directory for stand_alone projects
Given I am using the existing project in test/fixtures/stylesheets/compass
And the "extensions" directory exists
And and I have a fake extension at extensions/testing
When I run: compass frameworks
Then the list of frameworks includes "testing"
@listframeworks
Scenario: Shared extensions directory
Given the "~/.compass/extensions" directory exists
And and I have a fake extension at ~/.compass/extensions/testing
And I am using the existing project in test/fixtures/stylesheets/compass
When I run: compass frameworks
Then the list of frameworks includes "testing"
@listframeworks
Scenario: Frameworks without templates
Given I am using the existing project in test/fixtures/stylesheets/uses_only_stylesheets_ext
When I run: compass frameworks
Then the list of frameworks includes "only_stylesheets"
================================================
FILE: cli/features/step_definitions/command_line_steps.rb
================================================
$:.unshift(File.expand_path(File.join(File.dirname(__FILE__), '../../test')))
require 'bundler/setup'
require 'test_helper'
require 'compass/exec'
include Compass::TestCaseHelper
include Compass::CommandLineHelper
include Compass::IoHelper
Before do
Compass.reset_configuration!
@cleanup_directories = []
@original_working_directory = Dir.pwd
end
After do
Dir.chdir @original_working_directory
@cleanup_directories.each do |dir|
FileUtils.rm_rf dir
end
end
Given "ruby supports fork" do
if RUBY_PLATFORM == "java"
pending
end
end
# Given Preconditions
Given %r{^I am using the existing project in ([^\s]+)$} do |project|
tmp_project = "tmp_#{File.basename(project)}"
@cleanup_directories << tmp_project
FileUtils.cp_r project, tmp_project
Dir.chdir tmp_project
end
Given %r{^I am in the parent directory$} do
Dir.chdir ".."
end
Given /^I should clean up the directory: (\w+)$/ do |directory|
@cleanup_directories << directory
end
Given %r{^the project has a file named "([^"]*)" containing:$} do |arg1, string|
File.open(arg1, "w") do |f|
f << string
end
end
# When Actions are performed
When /^I create a project using: compass create ([^\s]+) ?(.+)?$/ do |dir, args|
@cleanup_directories << dir
compass 'create', dir, *(args || '').split
end
When /^I initialize a project using: compass init ?(.+)?$/ do |args|
compass 'init', *(args || '').split
end
When /^I run: compass ([^\s]+) ?(.+)?$/ do |command, args|
compass command, *(args || '').split
end
When /^I run in a separate process: compass ([^\s]+) ?(.+)?$/ do |command, args|
unless @other_process = fork
@last_result = ''
@last_error = ''
Signal.trap("HUP") do
open('/tmp/last_result.compass_test.txt', 'w') do |file|
file.puts $stdout.string
end
open('/tmp/last_error.compass_test.txt', 'w') do |file|
file.puts $stderr.string
end
exit!
end
# this command will run forever
# we kill it with a HUP signal from the parent process.
args = (args || '').split
args << { :wait => 5 }
compass command, *args
exit!
end
end
When /^I shutdown the other process$/ do
Process.kill("HUP", @other_process)
Process.wait
@last_result = File.read('/tmp/last_result.compass_test.txt')
@last_error = File.read('/tmp/last_error.compass_test.txt')
end
When /^I touch ([^\s]+)$/ do |filename|
FileUtils.touch filename
end
When /^I wait ([\d.]+) seconds?$/ do |count|
sleep count.to_f
end
When /^I add some sass to ([^\s]+)$/ do |filename|
open(filename, "w+") do |file|
file.puts ".added .some .arbitrary"
file.puts " sass: code"
end
end
# Then postconditions
Then /^a directory ([^ ]+) is (not )?created$/ do |directory, negated|
File.directory?(directory).should == !negated
end
Then /an? \w+ file ([^ ]+) is (not )?removed/ do |filename, negated|
File.exists?(filename).should == !!negated
end
Then /an? \w+ file ([^ ]+) is (not )?created/ do |filename, negated|
File.exists?(filename).should == !negated
end
Then "the following files are reported removed:" do |table|
table.rows.each do |css_file|
#need to find a better way but this works for now
step %Q{a css file #{css_file.first} is reported removed}
end
end
Then "the following files are removed:" do |table|
table.rows.each do |css_file|
step %Q{a css file #{css_file.first} is removed}
end
end
Then /an? \w+ file ([^ ]+) is reported removed/ do |filename|
@last_result.should =~ /delete.*#{Regexp.escape(filename)}/
end
Then /an? \w+ file ([^ ]+) is reported written/ do |filename|
@last_result.should =~ /write.*#{Regexp.escape(filename)}/
end
Then /a \w+ file ([^ ]+) is (?:reported )?compiled/ do |filename|
@last_result.should =~ /compile.*#{Regexp.escape(filename)}/
end
Then /a \w+ file ([^ ]+) is reported unchanged/ do |filename|
@last_result.should =~ /unchanged.*#{Regexp.escape(filename)}/
end
Then /a \w+ file ([^ ]+) is reported identical/ do |filename|
@last_result.should =~ /identical.*#{Regexp.escape(filename)}/
end
Then /a \w+ file ([^ ]+) is reported overwritten/ do |filename|
@last_result.should =~ /overwrite.*#{Regexp.escape(filename)}/
end
Then /a \w+ file ([^ ]+) is not mentioned/ do |filename|
@last_result.should_not =~ /#{Regexp.escape(filename)}/
end
Then /I am told how to link to ([^ ]+) for media "([^"]+)"/ do |stylesheet, media|
@last_result.should =~ %r{<link href="#{stylesheet}" media="#{media}" rel="stylesheet" type="text/css" />}
end
Then /I am told how to conditionally link "([^"]+)" to ([^ ]+) for media "([^"]+)"/ do |condition, stylesheet, media|
@last_result.should =~ %r{<!--\[if #{condition}\]>\s+<link href="#{stylesheet}" media="#{media}" rel="stylesheet" type="text/css" />\s+<!\[endif\]-->}mi
end
Then /^an error message is printed out: (.+)$/ do |error_message|
@last_error.should =~ Regexp.new(Regexp.escape(error_message))
end
Then /^the command exits with a non\-zero error code$/ do
@last_exit_code.should_not == 0
end
Then /^the command exits normally$/ do
@last_exit_code.should == 0
end
Then /^I am congratulated$/ do
@last_result.should =~ /Congratulations!/
end
Then /^I am told that I can place stylesheets in the ([^\s]+) subdirectory$/ do |subdir|
@last_result.should =~ /You may now add sass stylesheets to the #{subdir} subdirectory of your project./
end
Then /^I am told how to compile my sass stylesheets$/ do
@last_result.should =~ /You must compile your sass stylesheets into CSS when they change.\nThis can be done in one of the following ways:/
end
Then /^I should be shown a list of "([^"]+)" commands$/ do |kind|
@last_result.should =~ /^#{kind.capitalize} Commands:$/
@last_command_list = []
found = false
indent = nil
@last_result.split("\n").each do |line|
if line =~ /^#{kind.capitalize} Commands:$/
found = true
elsif found && line =~ /^\s+/
@last_command_list << line
elsif found && line =~ /^$|^\w/
break
end
end
end
Then /^the list of commands should describe the ([^ ]+) command$/ do |command|
@last_result.should =~ /^\s+\* #{command}\s+- [A-Z].+$/
end
Then /^the following configuration properties are set in ([^ ]+):$/ do |config_file, table|
config = Compass::Configuration::FileData.new_from_file(config_file)
table.hashes.each do |hash|
config.send(hash['property']).should == hash['value']
end
end
Then /^my css is validated$/ do
if @last_error =~ /The Compass CSS Validator could not be loaded/
pending "Missing Dependency: sudo gem install compass-validator"
else
@last_result.should =~ /files? validated/
end
end
Then /^I am informed that my css is valid.$/ do
@last_result.should =~ /Result: Valid/
end
Then /^I am told statistics for each file:$/ do |table|
# table is a Cucumber::Ast::Table
table.raw.each do |row|
re = Regexp.new row.join(' *\| *')
@last_result.should =~ re
end
end
Then /^I should see the following "([^"]+)" commands:$/ do |kind, table|
step %Q{I should be shown a list of "#{kind}" commands}
commands = @last_command_list.map{|c| c =~ /^\s+\* ([^ ]+)\s+- [A-Z].+$/; [$1]}
table.diff!(commands)
end
Then /^the image ([^ ]+) has a size of (\d+)x(\d+)$/ do |file, width, height|
# see http://snippets.dzone.com/posts/show/805
size = File.open(file, "rb") {|io| io.read}[0x10..0x18].unpack('NN')
size.should == [width.to_i, height.to_i]
end
Then /^I should see the following lines of output:$/ do |table|
table.diff!([['compass']])
end
Then /^I should see the following output: (.+)$/ do |expected|
(@last_result.strip + @last_error.strip).should == expected.gsub(/\$PROJECT_PATH/,Dir.pwd).strip
end
================================================
FILE: cli/features/step_definitions/extension_steps.rb
================================================
Given /^the "([^\"]*)" directory exists$/ do |directory|
directory.gsub!('~', ENV["HOME"]) if directory.include?('~/')
FileUtils.mkdir_p directory
end
Given /^and I have a fake extension at (.*)$/ do |directory|
directory.gsub!('~', ENV["HOME"]) if directory.include?('~/')
FileUtils.mkdir_p File.join(directory, 'stylesheets')
FileUtils.mkdir_p File.join(directory, 'templates/project')
open(File.join(directory, 'templates/project/manifest.rb'),"w") do |f|
f.puts %Q{
description "This is a fake extension"
help "this is the fake help"
welcome_message "this is a fake welcome"
}
end
end
Then /^the list of frameworks includes "([^\"]*)"$/ do |framework|
@last_result.split("\n").map{|f| f.gsub(/(^\s+[*-]\s+)|(\s+$)/,'')}.should include(framework)
end
================================================
FILE: cli/gemfiles/listen_2.gemfile
================================================
CI=true
main_gemfile = File.expand_path(File.join(File.dirname(__FILE__), "..", "Gemfile"))
eval File.read(main_gemfile), nil, main_gemfile
gem 'sass', '~> 3.3.12'
gem 'compass', :path => "../"
gem 'compass-core', :path => "../../core"
gem 'compass-import-once', :path => "../../import-once"
gem 'listen', '~> 2.7.1'
gemspec :path=>"../"
================================================
FILE: cli/gemfiles/sass_3_3.gemfile
================================================
CI=true
main_gemfile = File.expand_path(File.join(File.dirname(__FILE__), "..", "Gemfile"))
eval File.read(main_gemfile), nil, main_gemfile
gem 'sass', "~> 3.3.12"
gem 'compass', :path => "../"
gem 'compass-core', :path => "../../core"
gem 'compass-import-once', :path => "../../import-once"
gemspec :path=>"../"
================================================
FILE: cli/gemfiles/sass_local.gemfile
================================================
CI=true
main_gemfile = File.expand_path(File.join(File.dirname(__FILE__), "..", "Gemfile"))
eval File.read(main_gemfile), nil, main_gemfile
gem 'sass', :path => "../../sass"
gem 'compass', :path => "../"
gemspec :path=>"../"
================================================
FILE: cli/lib/compass/actions.rb
================================================
module Compass
module Actions
attr_writer :logger
def logger
@logger ||= ::Compass::Logger.new
end
# copy/process a template in the compass template directory to the project directory.
def copy(from, to, options = nil, binary = false)
options ||= self.options if self.respond_to?(:options)
if binary
contents = File.new(from,"rb").read
else
contents = File.new(from).read
end
write_file to, contents, options, binary
end
# create a directory and all the directories necessary to reach it.
def directory(dir, options = nil)
options ||= self.options if self.respond_to?(:options)
options ||= {}
if File.exists?(dir) && File.directory?(dir)
# do nothing
elsif File.exists?(dir)
msg = "#{basename(dir)} already exists and is not a directory."
raise Compass::FilesystemConflict.new(msg)
else
log_action :directory, separate("#{basename(dir)}/"), options
FileUtils.mkdir_p(dir)
end
end
# Write a file given the file contents as a string
def write_file(file_name, contents, options = nil, binary = false)
options ||= self.options if self.respond_to?(:options)
skip_write = false
contents = process_erb(contents, options[:erb]) if options[:erb]
if File.exists?(file_name)
existing_contents = IO.read(file_name)
if existing_contents == contents
log_action :identical, basename(file_name), options
skip_write = true
elsif options[:force]
log_action :overwrite, basename(file_name), options
else
msg = "File #{basename(file_name)} already exists. Run with --force to force overwrite."
raise Compass::FilesystemConflict.new(msg)
end
else
log_action :create, basename(file_name), options
end
if skip_write
FileUtils.touch file_name
else
mode = "w"
mode << "b" if binary
open(file_name, mode) do |file|
file.write(contents)
end
end
end
def process_erb(contents, ctx = nil)
ctx = Object.new.instance_eval("binding") unless ctx.is_a? Binding
ERB.new(contents).result(ctx)
end
def remove(file_name)
file_name ||= ''
if File.directory?(file_name)
FileUtils.rm_rf file_name
log_action :remove, basename(file_name)+"/", options
elsif File.exists?(file_name)
File.unlink file_name
log_action :remove, basename(file_name), options
end
end
def basename(file)
relativize(file) {|f| File.basename(file)}
end
def relativize(path)
path = File.expand_path(path)
if path.index(working_path+File::SEPARATOR) == 0
path[(working_path+File::SEPARATOR).length..-1]
elsif block_given?
yield path
else
path
end
end
# Write paths like we're on unix and then fix it
def separate(path)
path.gsub(%r{/}, File::SEPARATOR)
end
# Removes the trailing separator, if any, from a path.
def strip_trailing_separator(path)
(path[-1..-1] == File::SEPARATOR) ? path[0..-2] : path
end
def log_action(action, file, options)
quiet = !!options[:quiet]
quiet = false if options[:loud] && options[:loud] == true
quiet = false if options[:loud] && options[:loud].is_a?(Array) && options[:loud].include?(action)
unless quiet
logger.record(action, file, options[:extra].to_s)
end
end
end
end
================================================
FILE: cli/lib/compass/app_integration/stand_alone/configuration_defaults.rb
================================================
module Compass
module AppIntegration
module StandAlone
module ConfigurationDefaults
def default_project_type
:stand_alone
end
def sass_dir_without_default
"sass"
end
def javascripts_dir_without_default
"javascripts"
end
def css_dir_without_default
"stylesheets"
end
def images_dir_without_default
"images"
end
def default_cache_dir
".sass-cache"
end
end
end
end
end
================================================
FILE: cli/lib/compass/app_integration/stand_alone/installer.rb
================================================
module Compass
module Installers
class Base
end
class ManifestInstaller < Base
end
end
module AppIntegration
module StandAlone
class Installer < Compass::Installers::ManifestInstaller
def init
directory targetize("")
super
end
def write_configuration_files(config_file = nil)
config_file ||= targetize('config.rb')
write_file config_file, config_contents
end
def config_files_exist?
File.exists? targetize('config.rb')
end
def config_contents
project_path, Compass.configuration.project_path = Compass.configuration.project_path, nil
Compass.configuration.serialize
ensure
Compass.configuration.project_path = project_path
end
def prepare
write_configuration_files unless config_files_exist? || !@manifest.generate_config?
end
def completed_configuration
nil
end
def finalize(options = {})
if options[:create] && !manifest.welcome_message_options[:replace]
puts <<-NEXTSTEPS
*********************************************************************
Congratulations! Your compass project has been created.
You may now add and edit sass stylesheets in the #{Compass.configuration.sass_dir} subdirectory of your project.
Sass files beginning with an underscore are called partials and won't be
compiled to CSS, but they can be imported into other sass stylesheets.
You can configure your project by editing the config.rb configuration file.
You must compile your sass stylesheets into CSS when they change.
This can be done in one of the following ways:
1. To compile on demand:
compass compile [path/to/project]
2. To monitor your project for changes and automatically recompile:
compass watch [path/to/project]
More Resources:
* Website: http://compass-style.org/
* Sass: http://sass-lang.com
* Community: http://groups.google.com/group/compass-users/
NEXTSTEPS
end
puts manifest.welcome_message if manifest.welcome_message
if manifest.has_stylesheet? && !manifest.welcome_message_options[:replace]
puts "\nTo import your new stylesheets add the following lines of HTML (or equivalent) to your webpage:"
puts stylesheet_links
end
end
def compilation_required?
@manifest.compile?
end
end
end
end
end
================================================
FILE: cli/lib/compass/app_integration/stand_alone.rb
================================================
%w(configuration_defaults installer).each do |lib|
require "compass/app_integration/stand_alone/#{lib}"
end
module Compass
module AppIntegration
module StandAlone
extend self
def installer(*args)
Installer.new(*args)
end
def configuration
Compass::Configuration::Data.new('stand_alone').
extend(ConfigurationDefaults)
end
end
end
end
================================================
FILE: cli/lib/compass/app_integration.rb
================================================
require "compass/app_integration/stand_alone"
module Compass
module AppIntegration
module Helpers
#attr_accessor :project_types
DEAFULT_PROJECT_TYPES = {
:stand_alone => "Compass::AppIntegration::StandAlone"
}
def init
@project_types ||= DEAFULT_PROJECT_TYPES.dup
end
def project_types
@project_types
end
def default?
@project_types.keys === DEAFULT_PROJECT_TYPES.keys
end
def lookup(type)
unless @project_types[type].nil?
eval @project_types[type]
else
raise Compass::Error, "No application integration exists for #{type}"
end
end
def register(type, klass)
@project_types[type] = klass
end
end
extend Helpers
init
end
end
================================================
FILE: cli/lib/compass/commands/base.rb
================================================
module Compass
module Commands
class Base
def self.register(command_name)
Compass::Commands[command_name] = self
end
include Actions
attr_accessor :working_path, :options
def initialize(working_path, options)
self.working_path = working_path.to_s
self.options = options
end
def execute
perform
end
def perform
raise StandardError.new("Not Implemented")
end
def successful?
!@failed
end
def failed!
@failed = true
end
protected
def framework
unless Compass::Frameworks[options[:framework]]
raise Compass::Error.new("No such framework: #{options[:framework].inspect}")
end
Compass::Frameworks[options[:framework]]
end
end
end
end
================================================
FILE: cli/lib/compass/commands/clean_project.rb
================================================
require 'compass/commands/project_base'
require 'compass/compiler'
module Compass
module Commands
module CleanProjectOptionsParser
def set_options(opts)
opts.banner = %Q{
Usage: compass clean [path/to/project] [options]
Description:
Remove generated files and the sass cache.
Options:
}.split("\n").map{|l| l.gsub(/^ */,'')}.join("\n")
super
end
end
class CleanProject < UpdateProject
register :clean
def initialize(working_path, options)
super
assert_project_directory_exists!
end
def perform
compiler = new_compiler_instance
compiler.clean!
Compass::SpriteImporter.find_all_sprite_map_files(Compass.configuration.generated_images_path).each do |sprite|
remove sprite
end
end
def determine_cache_location
Compass.configuration.cache_path || Sass::Plugin.options[:cache_location] || File.join(working_path, ".sass-cache")
end
class << self
def option_parser(arguments)
parser = Compass::Exec::CommandOptionParser.new(arguments)
parser.extend(Compass::Exec::GlobalOptionsParser)
parser.extend(Compass::Exec::ProjectOptionsParser)
parser.extend(CleanProjectOptionsParser)
end
def usage
option_parser([]).to_s
end
def primary; true; end
def description(command)
"Remove generated files and the sass cache"
end
def parse!(arguments)
parser = option_parser(arguments)
parser.parse!
parse_arguments!(parser, arguments)
parser.options
end
def parse_arguments!(parser, arguments)
if arguments.size > 0
parser.options[:project_name] = arguments.shift if File.directory?(arguments.first)
unless arguments.empty?
parser.options[:sass_files] = arguments.dup
parser.options[:force] = true
end
end
end
end
end
end
end
================================================
FILE: cli/lib/compass/commands/create_project.rb
================================================
require 'fileutils'
require 'compass/commands/stamp_pattern'
module Compass
module Commands
module CreateProjectOptionsParser
def set_options(opts)
if $command == "create"
opts.banner = %Q{
Usage: compass create path/to/project [options]
Description:
Create a new compass project at the path specified.
Options:
}.split("\n").map{|l| l.gsub(/^ */,'')}.join("\n")
opts.on_tail("--bare", "Don't generate any Sass or CSS files.") do
self.options[:bare] = true
end
else
opts.banner = %Q{
Usage: compass init project_type path/to/project [options]
Description:
Initialize an existing project at the path specified.
Supported Project Types:
* rails
Options:
}.split("\n").map{|l| l.gsub(/^ */,'')}.join("\n").strip
end
opts.on("--using PATTERN", "A framework's pattern to use when creating the project.") do |framework|
framework = framework.split('/', 2)
self.options[:framework] = framework[0]
self.options[:pattern] = framework[1]
end
opts.on("-x", "--syntax SYNTAX", [:sass, :scss], "Specify the syntax to use when generating stylesheets.", "One of sass or scss. Defaults to scss.") do |syntax|
self.options[:preferred_syntax] = syntax
end
opts.on("--prepare", "Prepare the project by only creating configuration files.") do
self.options[:prepare] = true
end
super
end
end
class CreateProject < StampPattern
register :create
register :init
class << self
def option_parser(arguments)
parser = Compass::Exec::CommandOptionParser.new(arguments)
parser.extend(Compass::Exec::GlobalOptionsParser)
parser.extend(Compass::Exec::ProjectOptionsParser)
parser.extend(CreateProjectOptionsParser)
end
def usage
option_parser([]).to_s
end
def description(command)
if command.to_sym == :create
"Create a new compass project"
else
"Add compass to an existing project"
end
end
def primary; true; end
def parse!(arguments)
parser = option_parser(arguments)
parse_options!(parser, arguments)
parse_arguments!(parser, arguments)
if parser.options[:framework] && parser.options[:bare]
raise Compass::Error, "A bare project cannot be created when a framework is specified."
end
set_default_arguments(parser)
parser.options
end
def parse_init!(arguments)
parser = option_parser(arguments)
parse_options!(parser, arguments)
if arguments.size > 0
parser.options[:project_type] = arguments.shift.to_sym
end
parse_arguments!(parser, arguments)
set_default_arguments(parser)
parser.options
end
def parse_options!(parser, arguments)
parser.parse!
parser
end
def parse_arguments!(parser, arguments)
if arguments.size == 1
parser.options[:project_name] = arguments.shift
elsif arguments.size == 0
# default to the current directory.
else
raise Compass::Error, "Too many arguments were specified."
end
end
def set_default_arguments(parser)
parser.options[:framework] ||= :compass
parser.options[:pattern] ||= "project"
end
end
def is_project_creation?
true
end
end
end
end
================================================
FILE: cli/lib/compass/commands/default.rb
================================================
module Compass
module Commands
module DefaultOptionsParser
def set_options(opts)
opts.on("--trace") do
self.options[:trace] = true
end
opts.on("-?", "-h", "--help") do
self.options[:command] = Proc.new do
Help.new(working_path, options.merge(:help_command => "help"))
end
end
opts.on("-q", "--quiet") do
self.options[:quiet] = true
end
opts.on("-v", "--version") do
self.options[:command] = Proc.new do
PrintVersion.new(working_path, options)
end
end
super
end
end
class Default < Base
class << self
def option_parser(arguments)
parser = Compass::Exec::CommandOptionParser.new(arguments)
parser.extend(DefaultOptionsParser)
end
# def usage
# $stderr.puts caller.join("\n")
# "XXX"
# end
def parse!(arguments)
parser = option_parser(arguments)
parser.parse!
parser.options[:command] ||= Proc.new do
Help.new(working_path, options.merge(:help_command => "help"))
end
parser.options
end
end
def execute
instance_eval(&options[:command]).execute
end
end
end
end
================================================
FILE: cli/lib/compass/commands/extension_command.rb
================================================
require 'fileutils'
require 'compass/commands/base'
module Compass
module Commands
module ExtensionsOptionParser
def set_options(opts)
opts.banner = %Q{
Usage: compass extension install EXTENSION_NAME [options]
compass extension uninstall EXTENSION_NAME [options]
compass extension list
Description:
Manage the list of extensions on your system.
Compass to all of your compass projects.
Example:
compass extension install sassy-buttons
compass extension uninstall sassy-buttons
}
super
end
end
class ExtensionCommand < Base
register :extension
class << self
def option_parser(arguments)
parser = Compass::Exec::CommandOptionParser.new(arguments)
parser.extend(ExtensionsOptionParser)
end
def usage
option_parser([]).to_s
end
def description(command)
"Manage the list of compass extensions on your system"
end
def parse!(arguments)
{:arguments => arguments}
end
end
include InstallerCommand
def initialize(working_path, options)
super(working_path, options)
end
# all commands must implement perform
def perform
require 'rubygems/gem_runner'
Gem::GemRunner.new.run(options[:arguments])
end
end
end
end
================================================
FILE: cli/lib/compass/commands/help.rb
================================================
module Compass
module Commands
module HelpOptionsParser
def set_options(opts)
banner = %Q{Usage: compass help [command]
Description:
The Compass Stylesheet Authoring Framework helps you
build and maintain your stylesheets and makes it easy
for you to use stylesheet libraries provided by others.
Donating:
Compass is charityware. If you find it useful please make
a tax deductable donation: http://umdf.org/compass
To get help on a particular command please specify the command.
}
primary_commands = Compass::Commands.all.select do |c|
cmd = Compass::Commands[c]
cmd.respond_to?(:primary) && cmd.primary
end
other_commands = Compass::Commands.all - primary_commands
banner << command_list("Primary Commands:", primary_commands)
banner << command_list("Other Commands:", other_commands)
banner << "\nAvailable Frameworks & Patterns:\n\n"
banner << Compass::Frameworks.pretty_print
banner << "\nGlobal Options:\n"
opts.banner = banner
super
end
def command_list(header, commands)
list = "#{header}\n"
commands.sort_by{|c| c.to_s}.each do |command|
list << " * #{command}"
if Compass::Commands[command].respond_to? :description
list << "\t- #{Compass::Commands[command].description(command)}"
end
list << "\n"
end
list
end
end
class Help < Base
register :help
class << self
def option_parser(arguments)
parser = Compass::Exec::CommandOptionParser.new(arguments)
parser.extend(Compass::Exec::GlobalOptionsParser)
parser.extend(HelpOptionsParser)
end
def usage
option_parser([]).to_s
end
def description(command)
"Get help on a compass command or extension"
end
def parse!(arguments)
parser = option_parser(arguments)
parser.parse!
parser.options[:help_command] = arguments.shift || 'help'
parser.options
end
end
def execute
if Compass::Commands.command_exists? options[:help_command]
$command = options[:help_command]
puts Compass::Commands[options[:help_command]].usage
$command = "help"
elsif Compass::Frameworks.template_exists? options[:help_command]
puts Compass::Frameworks.template_usage(options[:help_command])
else
raise OptionParser::ParseError, "No such command: #{options[:help_command]}"
end
end
end
end
end
================================================
FILE: cli/lib/compass/commands/imports.rb
================================================
module Compass
module Commands
class Imports < ProjectBase
attr_accessor :options
register :imports
def initialize(working_path, options)
super
end
def execute
print ::Compass::Frameworks::ALL.map{|f|
"-I #{f.stylesheets_directory}"
}.join(' ')
end
class << self
def description(command)
"Emit an imports suitable for passing to the sass command-line."
end
def usage
"Usage: compass imports\n\n" +
"Prints out the imports known to compass.\n"+
"Useful for passing imports to the sass command line:\n" +
" sass -r compass `compass imports` a_file_using_compass.sass"
end
def parse!(arguments)
if arguments.join("").strip.size > 0
raise OptionParser::ParseError, "This command takes no options or arguments."
else
{}
end
end
end
end
end
end
================================================
FILE: cli/lib/compass/commands/installer_command.rb
================================================
require 'compass/installers'
module Compass
module Commands
module InstallerCommand
include Compass::Installers
def configure!
add_project_configuration
Compass.add_configuration(options, 'command_line')
Compass.discover_extensions!
Compass.add_configuration(installer.completed_configuration, 'installer')
end
def app
@app ||= Compass::AppIntegration.lookup(Compass.configuration.project_type)
end
def installer
@installer ||= if options[:bare]
Compass::Installers::BareInstaller.new(*installer_args)
else
app.installer(*installer_args)
end
end
def installer_args
[template_directory(options[:pattern] || "project"), project_directory, options]
end
end
end
end
================================================
FILE: cli/lib/compass/commands/interactive.rb
================================================
require 'compass/commands/project_base'
require 'compass/commands/update_project'
module Compass
module Commands
module InteractiveOptionsParser
def set_options(opts)
opts.banner = %Q{
Usage: compass interactive [path/to/project] [options]
Description:
Interactively evaluate SassScript
Options:
}.strip.split("\n").map{|l| l.gsub(/^ {0,10}/,'')}.join("\n")
super
end
end
class Interactive < ProjectBase
register :interactive
def initialize(working_path, options)
super
end
def perform
require 'sass/repl'
Sass::Repl.new.run
end
class << self
def option_parser(arguments)
parser = Compass::Exec::CommandOptionParser.new(arguments)
parser.extend(Compass::Exec::GlobalOptionsParser)
parser.extend(Compass::Exec::ProjectOptionsParser)
parser.extend(InteractiveOptionsParser)
end
def usage
option_parser([]).to_s
end
def description(command)
"Interactively evaluate SassScript"
end
def parse!(arguments)
parser = option_parser(arguments)
parser.parse!
parser.options
end
end
end
end
end
================================================
FILE: cli/lib/compass/commands/list_frameworks.rb
================================================
module Compass
module Commands
class ListFrameworks < ProjectBase
attr_accessor :options
register :frameworks
def initialize(working_path, options)
super
end
def execute
if options[:quiet]
Compass::Frameworks::ALL.each do |framework|
puts framework.name unless framework.name =~ /^_/
end
else
puts "Available Frameworks & Patterns:\n\n"
puts Compass::Frameworks.pretty_print
end
end
class << self
def option_parser(arguments)
parser = Compass::Exec::CommandOptionParser.new(arguments)
parser.extend(Compass::Exec::GlobalOptionsParser)
end
def usage
option_parser([]).to_s
end
def description(command)
"List the available frameworks"
end
def parse!(arguments)
parser = option_parser(arguments)
parser.parse!
parser.options
end
end
end
end
end
================================================
FILE: cli/lib/compass/commands/print_version.rb
================================================
module Compass
module Commands
module VersionOptionsParser
def set_options(opts)
opts.banner = %Q{Usage: compass version [options]
Options:
}
opts.on_tail("-?", "-h", "--help", "Print out this message.") do
puts opts
exit
end
opts.on("-q", "--quiet", "Just print the version string.") do
self.options[:quiet] = true
end
opts.on("--major", "Print the major version number") do
self.options[:major] = true
self.options[:custom] = true
end
opts.on("--minor", "Print up to the minor version number") do
self.options[:major] = true
self.options[:minor] = true
self.options[:custom] = true
end
opts.on("--patch", "Print up to the patch version number") do
self.options[:major] = true
self.options[:minor] = true
self.options[:patch] = true
self.options[:custom] = true
end
end
end
class PrintVersion < Base
register :version
class << self
def option_parser(arguments)
parser = Compass::Exec::CommandOptionParser.new(arguments)
parser.extend(VersionOptionsParser)
end
def usage
option_parser([]).to_s
end
def description(command)
"Print out version information"
end
def parse!(arguments)
parser = option_parser(arguments)
parser.parse!
parser.options
end
def long_output_string
lines = []
lines << "Compass #{::Compass.version[:string]}"
if name = ::Compass.version[:name]
lines.last << " (#{name})"
end
lines << "Copyright (c) 2008-#{Time.now.year} Chris Eppstein"
lines << "Released under the MIT License."
lines << "Compass is charityware."
lines << "Please make a tax deductable donation for a worthy cause: http://umdf.org/compass"
lines.join("\n")
end
end
attr_accessor :options
def initialize(working_path, options)
self.options = options
end
def execute
if options[:custom]
version = ""
version << "#{Compass.version[:major]}" if options[:major]
version << ".#{Compass.version[:minor]}" if options[:minor]
version << ".#{Compass.version[:patch]}" if options[:patch]
puts version
elsif options[:quiet]
puts ::Compass.version[:string]
else
puts self.class.long_output_string
end
end
end
end
end
================================================
FILE: cli/lib/compass/commands/project_base.rb
================================================
require 'fileutils'
require 'pathname'
require 'compass/commands/base'
require 'compass/commands/installer_command'
module Compass
module Commands
class ProjectBase < Base
attr_accessor :project_directory, :project_name, :options
def initialize(working_path, options = {})
super(working_path, options)
self.project_name = determine_project_name(working_path, options)
Compass.add_configuration({:project_path => determine_project_directory(working_path, options)}, "implied")
configure!
end
def execute
super
end
protected
def configure!
add_project_configuration
Compass.add_configuration(options, "command_line")
Compass.discover_extensions! unless skip_extension_discovery?
end
def add_project_configuration
defaults = Compass.configuration_for(options, "cli_defaults")
if options[:project_type]
project_type_config = Compass.configuration_for(options[:project_type])
project_type_config.inherit_from!(Compass.default_configuration)
defaults.inherit_from!(project_type_config)
end
Compass.add_project_configuration(options[:configuration_file], :defaults => defaults) do
options[:project_type]
end
end
def projectize(path)
Compass.projectize(path)
end
def project_directory
Compass.configuration.project_path
end
def project_css_subdirectory
Compass.configuration.css_dir
end
def project_src_subdirectory
Compass.configuration.sass_dir
end
def project_images_subdirectory
Compass.configuration.images_dir
end
def assert_project_directory_exists!
if File.exists?(project_directory) && !File.directory?(project_directory)
raise Compass::FilesystemConflict.new("#{project_directory} is not a directory.")
elsif !File.directory?(project_directory)
raise Compass::Error.new("#{project_directory} does not exist.")
end
end
private
def determine_project_name(working_path, options)
if options[:project_name]
File.basename(strip_trailing_separator(options[:project_name]))
else
File.basename(working_path)
end
end
def determine_project_directory(working_path, options)
if options[:project_name]
if absolute_path?(options[:project_name])
options[:project_name]
else
File.join(working_path, options[:project_name])
end
else
working_path
end
end
def absolute_path?(path)
# Pretty basic implementation
path.index(File::SEPARATOR) == 0 || path.index(':') == 1
end
def skip_extension_discovery?
false
end
end
end
end
================================================
FILE: cli/lib/compass/commands/project_stats.rb
================================================
require 'compass/commands/project_base'
require 'compass/commands/update_project'
module Compass
module Commands
module StatsOptionsParser
def set_options(opts)
opts.banner = %Q{
Usage: compass stats [path/to/project] [options]
Description:
Compile project at the path specified (or the current
directory if not specified) and then compute statistics
for the sass and css files in the project.
Options:
}.strip.split("\n").map{|l| l.gsub(/^ {0,10}/,'')}.join("\n")
super
end
end
class ProjectStats < UpdateProject
register :stats
def initialize(working_path, options)
super
assert_project_directory_exists!
end
def perform
super
require 'compass/stats'
compiler = new_compiler_instance
sass_files = sorted_sass_files(compiler)
total_label = "Total (#{sass_files.size} files):"
rows = [[ :-, :-, :-, :-, :-, :-, :-, :-, :- ],
[ 'Filename', 'Rules', 'Properties', 'Mixins Defs', 'Mixins Used', 'Filesize', 'CSS Selectors', 'CSS Properties', 'CSS Filesize' ],
[ :-, :-, :-, :-, :-, :-, :-, :-, :- ]]
maximums = [ total_label.length, 5, 10, 14, 11, 13, 13, 14, 14 ]
alignments = [ :left, :right, :right, :right, :right, :right, :right, :right, :right ]
delimiters = [ ['| ', ' |'], [' ', ' |'], [' ', ' |'], [' ', ' |'], [' ', ' |'], [' ', ' |'], [' ', ' |'], [' ', ' |'], [' ', ' |'] ]
formatters = [ nil, nil, nil, nil, nil, :kb, nil, nil, :kb ]
totals = [ total_label, 0, 0, 0, 0, 0, 0, 0, 0 ]
columns = rows.first.size
sass_files.each do |sass_file|
css_file = compiler.corresponding_css_file(sass_file) unless sass_file[0..0] == '_'
row = filename_columns(sass_file)
row += sass_columns(sass_file)
row += css_columns(css_file)
row.each_with_index do |c, i|
maximums[i] = [maximums[i].to_i, c.size].max
totals[i] = totals[i] + c.to_i if i > 0
end
rows << row
end
rows << [:-] * columns
rows << totals.map{|t| t.to_s}
rows << [:-] * columns
rows.each do |row|
row.each_with_index do |col, i|
print pad(col, maximums[i], :align => alignments[i], :left => delimiters[i].first, :right => delimiters[i].last, :formatter => formatters[i])
end
print "\n"
end
if @missing_css_parser
puts "\nInstall #{@missing_css_parser} to enable stats on your css files:\n\n\tgem install #{@missing_css_parser}"
end
end
def pad(c, max, options = {})
options[:align] ||= :left
if c == :-
filler = '-'
c = ''
else
filler = ' '
end
c = send(:"format_#{options[:formatter]}", c) if options[:formatter]
spaces = max - c.size
filled = filler * [spaces,0].max
"#{options[:left]}#{filled if options[:align] == :right}#{c}#{filled if options[:align] == :left}#{options[:right]}"
end
def format_kb(v)
return v unless v =~ /^\d+$/
v = Integer(v)
if v < 1024
"#{v} B"
else
v = v / 1024.0
"#{v.ceil} KB"
end
end
def sorted_sass_files(compiler)
sass_files = compiler.sass_files
sass_files.map! do |s|
filename = Compass.deprojectize(s, File.join(Compass.configuration.project_path, Compass.configuration.sass_dir))
[s, File.dirname(filename), File.basename(filename)]
end
sass_files = sass_files.sort_by do |s,d,f|
File.join(d, f[0] == ?_ ? f[1..-1] : f)
end
sass_files.map!{|s,d,f| s}
end
def filename_columns(sass_file)
filename = Compass.deprojectize(sass_file, working_path)
[filename]
end
def sass_columns(sass_file)
sf = Compass::Stats::SassFile.new(sass_file)
sf.analyze!
%w(rule_count prop_count mixin_def_count mixin_count file_size).map do |t|
sf.send(t).to_s
end
end
def css_columns(css_file)
if File.exists?(css_file)
cf = Compass::Stats::CssFile.new(css_file)
cf.analyze!
%w(selector_count prop_count file_size).map do |t|
cf.send(t).to_s
end
else
return [ '--', '--' , '--']
end
rescue LoadError => e
@missing_css_parser = e.message =~ /iconv/ ? "iconv" : "css_parser"
return [ 'DISABLED', 'DISABLED', 'DISABLED' ]
end
class << self
def option_parser(arguments)
parser = Compass::Exec::CommandOptionParser.new(arguments)
parser.extend(Compass::Exec::GlobalOptionsParser)
parser.extend(Compass::Exec::ProjectOptionsParser)
parser.extend(StatsOptionsParser)
end
def usage
option_parser([]).to_s
end
def description(command)
"Report statistics about your stylesheets"
end
def primary; false; end
def parse!(arguments)
parser = option_parser(arguments)
parser.parse!
parse_arguments!(parser, arguments)
parser.options
end
def parse_arguments!(parser, arguments)
if arguments.size == 1
parser.options[:project_name] = arguments.shift
elsif arguments.size == 0
# default to the current directory.
else
raise Compass::Error, "Too many arguments were specified."
end
end
end
end
end
end
================================================
FILE: cli/lib/compass/commands/project_structure.rb
================================================
require 'compass/commands/project_base'
require 'compass/commands/update_project'
module Compass
module Commands
module StructureOptionsParser
def set_options(opts)
opts.banner = %Q{
Usage: compass structure [path/to/project] [options]
Description:
Display the import structure of your stylesheets.
Options:
}.strip.split("\n").map{|l| l.gsub(/^ {0,10}/,'')}.join("\n")
super
end
end
class ProjectStats < UpdateProject
register :structure
def initialize(working_path, options)
super
assert_project_directory_exists!
end
def perform
@compiler = new_compiler_instance
(options[:sass_files] || sorted_sass_files).each do |sass_file|
print_tree(Compass.projectize(sass_file))
end
end
def print_tree(file, depth = 0, importer = @compiler.importer)
puts ((depth > 0 ? "| " : " ") * depth) + "+- " + Compass.deprojectize(file)
@compiler.staleness_checker.send(:compute_dependencies, file, importer).each do |(dep, dep_importer)|
print_tree(dep, depth + 1, dep_importer)# unless Compass.deprojectize(dep)[0...1] == "/"
end
end
def sorted_sass_files
sass_files = @compiler.sass_files
sass_files.map! do |s|
filename = Compass.deprojectize(s, File.join(Compass.configuration.project_path, Compass.configuration.sass_dir))
[s, File.dirname(filename), File.basename(filename)]
end
sass_files = sass_files.sort_by do |s,d,f|
File.join(d, f[0] == ?_ ? f[1..-1] : f)
end
sass_files.map!{|s,d,f| s}
end
class << self
def option_parser(arguments)
parser = Compass::Exec::CommandOptionParser.new(arguments)
parser.extend(Compass::Exec::GlobalOptionsParser)
parser.extend(Compass::Exec::ProjectOptionsParser)
parser.extend(StructureOptionsParser)
end
def usage
option_parser([]).to_s
end
def description(command)
"Report statistics about your stylesheets"
end
def primary; false; end
def parse!(arguments)
parser = option_parser(arguments)
parser.parse!
parse_arguments!(parser, arguments)
parser.options
end
def parse_arguments!(parser, arguments)
if arguments.size > 0
parser.options[:project_name] = arguments.shift if File.directory?(arguments.first)
parser.options[:sass_files] = arguments
end
end
end
end
end
end
================================================
FILE: cli/lib/compass/commands/registry.rb
================================================
module Compass::Commands
module Registry
def register(name, command_class)
@commands ||= Hash.new
@commands[name.to_sym] = command_class
end
def get(name)
return unless name
@commands ||= Hash.new
@commands[name.to_sym] || @commands[abbreviation_of(name)]
end
def abbreviation_of(name)
re = /^#{Regexp.escape(name)}/
matching = @commands.keys.select{|k| k.to_s =~ re}
if matching.size == 1
matching.first
elsif name =~ /^-/
nil
elsif matching.size > 1
raise Compass::Error, "Ambiguous abbreviation '#{name}'. Did you mean one of: #{matching.join(", ")}"
else
raise Compass::Error, "Command not found: #{name}"
end
end
def abbreviation?(name)
re = /^#{Regexp.escape(name)}/
@commands.keys.detect{|k| k.to_s =~ re}
end
def command_exists?(name)
@commands ||= Hash.new
name && (@commands.has_key?(name.to_sym) || abbreviation?(name))
end
def all
@commands.keys
end
alias_method :[], :get
alias_method :[]=, :register
end
extend Registry
end
================================================
FILE: cli/lib/compass/commands/sprite.rb
================================================
require 'compass/commands/project_base'
require 'compass/commands/update_project'
module Compass
module Commands
module SpriteOptionsParser
def set_options(opts)
opts.on("-f SPRITE_FILE") do |output_file|
self.options[:output_file] = output_file
end
opts.on("--skip-overrides", "Skip the generation of sprite overrides") do |skip_overrides|
self.options[:skip_overrides] = skip_overrides
end
opts.banner = %Q{
Usage: compass sprite [options] "images/path/to/sprites/*.png"
Description:
Generate a sprite import based on the given sprite directory.
Alternatively, you can simply do this in your sass files:
@import "sprite-folder/*.png"
And a magical, custom made sprite file will be imported.
Options:
}.strip.split("\n").map{|l| l.gsub(/^ {0,10}/,'')}.join("\n")
super
end
end
class Sprite < ProjectBase
register :sprite
def initialize(working_path, options)
super
assert_project_directory_exists!
end
def perform
relative_uri = options[:uri].gsub(/^#{Compass.configuration.images_dir}\//, '')
name = Compass::SpriteImporter.sprite_name(relative_uri)
sprites = Compass::SpriteImporter.new
options[:output_file] ||= File.join(Compass.configuration.sass_path, "sprites", "_#{name}.#{Compass.configuration.preferred_syntax}")
options[:skip_overrides] ||= false
contents = Compass::SpriteImporter.content_for_images(relative_uri, name, options[:skip_overrides])
if options[:output_file][-4..-1] != "scss"
contents = Sass::Engine.new(contents, Compass.sass_engine_options.merge(:syntax => :scss)).to_tree.to_sass
end
directory File.dirname(options[:output_file])
write_file options[:output_file], contents
end
class << self
def option_parser(arguments)
parser = Compass::Exec::CommandOptionParser.new(arguments)
parser.extend(Compass::Exec::GlobalOptionsParser)
parser.extend(Compass::Exec::ProjectOptionsParser)
parser.extend(SpriteOptionsParser)
end
def usage
option_parser([]).to_s
end
def description(command)
"Generate an import for your sprites."
end
def parse!(arguments)
parser = option_parser(arguments)
parser.parse!
parse_arguments!(parser, arguments)
parser.options
end
def parse_arguments!(parser, arguments)
parser.options[:uri] = arguments.shift
unless arguments.size == 0
raise Compass::Error, "Please specify at least one image to sprite."
end
end
end
end
end
end
================================================
FILE: cli/lib/compass/commands/stamp_pattern.rb
================================================
require 'fileutils'
require 'compass/commands/base'
require 'compass/commands/update_project'
module Compass
module Commands
module StampPatternOptionsParser
def set_options(opts)
opts.banner = %Q{Usage: compass install extension/pattern [path/to/project] [options]
Description:
Install an extension's pattern into your compass project
Example:
compass install blueprint/buttons
Options:
}
opts.on("-x", "--syntax SYNTAX", [:sass, :scss], "Specify the syntax to use when generating stylesheets.", "One of sass or scss. Defaults to scss.") do |syntax|
self.options[:preferred_syntax] = syntax
end
super
end
end
class StampPattern < ProjectBase
register :install
class << self
def option_parser(arguments)
parser = Compass::Exec::CommandOptionParser.new(arguments)
parser.extend(Compass::Exec::GlobalOptionsParser)
parser.extend(Compass::Exec::ProjectOptionsParser)
parser.extend(StampPatternOptionsParser)
end
def usage
option_parser([]).to_s
end
def description(command)
"Install an extension's pattern into your compass project"
end
def parse!(arguments)
parser = option_parser(arguments)
parser.parse!
parse_arguments!(parser, arguments)
parser.options
end
def parse_arguments!(parser, arguments)
if arguments.size == 0
raise OptionParser::ParseError, "Please specify a pattern."
end
pattern = arguments.shift.split('/', 2)
parser.options[:framework] = pattern[0]
parser.options[:pattern] = pattern[1]
if arguments.size > 0
parser.options[:project_name] = arguments.shift
end
if arguments.size > 0
raise OptionParser::ParseError, "Unexpected trailing arguments: #{arguments.join(" ")}"
end
end
end
include InstallerCommand
def initialize(working_path, options)
super(working_path, options)
end
# all commands must implement perform
def perform
installer.init
installer.run(:skip_finalization => true, :skip_preparation => !is_project_creation?)
UpdateProject.new(working_path, options).perform if installer.compilation_required?
installer.finalize(options.merge(:create => is_project_creation?))
end
def is_project_creation?
false
end
def template_directory(pattern)
File.join(framework.templates_directory, pattern)
end
end
end
end
================================================
FILE: cli/lib/compass/commands/unpack_extension.rb
================================================
require 'compass/commands/project_base'
require 'fileutils'
module Compass
module Commands
module ExtensionOptionsParser
def set_options(opts)
opts.banner = %Q{
Usage: compass unpack EXTENSION
Description:
Copy an extension into your extensions folder for easy access to the source code.
This makes it easier to peruse the source in unfamiliar projects. It is not recommended
that you change other extensions' source -- this makes it hard to take updates from
the original author. The following extensions are available:
FRAMEWORKS
Options:
}.strip.split("\n").map{|l| l.gsub(/^ {0,10}/,'')}.join("\n")
opts.banner.gsub!(/FRAMEWORKS/,Compass::Frameworks.pretty_print(true))
super
end
end
class UnpackExtension < ProjectBase
register :unpack
def initialize(working_path, options)
super
assert_project_directory_exists!
end
def perform
framework = Compass::Frameworks[options[:framework]]
unless framework
raise Compass::Error, "No extension named \"#{options[:framework]}\" was found."
end
files = Dir["#{framework.path}/**/*"]
extension_dir = File.join(Compass.configuration.extensions_path, framework.name)
FileUtils.rm_rf extension_dir
FileUtils.mkdir_p extension_dir
write_file File.join(extension_dir, "DO_NOT_MODIFY"), readme(framework)
files.each do |f|
next if File.directory?(f)
ending = f[(framework.path.size+1)..-1]
destination = File.join(extension_dir, ending)
FileUtils.mkdir_p(File.dirname(destination))
copy f, destination
end
puts "\nYou have unpacked \"#{framework.name}\""
puts
puts readme(framework)
end
def readme(framework)
%Q{| This is a copy of the "#{framework.name}" extension.
|
| It now overrides the original which was found here:
|
| #{framework.path}
|
| Unpacking an extension is useful when you need to easily peruse the
| extension's source. You might find yourself tempted to change the
| stylesheets here. If you do this, you'll find it harder to take
| updates from the original author. Sometimes this seems like a good
| idea at the time, but in a few months, you'll probably regret it.
|
| In the future, if you take an update of this framework, you'll need to run
|
| compass unpack #{framework.name}
|
| again or remove this unpacked extension.
|}.gsub(/^\s*\| ?/,"")
end
def skip_extension_discovery?
true
end
class << self
def option_parser(arguments)
parser = Compass::Exec::CommandOptionParser.new(arguments)
parser.extend(Compass::Exec::GlobalOptionsParser)
parser.extend(Compass::Exec::ProjectOptionsParser)
parser.extend(ExtensionOptionsParser)
end
def usage
option_parser([]).to_s
end
def description(command)
"Copy an extension into your extensions folder."
end
def parse!(arguments)
parser = option_parser(arguments)
parser.parse!
parse_arguments!(parser, arguments)
parser.options
end
def parse_arguments!(parser, arguments)
if arguments.size == 1
parser.options[:framework] = arguments.shift
elsif arguments.size == 0
raise Compass::Error, "Please specify an extension to unpack."
else
raise Compass::Error, "Too many arguments were specified."
end
end
end
end
end
end
================================================
FILE: cli/lib/compass/commands/update_project.rb
================================================
require 'compass/commands/project_base'
require 'compass/compiler'
module Compass
module Commands
module CompileProjectOptionsParser
def set_options(opts)
opts.banner = %Q{
Usage: compass compile [path/to/project] [path/to/project/src/file.sass ...] [options]
Description:
compile project at the path specified or the current directory if not specified.
Options:
}.split("\n").map{|l| l.gsub(/^ */,'')}.join("\n")
opts.on("--[no-]sourcemap", "Generate a sourcemap during compilation.") do |sm|
self.options[:sourcemap] = sm
end
opts.on("--time", "Display compilation times.") do
self.options[:time] = true
end
opts.on("--debug-info", "Turns on sass's debuging information") do
self.options[:debug_info]= true
end
opts.on("--no-debug-info", "Turns off sass's debuging information") do
self.options[:debug_info]= false
end
super
end
end
class UpdateProject < ProjectBase
register :compile
def initialize(working_path, options)
super
assert_project_directory_exists!
end
def perform
compiler = new_compiler_instance
check_for_sass_files!(compiler)
prepare_project!(compiler)
compiler.compile!
if compiler.error_count > 0
compiler.logger.red do
compiler.logger.log "Compilation failed in #{compiler.error_count} files."
end
failed!
end
end
def prepare_project!(compiler)
if options[:project_name]
Compass.configuration.project_path = File.expand_path(options[:project_name])
end
if config_file = new_config?(compiler)
compiler.logger.record :modified, relativize(config_file)
compiler.logger.record :clean, relativize(Compass.configuration.css_path)
compiler.clean!
end
end
# Determines if the configuration file is newer than any css file
def new_config?(compiler)
config_file = Compass.detect_configuration_file
return false unless config_file
config_mtime = File.mtime(config_file)
compiler.file_list.each do |(_, css_filename, _)|
return config_file if File.exists?(css_filename) && config_mtime > File.mtime(css_filename)
end
nil
end
def check_for_sass_files!(compiler)
file_list = compiler.file_list
if file_list.empty?
message = "Compass can't find any Sass files to compile.\nIs your compass configuration correct?.\nIf you're trying to start a new project, you have left off the directory argument.\n"
message << "Run \"compass -h\" to get help."
raise Compass::Error, message
elsif missing = file_list.find {|(sass_file, _, _)| !File.exist?(sass_file)}
raise Compass::Error, "File not found: #{missing[0]}"
end
end
def new_compiler_instance
Compass::SassCompiler.new(compiler_options)
end
def compiler_options
transfer_options(options, {}, :time, :debug_info, :only_sass_files, :force, :quiet)
end
def transfer_options(from, to, *keys)
keys.each do |k|
to[k] = from[k] unless from[k].nil?
end
to
end
class << self
def option_parser(arguments)
parser = Compass::Exec::CommandOptionParser.new(arguments)
parser.extend(Compass::Exec::GlobalOptionsParser)
parser.extend(Compass::Exec::ProjectOptionsParser)
parser.extend(CompileProjectOptionsParser)
end
def usage
option_parser([]).to_s
end
def primary; true; end
def description(command)
"Compile Sass stylesheets to CSS"
end
def parse!(arguments)
parser = option_parser(arguments)
parser.parse!
parse_arguments!(parser, arguments)
parser.options
end
def parse_arguments!(parser, arguments)
if arguments.size > 0
parser.options[:project_name] = arguments.shift if File.directory?(arguments.first)
unless arguments.empty?
parser.options[:only_sass_files] = absolutize(*arguments)
end
end
end
def absolutize(*paths)
paths.map {|path| File.expand_path(path) }
end
end
end
end
end
================================================
FILE: cli/lib/compass/commands/validate_project.rb
================================================
require 'compass/commands/project_base'
require 'compass/commands/update_project'
module Compass
module Commands
module ValidationOptionsParser
def set_options(opts)
opts.banner = %Q{
Usage: compass validate [path/to/project] [options]
Description:
Compile project at the path specified or the current
directory if not specified and then validate the
generated CSS.
Options:
}.strip.split("\n").map{|l| l.gsub(/^ {0,10}/,'')}.join("\n")
super
end
end
class ValidateProject < ProjectBase
register :validate
def initialize(working_path, options)
super
assert_project_directory_exists!
end
def perform
require 'compass/validator'
UpdateProject.new(working_path, options).perform
Dir.chdir Compass.configuration.project_path do
Validator.new(project_css_subdirectory).validate()
end
end
class << self
def option_parser(arguments)
parser = Compass::Exec::CommandOptionParser.new(arguments)
parser.extend(Compass::Exec::GlobalOptionsParser)
parser.extend(Compass::Exec::ProjectOptionsParser)
parser.extend(ValidationOptionsParser)
end
def usage
option_parser([]).to_s
end
def description(command)
"Validate your generated css."
end
def parse!(arguments)
parser = option_parser(arguments)
parser.parse!
parse_arguments!(parser, arguments)
parser.options
end
def parse_arguments!(parser, arguments)
if arguments.size == 1
parser.options[:project_name] = arguments.shift
elsif arguments.size == 0
# default to the current directory.
else
raise Compass::Error, "Too many arguments were specified."
end
end
end
end
end
end
================================================
FILE: cli/lib/compass/commands/watch_project.rb
================================================
# encoding: UTF-8
require 'fileutils'
require 'pathname'
require 'compass/commands/update_project'
require "compass/sass_compiler"
module Compass
module Commands
module WatchProjectOptionsParser
def set_options(opts)
super
opts.banner = %Q{
Usage: compass watch [path/to/project] [path/to/project/src/file.sass ...] [options]
Description:
watch the project for changes and recompile when they occur.
Options:
}.split("\n").map{|l| l.gsub(/^ */,'')}.join("\n")
opts.on("--poll", :NONE, "Check periodically if there's been changes.") do
self.options[:poll] = 1 # check every 1 second.
end
end
end
class WatchProject < UpdateProject
register :watch
attr_accessor :last_update_time, :last_sass_files
def perform
compiler = new_compiler_instance
compiler.logger.time = true if options[:time]
prepare_project!(compiler)
compiler.logger.log ">>> #{compiler.logger.color(:green)}Compass is watching for changes.#{compiler.logger.color(:clear)} #{compiler.logger.color(:red)}Press Ctrl-C to Stop.#{compiler.logger.color(:clear)}"
begin
compiler.watch!(:additional_watch_paths => additional_watch_paths, &method(:notify_watches))
happy_styling!(compiler.logger)
rescue Interrupt
happy_styling!(compiler.logger)
end
end
def happy_styling!(logger)
logger.log "\n#{logger.color(:yellow)}★★★ #{logger.color(:blue)}Happy Styling!#{logger.color(:yellow)} ★★★#{logger.color(:clear)}"
end
def compiler_options
super.merge(:poll => options[:poll], :full_exception => true)
end
def additional_watch_paths
Compass.configuration.watches.map do |watch|
pathname = Pathname.new(File.join(Compass.configuration.project_path, watch.glob))
real_path = nil
pathname.ascend do |p|
if p.exist?
real_path = p
break
end
end
real_path
end.compact.uniq
end
def notify_watches(modified, added, removed)
project_path = Compass.configuration.project_path
files = {:modified => modified,
:added => added,
:removed => removed}
run_once, run_each = Compass.configuration.watches.partition {|w| w.run_once_per_changeset?}
run_once.each do |watcher|
if file = files.values.flatten.detect{|f| watcher.match?(f) }
action = files.keys.detect{|k| files[k].include?(file) }
watcher.run_callback(project_path, relative_to(file, project_path), action)
end
end
run_each.each do |watcher|
files.each do |action, list|
list.each do |file|
if watcher.match?(file)
watcher.run_callback(project_path, relative_to(file, project_path), action)
end
end
end
end
end
def relative_to(f, dir)
Pathname.new(f).relative_path_from(Pathname.new(dir))
rescue ArgumentError # does not share a common path.
f
end
class << self
def description(command)
"Compile Sass stylesheets to CSS when they change"
end
def option_parser(arguments)
parser = Compass::Exec::CommandOptionParser.new(arguments)
parser.extend(Compass::Exec::GlobalOptionsParser)
parser.extend(Compass::Exec::ProjectOptionsParser)
parser.extend(CompileProjectOptionsParser)
parser.extend(WatchProjectOptionsParser)
end
end
end
end
end
================================================
FILE: cli/lib/compass/commands/write_configuration.rb
================================================
require 'compass/commands/project_base'
module Compass
module Commands
module ConfigurationOptionsParser
def set_options(opts)
opts.banner = %Q{
Usage: compass config [path/to/config_file.rb] [options]
Description:
Generate a configuration file for the options specified.
Compass will recognize configuration files in the
following locations relative to the project root:
* #{Compass::Configuration::Helpers::KNOWN_CONFIG_LOCATIONS.join("
* ")}
Any other location, and you'll need to specify it when working with the command line tool using the -c option.
Options:
}.strip.split("\n").map{|l| l.gsub(/^ {0,10}/,'')}.join("\n")
opts.on("--debug [PROPERTY]", "Debug your configuration by printing out details.") do |prop|
self.options[:debug] = prop.nil? ? true : prop.to_sym
end
opts.on("-p PROPERTY", "--property PROPERTY", "Print out the value of a particular configuration property") do |prop|
self.options[:display] = prop.to_sym
end
super
end
end
class WriteConfiguration < ProjectBase
register :config
include InstallerCommand
def initialize(working_path, options)
super
assert_project_directory_exists!
end
def add_project_configuration
Compass.add_project_configuration
end
def perform
if options[:display]
if Compass.configuration.respond_to?(options[:display])
puts Compass.configuration.send(options[:display])
else
raise Compass::Error, "ERROR: configuration property '#{options[:display]}' does not exist"
end
elsif options[:debug]
puts "Configuration sources:"
c = Compass.configuration
while c
print c.name
c = c.inherited_data
print ", " if c
end
print "\n"
Compass.configuration.debug.each do |prop, values|
if options[:debug].is_a?(Symbol)
next unless prop == options[:debug]
end
puts "***** #{prop} = #{values.first[:resolved].inspect} *****"
[:default, :value, :raw, :resolved].each do |kind|
puts "#{kind}: " + values.inject([]){|m, v| m << v[kind]}.map{|v| v.nil? ? '-' : v.inspect}.join(", ")
end
end
else
config_file = options[:configuration_file]
config_file ||= Compass.detect_configuration_file
config_file ||= Compass::Configuration::Helpers::KNOWN_CONFIG_LOCATIONS.first
directory File.dirname(config_file)
installer.write_configuration_files(config_file)
end
end
def installer_args
[nil, project_directory, options]
end
def explicit_config_file_must_be_readable?
false
end
class << self
def option_parser(arguments)
parser = Compass::Exec::CommandOptionParser.new(arguments)
parser.extend(Compass::Exec::GlobalOptionsParser)
parser.extend(Compass::Exec::ProjectOptionsParser)
parser.extend(ConfigurationOptionsParser)
end
def usage
option_parser([]).to_s
end
def description(command)
"Generate a configuration file for the provided command line options."
end
def parse!(arguments)
parser = option_parser(arguments)
parser.parse!
parse_arguments!(parser, arguments)
parser.options
end
def parse_arguments!(parser, arguments)
if arguments.size == 1
parser.options[:configuration_file] = arguments.shift
elsif arguments.size == 0
# default to the current directory.
else
raise Compass::Error, "Too many arguments were specified."
end
end
end
end
end
end
================================================
FILE: cli/lib/compass/commands.rb
================================================
module Compass::Commands
end
require 'compass/commands/registry'
%w(base project_base default help list_frameworks
update_project watch_project create_project clean_project extension_command
imports installer_command print_version project_stats stamp_pattern
sprite validate_project write_configuration interactive unpack_extension
).each do |lib|
require "compass/commands/#{lib}"
end
Compass.discover_extensions!
================================================
FILE: cli/lib/compass/compiler.rb
================================================
require 'pathname'
module Compass
class Compiler
include Actions
attr_accessor :working_path, :from, :to, :options, :sass_options, :staleness_checker, :importer
def initialize(working_path, from, to, options)
Compass::Deprecation.deprecated!(:compass_compiler_constructor,
"Compass::Compiler is deprecated. Use Compass::SassCompiler instead.")
self.working_path = working_path.to_s
self.from, self.to = File.expand_path(from), to
self.logger = options.delete(:logger)
sass_opts = options.delete(:sass) || {}
self.options = options
self.sass_options = options.dup
self.sass_options.delete(:quiet)
self.sass_options.update(sass_opts)
self.sass_options[:cache_location] ||= determine_cache_location
self.sass_options[:filesystem_importer] ||= Sass::Importers::Filesystem
self.sass_options[:importer] = self.importer = self.sass_options[:filesystem_importer].new(from)
self.sass_options[:compass] ||= {}
self.sass_options[:compass][:logger] = self.logger
self.sass_options[:compass][:environment] = Compass.configuration.environment
self.sass_options[:compass][:compiler_in_use] = true
reset_staleness_checker!
end
def reset_staleness_checker!
self.staleness_checker = nil
#Sass::Plugin::StalenessChecker.dependencies_cache = {}
self.staleness_checker = Sass::Plugin::StalenessChecker.new(sass_options)
end
def determine_cache_location
Compass.configuration.cache_path || Sass::Plugin.options[:cache_location] || File.join(working_path, ".sass-cache")
end
def sass_files(options = {})
exclude_partials = options.fetch(:exclude_partials, true)
@sass_files = self.options[:sass_files] || Dir.glob(separate("#{from}/**/#{'[^_]' if exclude_partials}*.s[ac]ss"))
end
def relative_stylesheet_name(sass_file)
sass_file[(from.length + 1)..-1]
end
def stylesheet_name(sass_file)
if sass_file.index(from) == 0
sass_file[(from.length + 1)..-6].sub(/\.css$/,'')
else
raise Compass::Error, "You must compile individual stylesheets from the project directory."
end
end
def css_files
@css_files ||= sass_files.map{|sass_file| corresponding_css_file(sass_file)}
end
def sourcemap_files
@sourcemap_files ||= sass_files.map{|sass_file| corresponding_sourcemap_file(sass_file)}
end
def corresponding_css_file(sass_file)
"#{to}/#{stylesheet_name(sass_file)}.css"
end
def corresponding_sourcemap_file(sass_file)
"#{to}/#{stylesheet_name(sass_file)}.css.map"
end
def target_directories
css_files.map{|css_file| File.dirname(css_file)}.uniq.sort.sort_by{|d| d.length }
end
# Returns the sass file that needs to be compiled, if any.
def out_of_date?
sass_files.zip(css_files).each do |sass_filename, css_filename|
return sass_filename if needs_update?(css_filename, sass_filename)
end
false
end
def needs_update?(css_filename, sass_filename)
staleness_checker.stylesheet_needs_update?(css_filename, File.expand_path(sass_filename), importer)
end
# Determines if the configuration file is newer than any css file
def new_config?
config_file = Compass.detect_configuration_file
return false unless config_file
config_mtime = File.mtime(config_file)
css_files.each do |css_filename|
return config_file if File.exists?(css_filename) && config_mtime > File.mtime(css_filename)
end
nil
end
def reset!
reset_staleness_checker!
@sass_files = nil
@css_files = nil
@sourcemap_files = nil
end
def clean!
remove options[:cache_location]
css_files.zip(sourcemap_files).each do |css_file, sourcemap_file|
remove css_file
remove sourcemap_file
end
end
def run
failure_count = 0
if new_config?
# Wipe out the cache and force compilation if the configuration has changed.
remove options[:cache_location] if options[:cache_location]
options[:force] = true
end
# Make sure the target directories exist
target_directories.each {|dir| directory dir}
# Compile each sass file.
result = timed do
sass_files.zip(css_files, sourcemap_files).each do |sass_filename, css_filename, sourcemap_filename|
begin
compile_if_required sass_filename, css_filename, sourcemap_filename
rescue Sass::SyntaxError => e
failure_count += 1
handle_exception(sass_filename, css_filename, e)
end
end
end
if options[:time]
puts "Compilation took #{(result.__duration * 1000).round / 1000.0}s"
end
return failure_count
end
def compile_if_required(sass_filename, css_filename, sourcemap_filename = nil)
if should_compile?(sass_filename, css_filename, sourcemap_filename)
compile sass_filename, css_filename, sourcemap_filename
else
logger.record :unchanged, basename(sass_filename) unless options[:quiet]
remove(sourcemap_filename) if sourcemap_filename && !options[:sourcemap]
end
end
def timed(timed_thing = lambda {|res| res})
start_time = Time.now
res = yield
end_time = Time.now
has_duration = timed_thing.call(res)
has_duration.instance_variable_set("@__duration", end_time - start_time)
def has_duration.__duration
@__duration
end
res
end
# Compile one Sass file
def compile(sass_filename, css_filename, sourcemap_filename = nil)
css_content, sourcemap = logger.red do
timed(lambda {|r| r[0]}) do
engine = engine(sass_filename, css_filename, sourcemap_filename)
if sourcemap_filename && options[:sourcemap]
engine.render_with_sourcemap(relative_path(css_filename, sourcemap_filename))
else
[engine.render, nil]
end
end
end
duration = options[:time] ? "(#{(css_content.__duration * 1000).round / 1000.0}s)" : ""
write_file(css_filename, css_content, options.merge(:force => true, :extra => duration), sass_options[:unix_newlines])
Compass.configuration.run_stylesheet_saved(css_filename)
if sourcemap && sourcemap_filename
sourcemap_content = sourcemap.to_json(:css_path => css_filename,
:sourcemap_path => sourcemap_filename)
write_file(sourcemap_filename, sourcemap_content, options.merge(:force => true), sass_options[:unix_newlines])
Compass.configuration.run_sourcemap_saved(sourcemap_filename)
elsif sourcemap_filename && File.exist?(sourcemap_filename)
remove sourcemap_filename
Compass.configuration.run_sourcemap_removed(sourcemap_filename)
end
end
def relative_path(from_path, to_path)
Pathname.new(to_path).relative_path_from(Pathname.new(from_path).dirname).to_s
end
def should_compile?(sass_filename, css_filename, sourcemap_filename = nil)
return true if css_filename && !File.exist?(css_filename)
return true if sourcemap_filename && options[:sourcemap] && !File.exist?(sourcemap_filename)
options[:force] ||
needs_update?(css_filename, sass_filename) ||
(options[:sourcemap] && needs_update?(sourcemap_filename, sass_filename))
end
# A sass engine for compiling a single file.
def engine(sass_filename, css_filename, sourcemap_filename = nil)
syntax = (sass_filename =~ /\.(s[ac]ss)$/) && $1.to_sym || :sass
opts = sass_options.merge(:filename => sass_filename,
:css_filename => css_filename,
:syntax => syntax,
:sourcemap_filename => sourcemap_filename)
Sass::Engine.new(open(sass_filename).read, opts)
end
# Place the syntax error into the target css file,
# formatted to display in the browser (in development mode)
# if there's an error.
def handle_exception(sass_filename, css_filename, e)
exception_file = basename(e.sass_filename || sass_filename)
file = basename(sass_filename)
exception_file = nil if exception_file == file
formatted_error = "(Line #{e.sass_line}#{ " of #{exception_file}" if exception_file}: #{e.message})"
logger.record :error, file, formatted_error
Compass.configuration.run_stylesheet_error(sass_filename, formatted_error)
write_file css_filename, error_contents(e, sass_filename), options.merge(:force => true), sass_options[:unix_newlines]
end
# Haml refactored this logic in 2.3, this is backwards compatibility for either one
def error_contents(e, sass_filename)
if show_full_exception?
e.sass_template = sass_filename
Sass::SyntaxError.exception_to_css(e)
else
header = Sass::SyntaxError.send(:header_string, e, 1)
<<END
/*
#{header.gsub("*/", "*\\/")}
Backtrace:\n#{e.backtrace.join("\n").gsub("*/", "*\\/")}
*/
END
end
end
# We don't want to show the full exception in production environments.
def show_full_exception?
Compass.configuration.environment == :development
end
end
end
================================================
FILE: cli/lib/compass/configuration/comments.rb
================================================
module Compass
module Configuration
# Comments are emitted into the configuration file when serialized and make it easier to understand for new users.
module Comments
def comment_for_http_path
unless top_level.http_path_without_default
"# Set this to the root of your project when deployed:\nhttp_path = #{top_level.http_path.to_s.inspect}\n"
else
""
end
end
def comment_for_relative_assets
unless top_level.relative_assets
%q{# To enable relative paths to assets via compass helper functions. Uncomment:
# relative_assets = true
}
else
""
end
end
def comment_for_line_comments
if top_level.line_comments
%q{# To disable debugging comments that display the original location of your selectors. Uncomment:
# line_comments = false
}
else
""
end
end
def comment_for_output_style
unless top_level.output_style_without_default
%Q{# You can select your preferred output style here (can be overridden via the command line):
# output_style = :expanded or :nested or :compact or :compressed
}
else
""
end
end
def comment_for_preferred_syntax
if top_level.preferred_syntax_without_default.nil? && top_level.sass_dir
%Q{
# If you prefer the indented syntax, you might want to regenerate this
# project again passing --syntax sass, or you can uncomment this:
# preferred_syntax = :sass
# and then run:
# sass-convert -R --from scss --to sass #{top_level.sass_dir} scss && rm -rf sass && mv scss sass
}
else
""
end
end
end
class Data
include Comments
end
end
end
================================================
FILE: cli/lib/compass/configuration/file_data.rb
================================================
module Compass
module Configuration
class FileData < Data
def self.new_from_file(config_file, defaults = nil)
data = new(config_file)
data.with_defaults(defaults) do
data._parse(config_file)
end
data
end
def self.new_from_string(contents, filename, defaults = nil)
data = new(filename)
data.with_defaults(defaults) do
data.parse_string(contents, filename)
end
data
end
end
end
end
================================================
FILE: cli/lib/compass/configuration/helpers.rb
================================================
module Compass
module Configuration
@callbacks_loaded = false
# The helpers are available as methods on the Compass module. E.g. Compass.configuration
module Helpers
def configuration_for(config, filename = nil, defaults = nil)
if config.nil?
nil
elsif config.is_a?(Compass::Configuration::Data)
config
elsif config.instance_of?(Hash)
Compass::Configuration::Data.new(filename, config)
elsif config.respond_to?(:read)
filename ||= config.to_s if config.is_a?(Pathname)
Compass::Configuration::FileData.new_from_string(config.read, filename, defaults)
elsif config.is_a?(Hash)
Compass::Configuration::Data.new(filename, config)
elsif config.is_a?(String)
Compass::Configuration::FileData.new_from_file(config, defaults)
elsif config.is_a?(Symbol)
Compass::AppIntegration.lookup(config).configuration
else
raise "I don't know what to do with: #{config.inspect}"
end
end
def sass_plugin_configuration
configuration.to_sass_plugin_options
end
def configure_sass_plugin!
require 'sass/plugin'
config = sass_plugin_configuration
locations = config.delete(:template_location)
Sass::Plugin.options.merge!(config)
locations.each do |sass_dir, css_dir|
unless Sass::Plugin.engine_options[:load_paths].include?(sass_dir)
Sass::Plugin.add_template_location sass_dir, css_dir
end
end
unless @callbacks_loaded
on_saved = Proc.new do |sass_file, css_file|
Compass.configuration.run_stylesheet_saved(css_file)
end
if Sass::Plugin.respond_to?(:on_updated_stylesheet)
Sass::Plugin.on_updated_stylesheet(&on_saved)
else
Sass::Plugin.on_updating_stylesheet(&on_saved)
end
Sass::Plugin.on_compilation_error do |e, filename, css|
Compass.configuration.run_stylesheet_error(filename, e.message)
end
@callbacks_loaded = true
end
end
def sass_engine_options
configuration.to_sass_engine_options
end
# Read the configuration file for this project
def add_project_configuration(*args)
options = args.last.is_a?(Hash) ? args.pop : {}
configuration_file_path = args.shift || detect_configuration_file
raise ArgumentError, "Too many arguments" if args.any?
if AppIntegration.default? && data = configuration_for(configuration_file_path, nil, configuration_for(options[:defaults]))
if data.raw_project_type
add_configuration(data.raw_project_type.to_sym)
elsif options[:project_type]
add_configuration(options[:project_type])
else
add_configuration(:stand_alone)
end
add_configuration(data)
else
add_configuration(options[:project_type] || configuration.project_type_without_default || (yield if block_given?) || :stand_alone)
end
end
# TODO: Deprecate the src/config.rb location.
KNOWN_CONFIG_LOCATIONS = ['config/compass.rb', ".compass/config.rb", "config/compass.config", "config.rb", "src/config.rb"]
# Finds the configuration file, if it exists in a known location.
def detect_configuration_file(project_path = nil)
possible_files = KNOWN_CONFIG_LOCATIONS.map{|f| projectize(f, project_path) }
possible_files.detect{|f| File.exists?(f)}
end
def handle_configuration_change!
if (compiler = Compass.compiler).new_config?
compiler.clean!
end
end
# @deprecated
def compiler
Compass::Deprecation.deprecated!(:compiler_accessor,
"Compass.compiler is deprecated. Use Compass.sass_compiler instead.")
Compass::Deprecation.mark_as_issued(:compass_compiler_constructor)
Compass::Compiler.new(*Compass.configuration.to_compiler_arguments)
end
def sass_compiler(*args)
Compass::SassCompiler.new(*args)
end
end
end
extend Configuration::Helpers
end
================================================
FILE: cli/lib/compass/configuration/serialization.rb
================================================
module Compass
module Configuration
# The serialization module manages reading and writing the configuration file(s).
module Serialization
def parse(config_file)
raise Compass::Error, "Compass.configuration.parse(filename) has been removed. Please call Compass.add_project_configuration(filename) instead."
end
# parses a configuration file which is a ruby script
def _parse(config_file)
unless File.readable?(config_file)
raise Compass::Error, "Configuration file, #{config_file}, not found or not readable."
end
open(config_file) do |f|
parse_string(f.read, config_file)
end
end
def get_binding
binding
end
def parse_string(contents, filename)
bind = get_binding
eval(contents, bind, filename)
local_vars_set = eval("local_variables", bind)
local_vars_set.each do |local_var|
if (ATTRIBUTES+ARRAY_ATTRIBUTES).include?(local_var.to_sym)
value = eval(local_var.to_s, bind)
value = value.to_s if value.is_a?(Pathname)
self.send("#{local_var}=", value)
end
end
if @added_import_paths
@added_import_paths.each do |p|
self.additional_import_paths << p unless self.additional_import_paths.include?(p)
end
end
issue_deprecation_warnings
end
def serialize
contents = ""
(required_libraries || []).each do |lib|
contents << %Q{require '#{lib}'\n}
end
unless (required_libraries || []).include?("compass/import-once/activate") ||
(required_libraries || []).include?("compass/import-once")
contents << "require 'compass/import-once/activate'\n"
end
(loaded_frameworks || []).each do |lib|
contents << %Q{load '#{lib}'\n}
end
(framework_path || []).each do |lib|
contents << %Q{discover '#{lib}'\n}
end
contents << "# Require any additional compass plugins here.\n"
contents << "\n" if (required_libraries || []).any?
(ATTRIBUTES + ARRAY_ATTRIBUTES).each do |prop|
value = send("#{prop}_without_default")
if value.is_a?(Proc)
$stderr.puts "WARNING: #{prop} is code and cannot be written to a file. You'll need to copy it yourself."
end
if respond_to?("comment_for_#{prop}")
contents << "\n"
contents << send("comment_for_#{prop}")
end
if block_given? && (to_emit = yield(prop, value))
contents << to_emit
else
contents << serialize_property(prop, value) unless value.nil?
end
end
contents
end
def serialize_property(prop, value)
if value.respond_to?(:serialize_to_config)
value.serialize_to_config(prop) + "\n"
else
%Q(#{prop} = #{value.inspect}\n)
end
end
def issue_deprecation_warnings
if http_images_path == :relative
$stderr.puts "DEPRECATION WARNING: Please set relative_assets = true to enable relative paths."
end
end
end
class Data
include Serialization
end
end
end
================================================
FILE: cli/lib/compass/dependencies.rb
================================================
begin
require 'sass'
rescue LoadError
require 'rubygems'
begin
require 'sass'
rescue LoadError
puts "Unable to load Sass. Please install it with one of the following commands:"
puts " gem install sass --pre"
raise
end
end
================================================
FILE: cli/lib/compass/deprecation.rb
================================================
module Compass
module Deprecation
class << self
attr_accessor :issued_deprecations
end
self.issued_deprecations = {}
def self.deprecated!(identifier, message)
return if Deprecation.issued_deprecations[identifier]
Deprecation.issued_deprecations[identifier] = true
warn message
warn "Called from #{caller[1]}"
end
def self.mark_as_issued(identifier)
Deprecation.issued_deprecations[identifier] = true
end
end
end
================================================
FILE: cli/lib/compass/errors.rb
================================================
require 'compass/error'
module Compass
class FilesystemConflict < Error
end
class MissingDependency < Error
end
class SpriteException < Error; end
end
================================================
FILE: cli/lib/compass/exec/command_option_parser.rb
================================================
module Compass::Exec
class CommandOptionParser
attr_accessor :options, :arguments, :opts
def initialize(arguments)
self.arguments = arguments
self.options = {}
end
def parse!
opts.parse!(arguments)
end
def opts
OptionParser.new do |opts|
self.set_options(opts)
end
end
def set_options(opts)
end
def to_s
opts.to_s
end
end
end
================================================
FILE: cli/lib/compass/exec/global_options_parser.rb
================================================
module Compass::Exec::GlobalOptionsParser
def set_options(opts)
super
set_global_options(opts)
end
def set_global_options(opts)
opts.on('-r LIBRARY', '--require LIBRARY',
"Require the given ruby LIBRARY before running commands.",
" This is used to access compass plugins without having a",
" project configuration file."
) do |library|
::Compass.configuration.require library
end
opts.on('-l FRAMEWORK_DIR', '--load FRAMEWORK_DIR',
"Load the framework or extensions found in the FRAMEWORK directory."
) do |framework_dir|
require 'pathname'
::Compass.configuration.load Pathname.new(framework_dir).realpath
end
opts.on('-L FRAMEWORKS_DIR', '--load-all FRAMEWORKS_DIR',
"Load all the frameworks or extensions found in the FRAMEWORKS_DIR directory."
) do |frameworks_dir|
require 'pathname'
::Compass.configuration.discover Pathname.new(frameworks_dir).realpath
end
opts.on('-I IMPORT_PATH', '--import-path IMPORT_PATH',
"Makes files under the IMPORT_PATH folder findable by Sass's @import directive."
) do |import_path|
require 'pathname'
::Compass.configuration.add_import_path Pathname.new(import_path).realpath
end
opts.on('-q', '--quiet', :NONE, 'Quiet mode.') do
self.options[:quiet] = true
end
opts.on('--trace', :NONE, 'Show a full stacktrace on error') do
self.options[:trace] = true
end
opts.on('--force', :NONE, 'Allows compass to overwrite existing files.') do
self.options[:force] = true
end
opts.on('--boring', :NONE, 'Turn off colorized output.') do
self.options[:color_output] = false
end
opts.on_tail("-?", "-h", "--help", "Show this message") do
puts opts
exit
end
end
end
================================================
FILE: cli/lib/compass/exec/helpers.rb
================================================
module Compass::Exec
module Helpers
extend self
def report_error(e, options)
$stderr.puts "#{e.class} on line #{get_line e} of #{get_file e}: #{e.message}"
if options[:trace]
e.backtrace[1..-1].each { |t| $stderr.puts " #{t}" }
else
$stderr.puts "Run with --trace to see the full backtrace"
end
end
def get_file(exception)
exception.backtrace[0].split(/:/, 2)[0]
end
def get_line(exception)
exception.backtrace[0].scan(/:(\d+)/)[0]
end
end
end
================================================
FILE: cli/lib/compass/exec/project_options_parser.rb
================================================
module Compass::Exec::ProjectOptionsParser
def set_options(opts)
super
set_project_options(opts)
end
def set_dir_or_path(type, dir)
if Pathname.new(dir).absolute?
self.options[:"#{type}_path"] = dir.tr('\\','/')
else
self.options[:"#{type}_dir"] = dir.tr('\\','/')
end
end
def set_project_options(opts)
opts.on('-c', '--config CONFIG_FILE', 'Specify the location of the configuration file explicitly.') do |configuration_file|
self.options[:configuration_file] = configuration_file
end
opts.on('--app APP', 'Tell compass what kind of application it is integrating with. E.g. rails') do |project_type|
self.options[:project_type] = project_type.to_sym
end
opts.on('--app-dir PATH', 'The base directory for your application.') do |project_path|
self.options[:project_path] = project_path
end
opts.on('--sass-dir SRC_DIR', "The source directory where you keep your sass stylesheets.") do |sass_dir|
set_dir_or_path(:sass, sass_dir)
end
opts.on('--css-dir CSS_DIR', "The target directory where you keep your css stylesheets.") do |css_dir|
set_dir_or_path(:css, css_dir)
end
opts.on('--images-dir IMAGES_DIR', "The directory where you keep your images.") do |images_dir|
set_dir_or_path(:images, images_dir)
end
opts.on('--javascripts-dir JS_DIR', "The directory where you keep your javascripts.") do |javascripts_dir|
set_dir_or_path(:javascripts, javascripts_dir)
end
opts.on('--fonts-dir FONTS_DIR', "The directory where you keep your fonts.") do |fonts_dir|
set_dir_or_path(:fonts, fonts_dir)
end
opts.on('-e ENV', '--environment ENV', [:development, :production], 'Use sensible defaults for your current environment.',
' One of: development (default), production') do |env|
self.options[:environment] = env
end
opts.on('-s STYLE', '--output-style STYLE', [:nested, :expanded, :compact, :compressed], 'Select a CSS output mode.',
' One of: nested, expanded, compact, compressed') do |style|
self.options[:output_style] = style
end
opts.on('--relative-assets', :NONE, 'Make compass asset helpers generate relative urls to assets.') do
self.options[:relative_assets] = true
end
opts.on('--no-line-comments', :NONE, 'Disable line comments.') do
self.options[:line_comments] = false
end
opts.on('--http-path HTTP_PATH', 'Set this to the root of your project when deployed') do |http_path|
self.options[:http_path] = http_path
end
opts.on('--generated-images-path GENERATED_IMAGES_PATH', 'The path where you generate your images') do |generated_images_path|
self.options[:generated_images_path] = generated_images_path
end
end
end
================================================
FILE: cli/lib/compass/exec/sub_command_ui.rb
================================================
require 'compass/exec/global_options_parser'
require 'compass/exec/project_options_parser'
module Compass::Exec
class SubCommandUI
attr_accessor :args
def initialize(args)
self.args = args
end
def run!
begin
return perform!
rescue Exception => e
raise e if e.is_a? SystemExit
if e.is_a?(::Compass::Error) || e.is_a?(OptionParser::ParseError)
$stderr.puts e.message
else
::Compass::Exec::Helpers.report_error(e, @options || {})
end
return 1
end
end
protected
def perform!
$command = args.shift
command_class = Compass::Commands[$command]
unless command_class
args.unshift($command)
$command = "help"
command_class = Compass::Commands::Default
end
@options = if command_class.respond_to?("parse_#{$command}!")
command_class.send("parse_#{$command}!", args)
else
command_class.parse!(args)
end
cmd = command_class.new(Dir.getwd, @options)
cmd.execute
cmd.successful? ? 0 : 1
rescue OptionParser::ParseError => e
puts "Error: #{e.message}"
puts command_class.usage if command_class.respond_to?(:usage)
end
end
end
================================================
FILE: cli/lib/compass/exec.rb
================================================
require 'compass/dependencies'
require 'optparse'
require 'compass/logger'
require 'compass/errors'
require 'compass/actions'
require 'compass/installers'
require 'compass/commands'
require 'rbconfig'
require 'pathname'
begin
require 'win32console' if RbConfig::CONFIG['host_os'] =~ /mswin|mingw/
rescue LoadError
$boring = true
end
module Compass::Exec
end
%w(helpers sub_command_ui
global_options_parser project_options_parser
command_option_parser).each do |lib|
require "compass/exec/#{lib}"
end
================================================
FILE: cli/lib/compass/generated_version.rb
================================================
module Compass
# This file intentionall does nothing.
# The compass build scripts put the release VERSION constant here.
end
================================================
FILE: cli/lib/compass/installers/bare_installer.rb
================================================
module Compass
module Installers
class BareInstaller < Base
def completed_configuration
nil
end
def init
directory targetize("")
directory targetize(Compass.configuration.sass_dir)
end
def prepare
end
def install
config_file ||= targetize('config.rb')
write_file config_file, config_contents
end
def config_contents
project_path, Compass.configuration.project_path = Compass.configuration.project_path, nil
Compass.configuration.serialize
ensure
Compass.configuration.project_path = project_path
end
def finalize(options = {})
puts <<-NEXTSTEPS
*********************************************************************
Congratulations! Your compass project has been created.
You may now add sass stylesheets to the #{Compass.configuration.sass_dir} subdirectory of your project.
Sass files beginning with an underscore are called partials and won't be
compiled to CSS, but they can be imported into other sass stylesheets.
You can configure your project by editing the config.rb configuration file.
You must compile your sass stylesheets into CSS when they change.
This can be done in one of the following ways:
1. To compile on demand:
compass compile [path/to/project]
2. To monitor your project for changes and automatically recompile:
compass watch [path/to/project]
More Resources:
* Website: http://compass-style.org/
* Sass: http://sass-lang.com
* Community: http://groups.google.com/group/compass-users/
NEXTSTEPS
end
end
end
end
================================================
FILE: cli/lib/compass/installers/base.rb
================================================
module Compass
module Installers
class Base
include Actions
attr_accessor :template_path, :target_path, :working_path
attr_accessor :options
def initialize(template_path, target_path, options = {})
@template_path = template_path
@target_path = target_path
@working_path = Dir.getwd
@options = options
self.logger = options[:logger]
end
[:css_dir, :sass_dir, :images_dir, :javascripts_dir, :http_stylesheets_path, :fonts_dir, :preferred_syntax].each do |dir|
define_method dir do
Compass.configuration.send(dir)
end
define_method "#{dir}_without_default" do
Compass.configuration.send("#{dir}_without_default")
end
end
# Runs the installer.
# Every installer must conform to the installation strategy of prepare, install, and then finalize.
# A default implementation is provided for each step.
def run(run_options = {})
prepare unless run_options[:skip_preparation]
install unless options[:prepare]
finalize(options.merge(run_options)) unless options[:prepare] || run_options[:skip_finalization]
end
# The default prepare method -- it is a no-op.
# Generally you would create required directories, etc.
def prepare
end
# The install method override this to install
def install
raise "Not Yet Implemented"
end
# The default finalize method -- it is a no-op.
# This could print out a message or something.
def finalize(options = {})
end
def compilation_required?
false
end
def pattern_name_as_dir
"#{options[:pattern_name]}/" if options[:pattern_name]
end
def self.installer(type, installer_opts = {}, &locator)
locator ||= lambda{|to| to}
loc_method = "install_location_for_#{type}".to_sym
define_method("simple_#{loc_method}", locator)
define_method(loc_method) do |to, options|
if options[:like] && options[:like] != type
send("install_location_for_#{options[:like]}", to, options)
else
send("simple_#{loc_method}", to)
end
end
define_method "install_#{type}" do |from, to, options|
from = templatize(from)
to = targetize(send(loc_method, to, options))
is_binary = installer_opts[:binary] || options[:binary]
if is_binary
copy from, to, nil, is_binary
else
contents = File.new(from).read
if options.delete(:erb)
ctx = TemplateContext.ctx(:to => to, :options => options)
contents = process_erb(contents, ctx)
end
write_file to, contents
end
end
end
installer :stylesheet do |to|
"#{sass_dir}/#{pattern_name_as_dir}#{to}"
end
def install_stylesheet(from, to, options)
from = templatize(from)
to = targetize(install_location_for_stylesheet(to, options))
contents = File.new(from).read
if options.delete(:erb)
ctx = TemplateContext.ctx(:to => to, :options => options)
contents = process_erb(contents, ctx)
end
if preferred_syntax.to_s != from[-4..-1]
# logger.record :convert, basename(from)
tree = Sass::Engine.new(contents, Compass.sass_engine_options.merge(:syntax => from[-4..-1].intern)).to_tree
contents = tree.send("to_#{preferred_syntax}")
to[-4..-1] = preferred_syntax.to_s
end
write_file to, contents
end
installer :css do |to|
"#{css_dir}/#{to}"
end
installer :image, :binary => true do |to|
"#{images_dir}/#{to}"
end
installer :javascript do |to|
"#{javascripts_dir}/#{to}"
end
installer :font do |to|
"#{fonts_dir}/#{to}"
end
installer :file do |to|
"#{pattern_name_as_dir}#{to}"
end
installer :html do |to|
"#{pattern_name_as_dir}#{to}"
end
def install_directory(from, to, options)
d = if within = options[:within]
if respond_to?(within)
targetize("#{send(within)}/#{to}")
else
raise Compass::Error, "Unrecognized location: #{within}"
end
else
targetize(to)
end
directory d
end
alias install_html_without_haml install_html
def install_html(from, to, options)
if to =~ /\.haml$/
require 'haml'
to = to[0..-(".haml".length+1)]
if respond_to?(:install_location_for_html)
to = install_location_for_html(to, options)
end
contents = File.read(templatize(from))
if options.delete(:erb)
ctx = TemplateContext.ctx(:to => to, :options => options)
contents = process_erb(contents, ctx)
end
Compass.configure_sass_plugin!
html = Haml::Engine.new(contents, :filename => templatize(from)).render
write_file(targetize(to), html, options)
else
install_html_without_haml(from, to, options)
end
end
# returns an absolute path given a path relative to the current installation target.
# Paths can use unix style "/" and will be corrected for the current platform.
def targetize(path)
strip_trailing_separator File.join(target_path, separate(path))
end
# returns an absolute path given a path relative to the current template.
# Paths can use unix style "/" and will be corrected for the current platform.
def templatize(path)
strip_trailing_separator File.join(template_path, separate(path))
end
# Emits an HTML fragment that can be used to link to the compiled css files
def stylesheet_links
""
end
end
end
end
require 'compass/installers/bare_installer'
require 'compass/installers/manifest_installer'
================================================
FILE: cli/lib/compass/installers/manifest.rb
================================================
module Compass
module Installers
class Manifest
include Enumerable
# A Manifest entry
class Entry < Struct.new(:type, :from, :options)
def to
options[:to] || from
end
end
attr_reader :options
def initialize(manifest_file = nil, options = {})
@entries = []
@options = options
@generate_config = true
@compile_after_generation = true
parse(manifest_file) if manifest_file
end
def self.known_extensions
@known_extensions ||= {}
end
def self.plural_types
@plural_types ||= {}
end
def self.type(t, options = {})
Array(options[:extensions]).each do |ext|
self.known_extensions[ext] = t
end
self.plural_types[options[:plural]] = t if options[:plural]
eval <<-END
def #{t}(from, options = {})
@entries << Entry.new(:#{t}, from, options)
end
def has_#{t}?
@entries.detect {|e| e.type == :#{t}}
end
def each_#{t}
@entries.select {|e| e.type == :#{t}}.each {|e| yield e}
end
END
end
type :stylesheet, :plural => :stylesheets, :extensions => %w(scss sass)
type :image, :plural => :images, :extensions => %w(png gif jpg jpeg tiff gif)
type :javascript, :plural => :javascripts, :extensions => %w(js)
type :font, :plural => :fonts, :extensions => %w(eot otf woff ttf)
type :html, :plural => :html, :extensions => %w(html haml)
type :file, :plural => :files
type :directory, :plural => :directories
def discover(type)
type = self.class.plural_types[type] || type
dir = File.dirname(@manifest_file)
Dir.glob("#{dir}/**/*").each do |file|
next if /manifest\.rb/ =~ file
short_name = file[(dir.length+1)..-1]
options = {}
ext = if File.extname(short_name) == ".erb"
options[:erb] = true
File.extname(short_name[0..-5])
else
File.extname(short_name)
end[1..-1]
file_type = self.class.known_extensions[ext]
file_type = :file if file_type.nil?
file_type = :directory if File.directory?(file)
if type == :all || type == file_type
send(file_type, short_name, options)
end
end
end
def help(value = nil)
if value
@help = value
else
@help
end
end
attr_reader :welcome_message_options
def welcome_message(value = nil, options = {})
if value
@welcome_message = value
@welcome_message_options = options
else
@welcome_message
end
end
def welcome_message_options
@welcome_message_options || {}
end
def description(value = nil)
if value
@description = value
else
@description
end
end
# Enumerates over the manifest files
def each
@entries.each {|e| yield e}
end
def generate_config?
@generate_config
end
def compile?
@compile_after_generation
end
protected
def no_configuration_file!
@generate_config = false
end
def skip_compilation!
@compile_after_generation = false
end
def with_manifest(manifest_file)
@manifest_file = manifest_file
yield
ensure
@manifest_file = nil
end
# parses a manifest file which is a ruby script
# evaluated in a Manifest instance context
def parse(manifest_file)
with_manifest(manifest_file) do
if File.exists?(manifest_file)
open(manifest_file) do |f|
eval(f.read, instance_binding, manifest_file)
end
else
eval("discover :all", instance_binding, manifest_file)
end
end
end
def instance_binding
binding
end
end
end
end
================================================
FILE: cli/lib/compass/installers/manifest_installer.rb
================================================
module Compass
module Installers
class ManifestInstaller < Base
attr_accessor :manifest
def initialize(template_path, target_path, options = {})
super
@manifest = Manifest.new(manifest_file, options) if template_path
end
def manifest_file
@manifest_file ||= File.join(template_path, "manifest.rb")
end
# Initializes the project to work with compass
def init
dirs = manifest.map do |entry|
unless entry.type == :directory
loc = send("install_location_for_#{entry.type}", entry.to, entry.options)
File.dirname(loc)
end
end.compact
if manifest.has_stylesheet?
dirs << sass_dir
dirs << css_dir
end
dirs.uniq.sort.each do |dir|
directory targetize(dir)
end
end
# The default install method. Calls install_<type> methods in the order specified by the manifest.
def install
manifest.each do |entry|
send("install_#{entry.type}", entry.from, entry.to, entry.options)
end
end
def stylesheet_links
html = "<head>\n"
manifest.each_stylesheet do |stylesheet|
# Skip partials.
next if File.basename(stylesheet.from)[0..0] == "_"
media = if stylesheet.options[:media]
%Q{ media="#{stylesheet.options[:media]}"}
end
ss_line = %Q{ <link href="#{http_stylesheets_path}/#{stylesheet.to.sub(/\.s[ac]ss$/,'.css')}"#{media} rel="stylesheet" type="text/css" />}
if stylesheet.options[:condition]
ss_line = " <!--[if #{stylesheet.options[:condition]}]>\n #{ss_line}\n <![endif]-->"
end
html << ss_line + "\n"
end
html << "</head>"
end
end
end
end
================================================
FILE: cli/lib/compass/installers/template_context.rb
================================================
module Compass
module Installers
class TemplateContext
def self.ctx(*arguments)
new(*arguments).send(:get_binding)
end
def initialize(template, locals = {})
@template = template
@locals = locals
end
def http_stylesheets_path
config.http_stylesheets_path ||
config.default_for(:http_stylesheets_path) ||
config.http_root_relative(config.css_dir)
end
Compass::Configuration::ATTRIBUTES.each do |attribute|
unless instance_methods.include?(attribute.to_s)
define_method attribute do
config.send(attribute) || config.default_for(attribute)
end
end
end
def config
Compass.configuration
end
alias configuration config
protected
def get_binding
@locals.each do |k, v|
eval("#{k} = v")
end
binding
end
end
end
end
================================================
FILE: cli/lib/compass/installers.rb
================================================
%w(manifest template_context base manifest_installer bare_installer).each do |f|
require "compass/installers/#{f}"
end
================================================
FILE: cli/lib/compass/logger.rb
================================================
module Compass
class Logger
COLORS = { :clear => 0, :red => 31, :green => 32, :yellow => 33, :blue => 34 }
ACTION_COLORS = {
:error => :red,
:warning => :yellow,
:info => :green,
:compile => :green,
:overwrite => :yellow,
:modified => :yellow,
:clean => :yellow,
:write => :green,
:create => :green,
:remove => :yellow,
:delete => :yellow,
:deleted => :yellow,
:created => :yellow,
:exists => :green,
:directory => :green,
:identical => :green,
:convert => :green,
:unchanged => :yellow
}
DEFAULT_ACTIONS = ACTION_COLORS.keys
ACTION_CAN_BE_QUIET = {
:error => false,
:warning => true,
:info => true,
:compile => true,
:overwrite => true,
:modified => true,
:clean => true,
:write => true,
:create => true,
:remove => true,
:delete => true,
:deleted => true,
:created => true,
:exists => true,
:directory => true,
:identical => true,
:convert => true,
:unchanged => true
}
attr_accessor :actions, :options, :time
def initialize(*actions)
self.options = actions.last.is_a?(Hash) ? actions.pop : {}
@actions = DEFAULT_ACTIONS.dup
@actions += actions
end
# Record an action that has occurred
def record(action, *arguments)
return if options[:quiet] && ACTION_CAN_BE_QUIET[action]
msg = ""
if time
msg << Time.now.strftime("%I:%M:%S.%3N %p")
end
msg << color(ACTION_COLORS[action]) if Compass.configuration.color_output
msg << "#{action_padding(action)}#{action}"
msg << color(:clear) if Compass.configuration.color_output
msg << " #{arguments.join(' ')}"
log msg
end
def green
wrap(:green) { yield }
end
def red
wrap(:red) { yield }
end
def yellow
wrap(:yellow) { yield }
end
def wrap(c, reset_to = :clear)
$stderr.write(color(c))
$stdout.write(color(c))
yield
ensure
$stderr.write(color(reset_to))
$stdout.write(color(reset_to))
$stdout.flush
end
def color(c)
if Compass.configuration.color_output && c && COLORS.has_key?(c.to_sym)
if defined?($boring) && $boring
""
else
"\e[#{COLORS[c.to_sym]}m"
end
else
""
end
end
# Emit a log message without a trailing newline
def emit(msg)
print msg
$stdout.flush
end
# Emit a log message with a trailing newline
def log(msg)
puts msg
$stdout.flush
end
# add padding to the left of an action that was performed.
def action_padding(action)
' ' * [(max_action_length - action.to_s.length), 0].max
end
# the maximum length of all the actions known to the logger.
def max_action_length
@max_action_length ||= actions.inject(0){|memo, a| [memo, a.to_s.length].max}
end
end
class NullLogger < Logger
def record(*args)
end
def log(msg)
end
def emit(msg)
end
end
end
================================================
FILE: cli/lib/compass/quick_cache.rb
================================================
module QuickCache
# cache a value in memory for just a few seconds
# This can speed up reads of values that change relatively infrequently
# but might be read many times in a short burst of reads.
def quick_cache(key, ttl = 1)
@quick_cache ||= {}
if @quick_cache[key] && @quick_cache[key].first > Time.now - ttl
@quick_cache[key].last
else
(@quick_cache[key] = [Time.now, yield]).last
end
end
end
================================================
FILE: cli/lib/compass/rails.rb
================================================
# Rails requires compass by requiring this file.
require 'compass'
================================================
FILE: cli/lib/compass/sass_compiler.rb
================================================
require 'sass/plugin'
class Compass::SassCompiler
include Compass::Actions
attr_writer :logger
attr_reader :quiet
attr_reader :error_count
attr_accessor :config
attr_accessor :display_compilation_times
attr_accessor :working_path
attr_accessor :only_sass_files
def initialize(options = {}, config = Compass.configuration)
options = options.dup
self.config = config
self.display_compilation_times = options.delete(:time)
self.working_path = options.delete(:working_path) || Dir.pwd
self.only_sass_files = options.delete(:only_sass_files) || []
@quiet = options[:quiet]
plugin_options = config.to_sass_plugin_options.merge(options)
if only_sass_files.any?
plugin_options[:template_location] = []
plugin_options[:load_paths] = config.sass_load_paths
end
plugin_options[:always_update] = true if options.delete(:force)
plugin_options[:compass] ||= {}
plugin_options[:compass][:logger] = logger
@compiler = Sass::Plugin::Compiler.new(plugin_options)
@start_times = {}
@error_count = 0
public_methods(true).grep(/^when_/).each do |callback|
@compiler.send(callback.to_s.sub(/^when_/, 'on_')) {|*args| send(callback, *args) }
end
end
def compile!
@compiler.update_stylesheets(individual_files)
end
def watch!(options = {}, &block)
skip_initial_update = options.fetch(:skip_initial_update, false)
begin
@compiler.watch(individual_files, options.merge(:skip_initial_update => skip_initial_update), &block)
rescue Sass::SyntaxError => e
skip_initial_update = true
retry
end
end
def individual_files
only_sass_files.map {|sass_file| [sass_file, corresponding_css_file(sass_file)]}
end
def clean!
@compiler.clean(individual_files)
end
def file_list
@compiler.file_list(individual_files)
end
def when_updating_stylesheets(individual_files)
@start_times = {}
@error_count = 0
end
def when_compilation_starting(sass_file, css, sourcemap)
@start_times[sass_file] = Time.now
end
def when_template_created(sass_file)
logger.record :created, relativize(sass_file)
end
def when_template_deleted(sass_file)
logger.record :deleted, relativize(sass_file)
end
def when_template_modified(sass_file)
logger.record :modified, relativize(sass_file)
end
def when_updated_stylesheet(sass_file, css, sourcemap)
if css && display_compilation_times && @start_times[sass_file]
duration = ((Time.now - @start_times[sass_file]) * 1000).round / 1000.0
logger.record :write, "#{relativize(css)} (#{duration}s)"
else
logger.record :write, relativize(css) if css
end
config.run_stylesheet_saved(css) if css
logger.record :write, relativize(sourcemap) if sourcemap
config.run_sourcemap_saved(sourcemap) if sourcemap
end
def when_creating_directory(dirname)
logger.record :directory, relativize(dirname)
end
def when_deleting_css(filename)
logger.record :delete, relativize(filename)
config.run_stylesheet_removed(filename) if filename
end
def when_deleting_sourcemap(filename)
logger.record :delete, relativize(filename)
config.run_sourcemap_removed(filename) if filename
end
def when_compilation_error(error, sass_file, css_file, sourcemap_file)
@error_count += 1
if error.respond_to?(:sass_filename)
error_filename = error.sass_filename || sass_file
if relativize(error_filename) == relativize(sass_file)
logger.record :error, "#{relativize(sass_file)} (Line #{error.sass_line}: #{error.message})"
else
logger.record :error, "#{relativize(sass_file)} (Line #{error.sass_line} of #{relativize(error_filename)}: #{error.message})"
end
else
logger.record :error, "#{relativize(sass_file)} (#{error.backtrace.first}: #{error.message})"
end
config.run_stylesheet_error(sass_file, error.message)
end
def logger
@logger ||= Compass::Logger.new(:quiet => quiet)
end
def corresponding_css_file(sass_file)
"#{config.css_path}/#{stylesheet_name(sass_file)}.css"
end
def stylesheet_name(sass_file)
if sass_file.index(config.sass_path) == 0
sass_file[(config.sass_path.length + 1)..-6].sub(/\.css$/,'')
else
raise Compass::Error, "Individual stylesheets must be in the sass directory."
end
end
def sass_files(options = {})
@compiler.template_location_array.map do |(sass_dir, css_dir)|
glob = options[:include_partials] ?
File.join("**","*.s[ac]ss*") :
File.join("**","[^_]*.s[ac]ss*")
Dir.glob(File.join(sass_dir, glob))
end.flatten
end
end
================================================
FILE: cli/lib/compass/sass_extensions/functions/sprites.rb
================================================
module Compass::SassExtensions::Functions::Sprites
extend Compass::SassExtensions::Functions::SassDeclarationHelper
extend Sass::Script::Value::Helpers
include Sass::Script::Value::Helpers
ZERO = number(0)
BOOL_FALSE = bool(false)
VALID_SELECTORS = %w(hover active target focus)
# Provides a consistent interface for getting a variable in ruby
# from a keyword argument hash that accounts for underscores/dash equivalence
# and allows the caller to pass a symbol instead of a string.
module VariableReader
def get_var(variable_name)
self[variable_name.to_s.gsub(/-/,"_")]
end
end
# Returns the width of the generated sprite map
def sprite_width(map, sprite=nil)
verify_map(map, 'sprite-width')
file = get_sprite_file(map, sprite)
width, _ = image_dimensions(file)
number(width, "px")
end
declare :sprite_width, [:map]
declare :sprite_width, [:map, :sprite]
# Returns the height of the generated sprite map
def sprite_height(map, sprite=nil)
verify_map(map, 'sprite-height')
file = get_sprite_file(map, sprite)
_, height = image_dimensions(file)
number(height, "px")
end
declare :sprite_height, [:map]
declare :sprite_height, [:map, :sprite]
# Returns a list of all sprite names
def sprite_names(map)
verify_map(map, 'sprite-names')
list(map.sprite_names.map { |f| identifier(f) }, :comma)
end
declare :sprite_names, [:map]
# Returns the system path of the sprite file
def sprite_path(map)
verify_map(map, 'sprite-path')
identifier(map.filename)
end
declare :sprite_path, [:map]
# Returns the sprite file as an inline image
# @include "icon/*.png";
# #{$icon-sprite-base-class} {
# background-image: inline-sprite($icon-sprites);
# }
def inline_sprite(map)
verify_map(map, "sprite-url")
map.generate
path = map.filename
inline_image_string(data(path), compute_mime_type(path))
end
declare :inline_sprite, [:map]
# Creates a Compass::SassExtensions::Sprites::SpriteMap object. A sprite map, when used in a property is the same
# as calling sprite-url. So the following background properties are equivalent:
#
# $icons: sprite-map("icons/*.png");
# background: sprite-url($icons) no-repeat;
# background: $icons no-repeat;
#
# The sprite map object will generate the sprite map image, if necessary,
# the first time it is converted to a url. Simply constructing it has no side-effects.
def sprite_map(glob, kwargs = {})
kwargs.extend VariableReader
Compass::SassExtensions::Sprites::SpriteMap.from_uri(glob, self, kwargs)
end
declare :sprite_map, [:glob], :var_kwargs => true
# Returns the image and background position for use in a single shorthand property:
#
# $icons: sprite-map("icons/*.png"); // contains icons/new.png among others.
# background: sprite($icons, new) no-repeat;
#
# Becomes:
#
# background: url('/images/icons.png?12345678') 0 -24px no-repeat;
#
# If the `use_percentages` parameter is passed as true, percentages will be
# used to position the sprite. Example output:
#
# background: url('/images/icons.png?12345678') 0 50% no-repeat;
#
def sprite(map, sprite, offset_x = ZERO, offset_y = ZERO, use_percentages = BOOL_FALSE)
sprite = convert_sprite_name(sprite)
verify_map(map)
verify_sprite(sprite)
url = sprite_url(map)
position = sprite_position(map, sprite, offset_x, offset_y, use_percentages)
list([url] + position.value, :space)
end
declare :sprite, [:map, :sprite]
declare :sprite, [:map, :sprite, :offset_x]
declare :sprite, [:map, :sprite, :offset_x, :offset_y]
declare :sprite, [:map, :sprite, :offset_x, :offset_y, :use_percentages]
# Returns the name of a sprite map
# The name is derived from the folder than contains the sprites.
def sprite_map_name(map)
verify_map(map, "sprite-map-name")
identifier(map.name)
end
declare :sprite_name, [:sprite]
# Returns the path to the original image file for the sprite with the given name
def sprite_file(map, sprite)
sprite = convert_sprite_name(sprite)
verify_map(map, "sprite")
verify_sprite(sprite)
if image = map.image_for(sprite.value)
image_path = Pathname.new(File.expand_path(image.file))
images_path = Pathname.new(File.expand_path(Compass.configuration.images_path))
quoted_string(image_path.relative_path_from(images_path).to_s)
else
missing_image!(map, sprite)
end
end
declare :sprite_file, [:map, :sprite]
# Returns boolean if sprite has a parent
def sprite_does_not_have_parent(map, sprite)
sprite = convert_sprite_name(sprite)
verify_map map
verify_sprite sprite
bool(map.image_for(sprite.value).parent.nil?)
end
declare :sprite_does_not_have_parent, [:map, :sprite]
#return the name of the selector file
def sprite_selector_file(map, sprite, selector)
sprite = convert_sprite_name(sprite)
image = map.image_for(sprite)
if map.send(:"has_#{selector.value}?", sprite.value)
return identifier(image.send(selector.value).name)
end
raise Sass::SyntaxError, "Sprite: #{sprite.value} does not have a #{selector} state"
end
declare :sprite_selector_file, [:map, :sprite, :selector]
# Returns boolean if sprite has the selector
def sprite_has_selector(map, sprite, selector)
sprite = convert_sprite_name(sprite)
verify_map map
verify_sprite sprite
unless VALID_SELECTORS.include?(selector.value)
raise Sass::SyntaxError, "Invalid Selctor did you mean one of: #{VALID_SELECTORS.join(', ')}"
end
bool map.send(:"has_#{selector.value}?", sprite.value)
end
declare :sprite_has_selector, [:map, :sprite, :selector]
# Determines if the CSS selector is valid
IDENTIFIER_RX = /\A#{Sass::SCSS::RX::IDENT}\Z/
def sprite_has_valid_selector(selector)
unless selector.value =~ IDENTIFIER_RX
raise Sass::SyntaxError, "#{selector} must be a legal css identifier"
end
bool true
end
# Returns a url to the sprite image.
def sprite_url(map)
verify_map(map, "sprite-url")
map.generate
generated_image_url(identifier("#{map.path}-s#{map.uniqueness_hash}.png"))
end
declare :sprite_url, [:map]
# Returns the position for the original image in the sprite.
# This is suitable for use as a value to background-position:
#
# $icons: sprite-map("icons/*.png");
# background-position: sprite-position($icons, new);
#
# Might generate something like:
#
# background-position: 0 -34px;
#
# You can adjust the background relative to this position by passing values for
# `$offset-x` and `$offset-y`:
#
# $icons: sprite-map("icons/*.png");
# background-position: sprite-position($icons, new, 3px, -2px);
#
# Would change the above output to:
#
# background-position: 3px -36px;
#
# If you set the `use_percentages` parameter to true, the position will be
# expressed in percentages. An example:
#
# background-position: sprite-position($icons, new, 0, 0, true);
#
# Would result in something like this:
#
# background-position: 0 42%;
#
def sprite_position(map, sprite = nil, offset_x = ZERO, offset_y = ZERO, use_percentages = BOOL_FALSE)
assert_type offset_x, :Number
assert_type offset_y, :Number
sprite = convert_sprite_name(sprite)
verify_map(map, "sprite-position")
unless sprite.is_a?(Sass::Script::Value::String) || sprite.is_a?(Sass::Script::Value::Number)
raise Sass::SyntaxError, %Q(The second argument to sprite-position must be a sprite name. See http://beta.compass-style.org/help/tutorials/spriting/ for more information.)
end
image = map.image_for(sprite.value)
unless image
missing_image!(map, sprite)
end
if use_percentages.value
xdivis = map.width - image.width;
x = (offset_x.value + image.left.to_f) / (xdivis.nonzero? || 1) * 100
x = x == 0 ? number(x) : number(x, "%")
ydivis = map.height - image.height;
y = (offset_y.value + image.top.to_f) / (ydivis.nonzero? || 1) * 100
y = y == 0 ? number(y) : number(y, "%")
else
if offset_x.unit_str == "%"
x = offset_x # CE: Shouldn't this be a percentage of the total width?
else
x = offset_x.value - image.left
x = x == 0 ? number(x) : number(x, "px")
end
y = offset_y.value - image.top
y = y == 0 ? number(y) : number(y, "px")
end
list(x, y, :space)
end
declare :sprite_position, [:map]
declare :sprite_position, [:map, :sprite]
declare :sprite_position, [:map, :sprite, :offset_x]
declare :sprite_position, [:map, :sprite, :offset_x, :offset_y]
declare :sprite_position, [:map, :sprite, :offset_x, :offset_y, :use_percentages]
protected
def get_sprite_file(map, sprite=nil)
if sprite
map.image_for(sprite).file
else
map.filename
end
end
def reversed_color_names
if Sass::Script::Value::Color.const_defined?(:HTML4_COLORS_REVERSE)
Sass::Script::Value::Color::HTML4_COLORS_REVERSE
else
Sass::Script::Value::Color::COLOR_NAMES_REVERSE
end
end
def convert_sprite_name(sprite)
case sprite
when Sass::Script::Value::Color
rgb = if reversed_color_names.keys.first.size == 3
sprite.rgb
else
# Sass 3.3 includes the alpha channel
sprite.rgba
end
identifier(reversed_color_names[rgb])
when Sass::Script::Value::Bool
identifier(sprite.to_s)
else
sprite
end
end
def verify_map(map, error = "sprite")
unless map.is_a?(Compass::SassExtensions::Sprites::SpriteMap)
missing_sprite!(error)
end
end
def verify_sprite(sprite)
unless sprite.is_a?(Sass::Script::Value::String) || sprite.is_a?(Sass::Script::Value::Number)
raise Sass::SyntaxError, %Q(The second argument to sprite() must be a sprite name. See http://beta.compass-style.org/help/tutorials/spriting/ for more information.)
end
end
def missing_image!(map, sprite)
raise Sass::SyntaxError, "No sprite called #{sprite} found in sprite map #{map.path}/#{map.name}. Did you mean one of: #{map.sprite_names.join(", ")}"
end
def missing_sprite!(function_name)
raise Sass::SyntaxError, %Q(The first argument to #{function_name}() must be a sprite map. See http://beta.compass-style.org/help/tutorials/spriting/ for more information.)
end
end
================================================
FILE: cli/lib/compass/sass_extensions/functions.rb
================================================
module Compass::SassExtensions::Functions
module SassDeclarationHelper
def declare(*args)
Sass::Script::Functions.declare(*args)
end
end
end
%w(sprites).each do |func|
require "compass/sass_extensions/functions/#{func}"
end
module Sass::Script::Functions
include Compass::SassExtensions::Functions::Sprites
end
================================================
FILE: cli/lib/compass/sass_extensions/sprites/engines/chunky_png_engine.rb
================================================
begin
require 'oily_png'
rescue LoadError
require 'chunky_png'
end
module Compass
module SassExtensions
module Sprites
class ChunkyPngEngine < Compass::SassExtensions::Sprites::Engine
def construct_sprite
@canvas = ChunkyPNG::Image.new(width, height, ChunkyPNG::Color::TRANSPARENT)
images.each do |image|
input_png = begin
ChunkyPNG::Image.from_file(image.file)
rescue ChunkyPNG::SignatureMismatch
raise Compass::SpriteException, "You have provided a file that does not have a PNG signature. Only PNG files are supported by the default sprite engine"
end
canvas.replace! input_png, image.left, image.top
end
end
def save(filename)
if canvas.nil?
construct_sprite
end
canvas.save(filename, Compass.configuration.chunky_png_options)
end
end
end
end
end
================================================
FILE: cli/lib/compass/sass_extensions/sprites/engines.rb
================================================
module Compass
module SassExtensions
module Sprites
class Engine
attr_accessor :width, :height, :images, :canvas
def initialize(width, height, images)
@width, @height, @images = width, height, images
@canvas = nil
end
def construct_sprite
raise ::Compass::Error, "You must implement construct_sprite"
end
def save(filename)
raise ::Compass::Error, "You must implement save(filename)"
end
end
end
end
end
require 'compass/sass_extensions/sprites/engines/chunky_png_engine'
================================================
FILE: cli/lib/compass/sass_extensions/sprites/image.rb
================================================
module Compass
module SassExtensions
module Sprites
class Image
include Sass::Script::Value::Helpers
ACTIVE = %r{[_-]active$}
TARGET = %r{[_-]target$}
HOVER = %r{[_-]hover$}
FOCUS = %r{[_-]focus$}
PARENT = %r{(.+)[-_](.+)$}
REPEAT_X = 'repeat-x'
REPEAT_Y = 'repeat-y'
NO_REPEAT = 'no-repeat'
VALID_REPEATS = [REPEAT_Y, REPEAT_X, NO_REPEAT]
attr_reader :relative_file, :options, :base, :name
attr_accessor :top, :left
def initialize(base, relative_file, options)
@base, @relative_file, @options = base, relative_file, options
@left = @top = 0
@name = File.basename(relative_file, '.png')
end
# The Full path to the image
def file
@file ||= find_file
end
def find_file
Compass.configuration.sprite_load_path.compact.each do |path|
f = File.join(path, relative_file)
if File.exists?(f)
return f
end
end
end
# Width of the image
def width
dimensions.first
end
def size
@size ||= File.size(file)
end
# Height of the image
def height
dimensions.last
end
def get_var_file(var)
options.get_var "#{base.name}_#{name}_#{var}"
end
# Value of <tt> $#{name}-repeat </tt> or <tt> $repeat </tt>
def repeat
@repeat ||= begin
rep = (get_var_file("repeat") || options.get_var("repeat") || identifier(NO_REPEAT)).value
unless VALID_REPEATS.include? rep
raise SpriteException, "Invalid option for repeat \"#{rep}\" - valid options are #{VALID_REPEATS.join(', ')}"
end
rep
end
end
def repeat_x?
repeat == REPEAT_X
end
def repeat_y?
repeat == REPEAT_Y
end
def no_repeat?
repeat == NO_REPEAT
end
# Value of <tt> $#{name}-position </tt> or <tt> $position </tt> defaults to <tt>0px</tt>
def position
@position ||= get_var_file("position") || options.get_var("position") || number(0, "px")
end
# Offset within the sprite
def offset
@offset ||= (position.unitless? || position.unit_str == "px") ? position.value : 0
end
# Spacing between this image and the next
def spacing
@spacing ||= (get_var_file("spacing") || options.get_var("spacing") || number(0, 'px')).value
end
# MD5 hash of this file
def digest
Digest::MD5.file(file).hexdigest
end
# mtime of this file
def mtime
File.mtime(file)
end
# Is hover selector
def hover?
name =~ HOVER
end
# Hover selector Image object if exsists
def hover
base.get_magic_selector_image(name, 'hover')
end
# Is target selector
def target?
name =~ TARGET
end
# Target selector Image object if exsists
def target
base.get_magic_selector_image(name, 'target')
end
# Is active selector
def active?
name =~ ACTIVE
end
# Active selector Image object if exsists
def active
base.get_magic_selector_image(name, 'active')
end
# Is active selector
def focus?
name =~ FOCUS
end
# Active selector Image object if exsists
def focus
base.get_magic_se
gitextract_y675jjmd/ ├── .gitignore ├── .travis.yml ├── CONTRIBUTING.md ├── Guardfile ├── LICENSE.markdown ├── README.markdown ├── Rakefile ├── TODO.md ├── cli/ │ ├── .gitignore │ ├── Gemfile │ ├── Rakefile │ ├── VERSION │ ├── VERSION_NAME │ ├── bin/ │ │ └── compass │ ├── compass.gemspec │ ├── features/ │ │ ├── command_line.feature │ │ ├── extensions.feature │ │ └── step_definitions/ │ │ ├── command_line_steps.rb │ │ └── extension_steps.rb │ ├── gemfiles/ │ │ ├── listen_2.gemfile │ │ ├── sass_3_3.gemfile │ │ └── sass_local.gemfile │ ├── lib/ │ │ ├── compass/ │ │ │ ├── actions.rb │ │ │ ├── app_integration/ │ │ │ │ ├── stand_alone/ │ │ │ │ │ ├── configuration_defaults.rb │ │ │ │ │ └── installer.rb │ │ │ │ └── stand_alone.rb │ │ │ ├── app_integration.rb │ │ │ ├── commands/ │ │ │ │ ├── base.rb │ │ │ │ ├── clean_project.rb │ │ │ │ ├── create_project.rb │ │ │ │ ├── default.rb │ │ │ │ ├── extension_command.rb │ │ │ │ ├── help.rb │ │ │ │ ├── imports.rb │ │ │ │ ├── installer_command.rb │ │ │ │ ├── interactive.rb │ │ │ │ ├── list_frameworks.rb │ │ │ │ ├── print_version.rb │ │ │ │ ├── project_base.rb │ │ │ │ ├── project_stats.rb │ │ │ │ ├── project_structure.rb │ │ │ │ ├── registry.rb │ │ │ │ ├── sprite.rb │ │ │ │ ├── stamp_pattern.rb │ │ │ │ ├── unpack_extension.rb │ │ │ │ ├── update_project.rb │ │ │ │ ├── validate_project.rb │ │ │ │ ├── watch_project.rb │ │ │ │ └── write_configuration.rb │ │ │ ├── commands.rb │ │ │ ├── compiler.rb │ │ │ ├── configuration/ │ │ │ │ ├── comments.rb │ │ │ │ ├── file_data.rb │ │ │ │ ├── helpers.rb │ │ │ │ └── serialization.rb │ │ │ ├── dependencies.rb │ │ │ ├── deprecation.rb │ │ │ ├── errors.rb │ │ │ ├── exec/ │ │ │ │ ├── command_option_parser.rb │ │ │ │ ├── global_options_parser.rb │ │ │ │ ├── helpers.rb │ │ │ │ ├── project_options_parser.rb │ │ │ │ └── sub_command_ui.rb │ │ │ ├── exec.rb │ │ │ ├── generated_version.rb │ │ │ ├── installers/ │ │ │ │ ├── bare_installer.rb │ │ │ │ ├── base.rb │ │ │ │ ├── manifest.rb │ │ │ │ ├── manifest_installer.rb │ │ │ │ └── template_context.rb │ │ │ ├── installers.rb │ │ │ ├── logger.rb │ │ │ ├── quick_cache.rb │ │ │ ├── rails.rb │ │ │ ├── sass_compiler.rb │ │ │ ├── sass_extensions/ │ │ │ │ ├── functions/ │ │ │ │ │ └── sprites.rb │ │ │ │ ├── functions.rb │ │ │ │ ├── sprites/ │ │ │ │ │ ├── engines/ │ │ │ │ │ │ └── chunky_png_engine.rb │ │ │ │ │ ├── engines.rb │ │ │ │ │ ├── image.rb │ │ │ │ │ ├── image_methods.rb │ │ │ │ │ ├── image_row.rb │ │ │ │ │ ├── images.rb │ │ │ │ │ ├── layout/ │ │ │ │ │ │ ├── diagonal.rb │ │ │ │ │ │ ├── horizontal.rb │ │ │ │ │ │ ├── smart.rb │ │ │ │ │ │ └── vertical.rb │ │ │ │ │ ├── layout.rb │ │ │ │ │ ├── layout_methods.rb │ │ │ │ │ ├── row_fitter.rb │ │ │ │ │ ├── sprite_map.rb │ │ │ │ │ └── sprite_methods.rb │ │ │ │ └── sprites.rb │ │ │ ├── sass_extensions.rb │ │ │ ├── sprite_importer/ │ │ │ │ ├── binding.rb │ │ │ │ └── content.erb │ │ │ ├── sprite_importer.rb │ │ │ ├── stats.rb │ │ │ ├── test_case.rb │ │ │ ├── validator.rb │ │ │ └── version.rb │ │ └── compass.rb │ └── test/ │ ├── fixtures/ │ │ ├── extensions/ │ │ │ └── only_stylesheets/ │ │ │ ├── compass_init.rb │ │ │ └── scss/ │ │ │ └── only_stylesheets/ │ │ │ └── foo.scss │ │ ├── fonts/ │ │ │ └── bgrove.base64.txt │ │ └── stylesheets/ │ │ ├── busted_font_urls/ │ │ │ ├── config.rb │ │ │ ├── css/ │ │ │ │ └── screen.css │ │ │ └── sass/ │ │ │ └── screen.sass │ │ ├── busted_image_urls/ │ │ │ ├── config.rb │ │ │ ├── css/ │ │ │ │ └── screen.css │ │ │ └── sass/ │ │ │ └── screen.sass │ │ ├── compass/ │ │ │ ├── config.rb │ │ │ ├── css/ │ │ │ │ ├── animation-with-legacy-ie.css │ │ │ │ ├── animation.css │ │ │ │ ├── appearance.css │ │ │ │ ├── background-clip.css │ │ │ │ ├── background-origin.css │ │ │ │ ├── background-size.css │ │ │ │ ├── border_radius.css │ │ │ │ ├── box-sizing.css │ │ │ │ ├── box.css │ │ │ │ ├── box_shadow.css │ │ │ │ ├── brightness.css │ │ │ │ ├── browser-support.css │ │ │ │ ├── color.css │ │ │ │ ├── columns.css │ │ │ │ ├── filters.css │ │ │ │ ├── flexbox.css │ │ │ │ ├── fonts.css │ │ │ │ ├── force-wrap.css │ │ │ │ ├── gradients.css │ │ │ │ ├── grid_background.css │ │ │ │ ├── hyphenation.css │ │ │ │ ├── image_size.css │ │ │ │ ├── images.css │ │ │ │ ├── layout.css │ │ │ │ ├── legacy_clearfix.css │ │ │ │ ├── lists.css │ │ │ │ ├── opacity.css │ │ │ │ ├── print.css │ │ │ │ ├── regions.css │ │ │ │ ├── replacement.css │ │ │ │ ├── reset.css │ │ │ │ ├── selection.css │ │ │ │ ├── sprites_with_explicit_separator.css │ │ │ │ ├── stretching.css │ │ │ │ ├── support.css │ │ │ │ ├── text_shadow.css │ │ │ │ ├── transform.css │ │ │ │ ├── transition.css │ │ │ │ ├── typography/ │ │ │ │ │ └── links/ │ │ │ │ │ └── hover-link.css │ │ │ │ ├── units.css │ │ │ │ ├── user-interface.css │ │ │ │ ├── utilities.css │ │ │ │ ├── vertical_rhythm.css │ │ │ │ ├── vertical_rhythm_with_ems.css │ │ │ │ ├── vertical_rhythm_with_px.css │ │ │ │ └── vertical_rhythm_with_rems.css │ │ │ └── sass/ │ │ │ ├── animation-with-legacy-ie.scss │ │ │ ├── animation.scss │ │ │ ├── appearance.scss │ │ │ ├── background-clip.scss │ │ │ ├── background-origin.scss │ │ │ ├── background-size.scss │ │ │ ├── border_radius.scss │ │ │ ├── box-sizing.scss │ │ │ ├── box.sass │ │ │ ├── box_shadow.scss │ │ │ ├── brightness.scss │ │ │ ├── browser-support.scss │ │ │ ├── color.scss │ │ │ ├── columns.scss │ │ │ ├── filters.scss │ │ │ ├── flexbox.scss │ │ │ ├── fonts.sass │ │ │ ├── force-wrap.scss │ │ │ ├── gradients.sass │ │ │ ├── grid_background.scss │ │ │ ├── hyphenation.scss │ │ │ ├── image_size.sass │ │ │ ├── images.scss │ │ │ ├── layout.sass │ │ │ ├── legacy_clearfix.scss │ │ │ ├── lists.scss │ │ │ ├── opacity.scss │ │ │ ├── print.sass │ │ │ ├── regions.scss │ │ │ ├── replacement.scss │ │ │ ├── reset.sass │ │ │ ├── selection.scss │ │ │ ├── sprites_with_explicit_separator.scss │ │ │ ├── stretching.sass │ │ │ ├── support.scss │ │ │ ├── text_shadow.scss │ │ │ ├── transform.scss │ │ │ ├── transition.scss │ │ │ ├── typography/ │ │ │ │ └── links/ │ │ │ │ └── hover-link.scss │ │ │ ├── units.scss │ │ │ ├── user-interface.scss │ │ │ ├── utilities.scss │ │ │ ├── vertical_rhythm.scss │ │ │ ├── vertical_rhythm_with_ems.scss │ │ │ ├── vertical_rhythm_with_px.scss │ │ │ └── vertical_rhythm_with_rems.scss │ │ ├── envtest/ │ │ │ ├── config.rb │ │ │ ├── css/ │ │ │ │ └── env.css │ │ │ └── sass/ │ │ │ └── env.scss │ │ ├── error/ │ │ │ ├── config.rb │ │ │ └── sass/ │ │ │ └── screen.sass │ │ ├── image_urls/ │ │ │ ├── config.rb │ │ │ ├── css/ │ │ │ │ └── screen.css │ │ │ └── sass/ │ │ │ └── screen.sass │ │ ├── relative/ │ │ │ ├── config.rb │ │ │ ├── css/ │ │ │ │ ├── ie.css │ │ │ │ ├── print.css │ │ │ │ └── screen.css │ │ │ └── sass/ │ │ │ ├── ie.sass │ │ │ ├── print.sass │ │ │ └── screen.sass │ │ ├── sourcemaps/ │ │ │ ├── config.rb │ │ │ ├── css/ │ │ │ │ ├── another_simple.css │ │ │ │ ├── simple.css │ │ │ │ └── with_libraries.css │ │ │ └── sass/ │ │ │ ├── another_simple.scss │ │ │ ├── simple.sass │ │ │ └── with_libraries.scss │ │ ├── uses_only_stylesheets_ext/ │ │ │ ├── config.rb │ │ │ ├── sass/ │ │ │ │ ├── ie.scss │ │ │ │ ├── print.scss │ │ │ │ └── screen.scss │ │ │ └── stylesheets/ │ │ │ ├── ie.css │ │ │ ├── print.css │ │ │ └── screen.css │ │ ├── valid/ │ │ │ ├── config.rb │ │ │ └── sass/ │ │ │ ├── another_simple.scss │ │ │ └── simple.sass │ │ └── with_sass_globbing/ │ │ ├── config.rb │ │ ├── css/ │ │ │ └── screen.css │ │ └── sass/ │ │ ├── partials/ │ │ │ ├── _1.scss │ │ │ ├── _2.scss │ │ │ └── _3.scss │ │ └── screen.scss │ ├── helpers/ │ │ ├── command_line.rb │ │ ├── diff.rb │ │ ├── io.rb │ │ ├── rails.rb │ │ └── test_case.rb │ ├── integrations/ │ │ ├── compass_test.rb │ │ └── sprites_test.rb │ ├── test_helper.rb │ └── units/ │ ├── actions_test.rb │ ├── caniuse_test.rb │ ├── command_line_test.rb │ ├── compass_util_test.rb │ ├── compiler_test.rb │ ├── configuration_test.rb │ ├── regressions_test.rb │ ├── sass_extensions_test.rb │ ├── sass_extenstions/ │ │ └── gradients_test.rb │ └── sprites/ │ ├── engine_test.rb │ ├── image_row_test.rb │ ├── image_test.rb │ ├── images_test.rb │ ├── importer_test.rb │ ├── layout_test.rb │ ├── row_fitter_test.rb │ ├── sprite_command_test.rb │ └── sprite_map_test.rb ├── compass-style.org/ │ ├── .compass/ │ │ └── config.rb │ ├── .gitignore │ ├── .livereload │ ├── Gemfile │ ├── Procfile │ ├── README.markdown │ ├── Rakefile │ ├── Rules │ ├── assets/ │ │ ├── fonts/ │ │ │ └── examples/ │ │ │ └── bgrove.otf │ │ ├── htaccess │ │ └── javascripts/ │ │ ├── fixups.js │ │ ├── install.js │ │ ├── jquery.cookie.js │ │ ├── jquery.url.packed.js │ │ ├── placeholder.js │ │ ├── shAutoloader.js │ │ ├── shBrushCss.js │ │ ├── shBrushPlain.js │ │ ├── shBrushSass.js │ │ ├── shBrushScss.js │ │ ├── shBrushXml.js │ │ ├── shCore.js │ │ └── site.js │ ├── authors.yml │ ├── config.yaml │ ├── content/ │ │ ├── .livereload │ │ ├── CHANGELOG.markdown │ │ ├── blog/ │ │ │ ├── archive.haml │ │ │ └── atom.haml │ │ ├── blog.haml │ │ ├── copyright.markdown │ │ ├── examples/ │ │ │ ├── blueprint/ │ │ │ │ └── grid/ │ │ │ │ ├── pull/ │ │ │ │ │ └── stylesheet.scss │ │ │ │ └── two_cols/ │ │ │ │ └── stylesheet.scss │ │ │ ├── compass/ │ │ │ │ ├── css3/ │ │ │ │ │ ├── background-clip/ │ │ │ │ │ │ ├── markup.haml │ │ │ │ │ │ └── stylesheet.scss │ │ │ │ │ ├── background-clip.haml │ │ │ │ │ ├── background-origin/ │ │ │ │ │ │ ├── markup.haml │ │ │ │ │ │ └── stylesheet.scss │ │ │ │ │ ├── background-origin.haml │ │ │ │ │ ├── background-size/ │ │ │ │ │ │ ├── markup.haml │ │ │ │ │ │ └── stylesheet.scss │ │ │ │ │ ├── background-size.haml │ │ │ │ │ ├── border_radius/ │ │ │ │ │ │ ├── markup.haml │ │ │ │ │ │ └── stylesheet.scss │ │ │ │ │ ├── border_radius.haml │ │ │ │ │ ├── box_shadow/ │ │ │ │ │ │ ├── markup.haml │ │ │ │ │ │ └── stylesheet.scss │ │ │ │ │ ├── box_shadow.haml │ │ │ │ │ ├── box_sizing/ │ │ │ │ │ │ ├── markup.haml │ │ │ │ │ │ └── stylesheet.scss │ │ │ │ │ ├── box_sizing.haml │ │ │ │ │ ├── columns/ │ │ │ │ │ │ ├── markup.haml │ │ │ │ │ │ └── stylesheet.scss │ │ │ │ │ ├── columns.haml │ │ │ │ │ ├── flexbox/ │ │ │ │ │ │ ├── markup.haml │ │ │ │ │ │ └── stylesheet.scss │ │ │ │ │ ├── flexbox.haml │ │ │ │ │ ├── font-face/ │ │ │ │ │ │ ├── markup.haml │ │ │ │ │ │ └── stylesheet.scss │ │ │ │ │ ├── font-face.haml │ │ │ │ │ ├── gradient/ │ │ │ │ │ │ ├── markup.haml │ │ │ │ │ │ └── stylesheet.scss │ │ │ │ │ ├── gradient.haml │ │ │ │ │ ├── inline_block/ │ │ │ │ │ │ ├── markup.haml │ │ │ │ │ │ └── stylesheet.scss │ │ │ │ │ ├── inline_block.haml │ │ │ │ │ ├── input-placeholder/ │ │ │ │ │ │ ├── markup.haml │ │ │ │ │ │ └── stylesheet.scss │ │ │ │ │ ├── input-placeholder.haml │ │ │ │ │ ├── opacity/ │ │ │ │ │ │ ├── markup.haml │ │ │ │ │ │ └── stylesheet.scss │ │ │ │ │ ├── opacity.haml │ │ │ │ │ ├── regions/ │ │ │ │ │ │ ├── markup.haml │ │ │ │ │ │ └── stylesheet.scss │ │ │ │ │ ├── regions.haml │ │ │ │ │ ├── text_shadow/ │ │ │ │ │ │ ├── markup.haml │ │ │ │ │ │ └── stylesheet.scss │ │ │ │ │ ├── text_shadow.haml │ │ │ │ │ ├── transition/ │ │ │ │ │ │ ├── markup.haml │ │ │ │ │ │ └── stylesheet.scss │ │ │ │ │ └── transition.haml │ │ │ │ ├── helpers/ │ │ │ │ │ ├── elements-of-type/ │ │ │ │ │ │ ├── markup.haml │ │ │ │ │ │ └── stylesheet.scss │ │ │ │ │ ├── elements-of-type.haml │ │ │ │ │ ├── enumerate/ │ │ │ │ │ │ ├── markup.haml │ │ │ │ │ │ └── stylesheet.scss │ │ │ │ │ ├── enumerate.haml │ │ │ │ │ ├── using-extend-in-place-of-enumerate/ │ │ │ │ │ │ ├── markup.haml │ │ │ │ │ │ └── stylesheet.scss │ │ │ │ │ └── using-extend-in-place-of-enumerate.haml │ │ │ │ ├── layout/ │ │ │ │ │ ├── sticky-footer/ │ │ │ │ │ │ ├── markup.haml │ │ │ │ │ │ └── stylesheet.scss │ │ │ │ │ ├── sticky-footer.haml │ │ │ │ │ ├── stretching/ │ │ │ │ │ │ ├── markup.haml │ │ │ │ │ │ └── stylesheet.scss │ │ │ │ │ └── stretching.haml │ │ │ │ ├── tables/ │ │ │ │ │ ├── all/ │ │ │ │ │ │ ├── markup.haml │ │ │ │ │ │ └── stylesheet.scss │ │ │ │ │ ├── all.haml │ │ │ │ │ ├── borders/ │ │ │ │ │ │ ├── markup.haml │ │ │ │ │ │ └── stylesheet.scss │ │ │ │ │ ├── borders.haml │ │ │ │ │ ├── scaffolding/ │ │ │ │ │ │ ├── markup.haml │ │ │ │ │ │ └── stylesheet.scss │ │ │ │ │ ├── scaffolding.haml │ │ │ │ │ ├── striping/ │ │ │ │ │ │ ├── markup.haml │ │ │ │ │ │ └── stylesheet.scss │ │ │ │ │ └── striping.haml │ │ │ │ └── utilities/ │ │ │ │ ├── contrast/ │ │ │ │ │ ├── markup.haml │ │ │ │ │ └── stylesheet.scss │ │ │ │ └── contrast.haml │ │ │ └── index.haml │ │ ├── frameworks.haml │ │ ├── get-involved/ │ │ │ └── index.haml │ │ ├── help/ │ │ │ ├── documentation/ │ │ │ │ ├── command-line.markdown │ │ │ │ ├── configuration-reference.markdown │ │ │ │ ├── sass-based-configuration-options.markdown │ │ │ │ └── tuning-vendor-prefixes.markdown │ │ │ ├── documentation.haml │ │ │ ├── index.haml │ │ │ ├── tutorials/ │ │ │ │ ├── best_practices.markdown │ │ │ │ ├── configurable-variables.haml │ │ │ │ ├── contributing.markdown │ │ │ │ ├── extending.markdown │ │ │ │ ├── extensions.markdown │ │ │ │ ├── integration.markdown │ │ │ │ ├── production-css.markdown │ │ │ │ ├── spriting/ │ │ │ │ │ ├── customization-options.markdown │ │ │ │ │ ├── magic-selectors.markdown │ │ │ │ │ └── sprite-layouts.markdown │ │ │ │ ├── spriting.markdown │ │ │ │ ├── testing.markdown │ │ │ │ ├── upgrading/ │ │ │ │ │ ├── antares.markdown │ │ │ │ │ ├── im-scared.markdown │ │ │ │ │ └── lemonade_upgrade_guide.markdown │ │ │ │ └── upgrading.markdown │ │ │ └── tutorials.haml │ │ ├── index/ │ │ │ ├── functions.haml │ │ │ ├── mixins.haml │ │ │ └── variables.haml │ │ ├── index.haml │ │ ├── install.haml │ │ ├── posts/ │ │ │ ├── 2011-04-24-v011-release.markdown │ │ │ ├── 2011-04-26-compass-release-strategy.markdown │ │ │ ├── 2011-05-09-compass-django.markdown │ │ │ ├── 2012-01-29-compass-and-rails-integration.markdown │ │ │ ├── 2012-02-01-compass-0-12-is-released.markdown │ │ │ ├── 2012-05-20-removing-blueprint.markdown │ │ │ ├── 2013-11-27-compass-versioning-change.markdown │ │ │ └── 2014-08-15-omg-compass-1-0.markdown │ │ ├── reference/ │ │ │ ├── compass/ │ │ │ │ ├── css3/ │ │ │ │ │ ├── animation.haml │ │ │ │ │ ├── appearance.haml │ │ │ │ │ ├── background_clip.haml │ │ │ │ │ ├── background_origin.haml │ │ │ │ │ ├── background_size.haml │ │ │ │ │ ├── border_radius.haml │ │ │ │ │ ├── box.haml │ │ │ │ │ ├── box_shadow.haml │ │ │ │ │ ├── box_sizing.haml │ │ │ │ │ ├── columns.haml │ │ │ │ │ ├── filter.haml │ │ │ │ │ ├── flexbox.haml │ │ │ │ │ ├── font_face.haml │ │ │ │ │ ├── hyphenation.haml │ │ │ │ │ ├── images.haml │ │ │ │ │ ├── inline_block.haml │ │ │ │ │ ├── opacity.haml │ │ │ │ │ ├── pie.haml │ │ │ │ │ ├── regions.haml │ │ │ │ │ ├── selection.haml │ │ │ │ │ ├── shared.haml │ │ │ │ │ ├── text-shadow.haml │ │ │ │ │ ├── transform.haml │ │ │ │ │ ├── transition.haml │ │ │ │ │ └── user_interface.haml │ │ │ │ ├── css3.haml │ │ │ │ ├── helpers/ │ │ │ │ │ ├── color-stops.haml │ │ │ │ │ ├── colors.haml │ │ │ │ │ ├── constants.haml │ │ │ │ │ ├── cross-browser.haml │ │ │ │ │ ├── display.haml │ │ │ │ │ ├── env.haml │ │ │ │ │ ├── font-files.haml │ │ │ │ │ ├── image-dimensions.haml │ │ │ │ │ ├── inline-data.haml │ │ │ │ │ ├── math.haml │ │ │ │ │ ├── selectors.haml │ │ │ │ │ ├── sprites.haml │ │ │ │ │ └── urls.haml │ │ │ │ ├── helpers.haml │ │ │ │ ├── layout/ │ │ │ │ │ ├── grid_background.haml │ │ │ │ │ ├── sticky_footer.haml │ │ │ │ │ └── stretching.haml │ │ │ │ ├── layout.haml │ │ │ │ ├── reset/ │ │ │ │ │ └── utilities.haml │ │ │ │ ├── reset-legacy/ │ │ │ │ │ └── utilities-legacy.haml │ │ │ │ ├── reset-legacy.haml │ │ │ │ ├── reset.haml │ │ │ │ ├── support.haml │ │ │ │ ├── typography/ │ │ │ │ │ ├── links/ │ │ │ │ │ │ ├── hover_link.haml │ │ │ │ │ │ ├── link_colors.haml │ │ │ │ │ │ └── unstyled_link.haml │ │ │ │ │ ├── links.haml │ │ │ │ │ ├── lists/ │ │ │ │ │ │ ├── bullets.haml │ │ │ │ │ │ ├── horizontal_list.haml │ │ │ │ │ │ ├── inline-block-list.haml │ │ │ │ │ │ └── inline_list.haml │ │ │ │ │ ├── lists.haml │ │ │ │ │ ├── text/ │ │ │ │ │ │ ├── ellipsis.haml │ │ │ │ │ │ ├── force-wrap.haml │ │ │ │ │ │ ├── nowrap.haml │ │ │ │ │ │ └── replacement.haml │ │ │ │ │ ├── text.haml │ │ │ │ │ └── vertical_rhythm.haml │ │ │ │ ├── typography.haml │ │ │ │ ├── utilities/ │ │ │ │ │ ├── color/ │ │ │ │ │ │ ├── brightness.haml │ │ │ │ │ │ └── contrast.haml │ │ │ │ │ ├── color.haml │ │ │ │ │ ├── general/ │ │ │ │ │ │ ├── clearfix.haml │ │ │ │ │ │ ├── float.haml │ │ │ │ │ │ ├── hacks.haml │ │ │ │ │ │ ├── min.haml │ │ │ │ │ │ ├── reset.haml │ │ │ │ │ │ └── tag_cloud.haml │ │ │ │ │ ├── general.haml │ │ │ │ │ ├── print.haml │ │ │ │ │ ├── sprites/ │ │ │ │ │ │ ├── base.haml │ │ │ │ │ │ └── sprite_img.haml │ │ │ │ │ ├── sprites.haml │ │ │ │ │ ├── tables/ │ │ │ │ │ │ ├── alternating_rows_and_columns.haml │ │ │ │ │ │ ├── borders.haml │ │ │ │ │ │ └── scaffolding.haml │ │ │ │ │ └── tables.haml │ │ │ │ └── utilities.haml │ │ │ └── compass.haml │ │ ├── reference.haml │ │ ├── screencast.haml │ │ ├── search-data.js.erb │ │ ├── search.haml │ │ ├── sitemap.xml │ │ └── stylesheets/ │ │ ├── core/ │ │ │ ├── _base-classes.sass │ │ │ ├── _clearing-classes.sass │ │ │ ├── _extensions.scss │ │ │ └── _media-block.scss │ │ ├── home.scss │ │ ├── ie.scss │ │ ├── partials/ │ │ │ ├── _ads.scss │ │ │ ├── _blog.scss │ │ │ ├── _code.scss │ │ │ ├── _example.scss │ │ │ ├── _home.scss │ │ │ ├── _install.scss │ │ │ ├── _layout.scss │ │ │ ├── _main.scss │ │ │ ├── _nav.scss │ │ │ ├── _sidebar.scss │ │ │ ├── _theme.scss │ │ │ └── _typography.scss │ │ ├── screen.scss │ │ └── syntax/ │ │ ├── _shCore.scss │ │ ├── _shThemeRDark.scss │ │ ├── _syntax-theme.scss │ │ └── _theme_template.scss │ ├── layouts/ │ │ ├── article.haml │ │ ├── basic.haml │ │ ├── blog.haml │ │ ├── core.haml │ │ ├── default.haml │ │ ├── documentation.haml │ │ ├── example.haml │ │ ├── homepage.haml │ │ ├── main.haml │ │ ├── partials/ │ │ │ ├── ad.haml │ │ │ ├── analytics.haml │ │ │ ├── breadcrumbs.haml │ │ │ ├── example.haml │ │ │ ├── footer.haml │ │ │ ├── js-core.haml │ │ │ ├── js-highlighter.haml │ │ │ ├── main-navigation.haml │ │ │ ├── reference/ │ │ │ │ ├── const_table.haml │ │ │ │ ├── constants.haml │ │ │ │ ├── examples.haml │ │ │ │ ├── functions.haml │ │ │ │ ├── import-few.haml │ │ │ │ ├── import.haml │ │ │ │ ├── imports.haml │ │ │ │ ├── mixins.haml │ │ │ │ └── selectors.haml │ │ │ ├── sidebar/ │ │ │ │ ├── container.haml │ │ │ │ ├── heading.haml │ │ │ │ └── item.haml │ │ │ └── sidebar.haml │ │ ├── post.haml │ │ ├── redirect.haml │ │ ├── reference.haml │ │ ├── simple_core.haml │ │ ├── site.haml │ │ └── tutorial.haml │ ├── lib/ │ │ ├── blog.rb │ │ ├── data_sources/ │ │ │ ├── asset_data_source.rb │ │ │ ├── better_combined_datasource.rb │ │ │ ├── core_extensions.rb │ │ │ ├── nanoc_monkey_patches.rb │ │ │ └── syntax_highter.rb │ │ ├── default.rb │ │ ├── examples.rb │ │ ├── search.rb │ │ ├── stylesheets/ │ │ │ └── sass_extensions.rb │ │ └── stylesheets.rb │ └── tasks/ │ └── generators.thor ├── core/ │ ├── .gitignore │ ├── Gemfile │ ├── LICENSE.txt │ ├── README.md │ ├── Rakefile │ ├── VERSION │ ├── compass-core.gemspec │ ├── data/ │ │ ├── caniuse.json │ │ └── caniuse_extras/ │ │ └── css-placeholder.json │ ├── lib/ │ │ ├── compass/ │ │ │ ├── browser_support.rb │ │ │ ├── configuration/ │ │ │ │ ├── adapters.rb │ │ │ │ ├── data.rb │ │ │ │ ├── defaults.rb │ │ │ │ ├── inheritance.rb │ │ │ │ ├── paths.rb │ │ │ │ └── watch.rb │ │ │ ├── configuration.rb │ │ │ ├── core/ │ │ │ │ ├── caniuse.rb │ │ │ │ ├── generated_version.rb │ │ │ │ ├── sass_extensions/ │ │ │ │ │ ├── functions/ │ │ │ │ │ │ ├── colors.rb │ │ │ │ │ │ ├── configuration.rb │ │ │ │ │ │ ├── constants.rb │ │ │ │ │ │ ├── cross_browser_support.rb │ │ │ │ │ │ ├── display.rb │ │ │ │ │ │ ├── enumerate.rb │ │ │ │ │ │ ├── env.rb │ │ │ │ │ │ ├── files.rb │ │ │ │ │ │ ├── font_files.rb │ │ │ │ │ │ ├── gradient_support.rb │ │ │ │ │ │ ├── image_size.rb │ │ │ │ │ │ ├── inline_image.rb │ │ │ │ │ │ ├── lists.rb │ │ │ │ │ │ ├── math.rb │ │ │ │ │ │ ├── selectors.rb │ │ │ │ │ │ └── urls.rb │ │ │ │ │ ├── functions.rb │ │ │ │ │ ├── monkey_patches/ │ │ │ │ │ │ ├── browser_support.rb │ │ │ │ │ │ └── traversal.rb │ │ │ │ │ └── monkey_patches.rb │ │ │ │ ├── sass_extensions.rb │ │ │ │ └── version.rb │ │ │ ├── core.rb │ │ │ ├── error.rb │ │ │ ├── frameworks.rb │ │ │ └── util.rb │ │ └── compass-core.rb │ ├── stylesheets/ │ │ ├── _compass.scss │ │ ├── _lemonade.scss │ │ └── compass/ │ │ ├── _configuration.scss │ │ ├── _css3.scss │ │ ├── _layout.scss │ │ ├── _reset-legacy.scss │ │ ├── _reset.scss │ │ ├── _support.scss │ │ ├── _typography.scss │ │ ├── _utilities.scss │ │ ├── css3/ │ │ │ ├── _animation.scss │ │ │ ├── _appearance.scss │ │ │ ├── _background-clip.scss │ │ │ ├── _background-origin.scss │ │ │ ├── _background-size.scss │ │ │ ├── _border-radius.scss │ │ │ ├── _box-shadow.scss │ │ │ ├── _box-sizing.scss │ │ │ ├── _box.scss │ │ │ ├── _columns.scss │ │ │ ├── _deprecated-support.scss │ │ │ ├── _filter.scss │ │ │ ├── _flexbox.scss │ │ │ ├── _font-face.scss │ │ │ ├── _hyphenation.scss │ │ │ ├── _images.scss │ │ │ ├── _inline-block.scss │ │ │ ├── _opacity.scss │ │ │ ├── _pie.scss │ │ │ ├── _regions.scss │ │ │ ├── _selection.scss │ │ │ ├── _shared.scss │ │ │ ├── _text-shadow.scss │ │ │ ├── _transform.scss │ │ │ ├── _transition.scss │ │ │ └── _user-interface.scss │ │ ├── layout/ │ │ │ ├── _grid-background.scss │ │ │ ├── _sticky-footer.scss │ │ │ └── _stretching.scss │ │ ├── reset/ │ │ │ ├── _utilities-legacy.scss │ │ │ └── _utilities.scss │ │ ├── typography/ │ │ │ ├── _links.scss │ │ │ ├── _lists.scss │ │ │ ├── _text.scss │ │ │ ├── _units.scss │ │ │ ├── _vertical_rhythm.scss │ │ │ ├── links/ │ │ │ │ ├── _hover-link.scss │ │ │ │ ├── _link-colors.scss │ │ │ │ └── _unstyled-link.scss │ │ │ ├── lists/ │ │ │ │ ├── _bullets.scss │ │ │ │ ├── _horizontal-list.scss │ │ │ │ ├── _inline-block-list.scss │ │ │ │ └── _inline-list.scss │ │ │ └── text/ │ │ │ ├── _ellipsis.scss │ │ │ ├── _force-wrap.scss │ │ │ ├── _nowrap.scss │ │ │ └── _replacement.scss │ │ └── utilities/ │ │ ├── _color.scss │ │ ├── _general.scss │ │ ├── _links.scss │ │ ├── _lists.scss │ │ ├── _print.scss │ │ ├── _sass.scss │ │ ├── _sprites.scss │ │ ├── _tables.scss │ │ ├── _text.scss │ │ ├── color/ │ │ │ ├── _brightness.scss │ │ │ └── _contrast.scss │ │ ├── general/ │ │ │ ├── _clearfix.scss │ │ │ ├── _float.scss │ │ │ ├── _hacks.scss │ │ │ ├── _min.scss │ │ │ ├── _reset.scss │ │ │ ├── _tabs.scss │ │ │ └── _tag-cloud.scss │ │ ├── links/ │ │ │ ├── _hover-link.scss │ │ │ ├── _link-colors.scss │ │ │ └── _unstyled-link.scss │ │ ├── lists/ │ │ │ ├── _bullets.scss │ │ │ ├── _horizontal-list.scss │ │ │ ├── _inline-block-list.scss │ │ │ └── _inline-list.scss │ │ ├── sass/ │ │ │ ├── _lists.scss │ │ │ └── _maps.scss │ │ ├── sprites/ │ │ │ ├── _base.scss │ │ │ └── _sprite-img.scss │ │ ├── tables/ │ │ │ ├── _alternating-rows-and-columns.scss │ │ │ ├── _borders.scss │ │ │ └── _scaffolding.scss │ │ └── text/ │ │ ├── _ellipsis.scss │ │ ├── _nowrap.scss │ │ └── _replacement.scss │ ├── templates/ │ │ ├── ellipsis/ │ │ │ ├── ellipsis.sass │ │ │ ├── manifest.rb │ │ │ └── xml/ │ │ │ └── ellipsis.xml │ │ ├── extension/ │ │ │ ├── manifest.rb │ │ │ ├── stylesheets/ │ │ │ │ └── main.sass │ │ │ └── templates/ │ │ │ └── project/ │ │ │ ├── manifest.rb │ │ │ └── screen.sass │ │ └── project/ │ │ ├── USAGE.markdown │ │ ├── ie.sass │ │ ├── manifest.rb │ │ ├── print.sass │ │ └── screen.sass │ └── test/ │ ├── helpers/ │ │ └── diff.rb │ ├── integrations/ │ │ ├── projects/ │ │ │ ├── .gitignore │ │ │ ├── busted_font_urls/ │ │ │ │ ├── css/ │ │ │ │ │ └── screen.css │ │ │ │ └── sass/ │ │ │ │ ├── _project-setup.scss │ │ │ │ └── screen.sass │ │ │ ├── busted_image_urls/ │ │ │ │ ├── css/ │ │ │ │ │ └── screen.css │ │ │ │ └── sass/ │ │ │ │ ├── _project-setup.scss │ │ │ │ └── screen.sass │ │ │ ├── compass/ │ │ │ │ ├── css/ │ │ │ │ │ ├── animation-with-legacy-ie.css │ │ │ │ │ ├── animation.css │ │ │ │ │ ├── appearance.css │ │ │ │ │ ├── background-clip.css │ │ │ │ │ ├── background-origin.css │ │ │ │ │ ├── background-size.css │ │ │ │ │ ├── border_radius.css │ │ │ │ │ ├── box-sizing.css │ │ │ │ │ ├── box.css │ │ │ │ │ ├── box_shadow.css │ │ │ │ │ ├── brightness.css │ │ │ │ │ ├── browser-support.css │ │ │ │ │ ├── color.css │ │ │ │ │ ├── columns.css │ │ │ │ │ ├── env.css │ │ │ │ │ ├── filters.css │ │ │ │ │ ├── flexbox.css │ │ │ │ │ ├── fonts.css │ │ │ │ │ ├── force-wrap.css │ │ │ │ │ ├── gradients.css │ │ │ │ │ ├── grid_background.css │ │ │ │ │ ├── hyphenation.css │ │ │ │ │ ├── image_size.css │ │ │ │ │ ├── images.css │ │ │ │ │ ├── issue-1853.css │ │ │ │ │ ├── layout.css │ │ │ │ │ ├── legacy_clearfix.css │ │ │ │ │ ├── lists.css │ │ │ │ │ ├── opacity.css │ │ │ │ │ ├── print.css │ │ │ │ │ ├── regions.css │ │ │ │ │ ├── replacement.css │ │ │ │ │ ├── reset.css │ │ │ │ │ ├── selection.css │ │ │ │ │ ├── selection.css.3.3 │ │ │ │ │ ├── stretching.css │ │ │ │ │ ├── support.css │ │ │ │ │ ├── table.css │ │ │ │ │ ├── text_shadow.css │ │ │ │ │ ├── transform.css │ │ │ │ │ ├── transition.css │ │ │ │ │ ├── typography/ │ │ │ │ │ │ └── links/ │ │ │ │ │ │ └── hover-link.css │ │ │ │ │ ├── units.css │ │ │ │ │ ├── user-interface.css │ │ │ │ │ ├── utilities.css │ │ │ │ │ ├── utilities.css.3.3 │ │ │ │ │ └── vertical_rhythm.css │ │ │ │ └── sass/ │ │ │ │ ├── _project-setup.scss │ │ │ │ ├── animation-with-legacy-ie.scss │ │ │ │ ├── animation.scss │ │ │ │ ├── appearance.scss │ │ │ │ ├── background-clip.scss │ │ │ │ ├── background-origin.scss │ │ │ │ ├── background-size.scss │ │ │ │ ├── border_radius.scss │ │ │ │ ├── box-sizing.scss │ │ │ │ ├── box.sass │ │ │ │ ├── box_shadow.scss │ │ │ │ ├── brightness.scss │ │ │ │ ├── browser-support.scss │ │ │ │ ├── color.scss │ │ │ │ ├── columns.scss │ │ │ │ ├── env.scss │ │ │ │ ├── filters.scss │ │ │ │ ├── flexbox.scss │ │ │ │ ├── fonts.sass │ │ │ │ ├── force-wrap.scss │ │ │ │ ├── gradients.sass │ │ │ │ ├── grid_background.scss │ │ │ │ ├── hyphenation.scss │ │ │ │ ├── image_size.sass │ │ │ │ ├── images.scss │ │ │ │ ├── issue-1853.scss │ │ │ │ ├── layout.sass │ │ │ │ ├── legacy_clearfix.scss │ │ │ │ ├── lists.scss │ │ │ │ ├── opacity.scss │ │ │ │ ├── print.sass │ │ │ │ ├── regions.scss │ │ │ │ ├── replacement.scss │ │ │ │ ├── reset.sass │ │ │ │ ├── selection.scss │ │ │ │ ├── stretching.sass │ │ │ │ ├── support.scss │ │ │ │ ├── table.scss │ │ │ │ ├── text_shadow.scss │ │ │ │ ├── transform.scss │ │ │ │ ├── transition.scss │ │ │ │ ├── typography/ │ │ │ │ │ └── links/ │ │ │ │ │ └── hover-link.scss │ │ │ │ ├── units.scss │ │ │ │ ├── user-interface.scss │ │ │ │ ├── utilities.scss │ │ │ │ └── vertical_rhythm.scss │ │ │ ├── envtest/ │ │ │ │ ├── css/ │ │ │ │ │ └── env.css │ │ │ │ └── sass/ │ │ │ │ ├── _project-setup.scss │ │ │ │ └── env.scss │ │ │ ├── image_urls/ │ │ │ │ ├── css/ │ │ │ │ │ └── screen.css │ │ │ │ └── sass/ │ │ │ │ ├── _project-setup.scss │ │ │ │ └── screen.sass │ │ │ ├── relative/ │ │ │ │ ├── css/ │ │ │ │ │ ├── ie.css │ │ │ │ │ ├── print.css │ │ │ │ │ └── screen.css │ │ │ │ └── sass/ │ │ │ │ ├── _project-setup.scss │ │ │ │ ├── ie.sass │ │ │ │ ├── print.sass │ │ │ │ └── screen.sass │ │ │ ├── uses_only_stylesheets_ext/ │ │ │ │ ├── css/ │ │ │ │ │ ├── ie.css │ │ │ │ │ ├── print.css │ │ │ │ │ └── screen.css │ │ │ │ └── sass/ │ │ │ │ ├── ie.scss │ │ │ │ ├── print.scss │ │ │ │ └── screen.scss │ │ │ └── valid/ │ │ │ ├── css/ │ │ │ │ └── simple.css │ │ │ └── sass/ │ │ │ └── simple.sass │ │ ├── projects_test.rb │ │ └── test_helper.rb │ └── units/ │ ├── configuration_test.rb │ ├── frameworks_test.rb │ ├── shared_extension_paths_test.rb │ ├── test_helper.rb │ └── urls_test.rb ├── import-once/ │ ├── .gitignore │ ├── Gemfile │ ├── Gemfile_sass_3_2 │ ├── LICENSE.txt │ ├── README.md │ ├── Rakefile │ ├── VERSION │ ├── compass-import-once.gemspec │ ├── lib/ │ │ ├── compass/ │ │ │ ├── import-once/ │ │ │ │ ├── activate.rb │ │ │ │ ├── engine.rb │ │ │ │ ├── importer.rb │ │ │ │ └── version.rb │ │ │ └── import-once.rb │ │ └── compass-import-once.rb │ └── test/ │ ├── diff_as_string.rb │ ├── fixtures/ │ │ ├── _simple_partial.scss │ │ ├── basic.css │ │ ├── basic.scss │ │ ├── force_import.css │ │ ├── force_import.scss │ │ ├── with_globbing.css │ │ └── with_globbing.scss │ ├── import_once_test.rb │ └── test_helper.rb └── test_all.sh
SYMBOL INDEX (1687 symbols across 168 files)
FILE: cli/lib/compass.rb
type Compass (line 1) | module Compass
function base_directory (line 20) | def base_directory
function lib_directory (line 23) | def lib_directory
type Compass (line 19) | module Compass
function base_directory (line 20) | def base_directory
function lib_directory (line 23) | def lib_directory
FILE: cli/lib/compass/actions.rb
type Compass (line 1) | module Compass
type Actions (line 2) | module Actions
function logger (line 6) | def logger
function copy (line 11) | def copy(from, to, options = nil, binary = false)
function directory (line 22) | def directory(dir, options = nil)
function write_file (line 37) | def write_file(file_name, contents, options = nil, binary = false)
function process_erb (line 66) | def process_erb(contents, ctx = nil)
function remove (line 71) | def remove(file_name)
function basename (line 82) | def basename(file)
function relativize (line 86) | def relativize(path)
function separate (line 98) | def separate(path)
function strip_trailing_separator (line 103) | def strip_trailing_separator(path)
function log_action (line 107) | def log_action(action, file, options)
FILE: cli/lib/compass/app_integration.rb
type Compass (line 3) | module Compass
type AppIntegration (line 4) | module AppIntegration
type Helpers (line 5) | module Helpers
function init (line 11) | def init
function project_types (line 15) | def project_types
function default? (line 19) | def default?
function lookup (line 23) | def lookup(type)
function register (line 31) | def register(type, klass)
FILE: cli/lib/compass/app_integration/stand_alone.rb
type Compass (line 5) | module Compass
type AppIntegration (line 6) | module AppIntegration
type StandAlone (line 7) | module StandAlone
function installer (line 11) | def installer(*args)
function configuration (line 15) | def configuration
FILE: cli/lib/compass/app_integration/stand_alone/configuration_defaults.rb
type Compass (line 1) | module Compass
type AppIntegration (line 2) | module AppIntegration
type StandAlone (line 3) | module StandAlone
type ConfigurationDefaults (line 4) | module ConfigurationDefaults
function default_project_type (line 5) | def default_project_type
function sass_dir_without_default (line 9) | def sass_dir_without_default
function javascripts_dir_without_default (line 13) | def javascripts_dir_without_default
function css_dir_without_default (line 17) | def css_dir_without_default
function images_dir_without_default (line 21) | def images_dir_without_default
function default_cache_dir (line 25) | def default_cache_dir
FILE: cli/lib/compass/app_integration/stand_alone/installer.rb
type Compass (line 1) | module Compass
type Installers (line 2) | module Installers
class Base (line 3) | class Base
class ManifestInstaller (line 5) | class ManifestInstaller < Base
type AppIntegration (line 9) | module AppIntegration
type StandAlone (line 10) | module StandAlone
class Installer (line 11) | class Installer < Compass::Installers::ManifestInstaller
method init (line 13) | def init
method write_configuration_files (line 18) | def write_configuration_files(config_file = nil)
method config_files_exist? (line 23) | def config_files_exist?
method config_contents (line 27) | def config_contents
method prepare (line 34) | def prepare
method completed_configuration (line 38) | def completed_configuration
method finalize (line 42) | def finalize(options = {})
method compilation_required? (line 77) | def compilation_required?
FILE: cli/lib/compass/commands.rb
type Compass::Commands (line 1) | module Compass::Commands
FILE: cli/lib/compass/commands/base.rb
type Compass (line 1) | module Compass
type Commands (line 2) | module Commands
class Base (line 3) | class Base
method register (line 4) | def self.register(command_name)
method initialize (line 12) | def initialize(working_path, options)
method execute (line 17) | def execute
method perform (line 21) | def perform
method successful? (line 25) | def successful?
method failed! (line 29) | def failed!
method framework (line 35) | def framework
FILE: cli/lib/compass/commands/clean_project.rb
type Compass (line 4) | module Compass
type Commands (line 5) | module Commands
type CleanProjectOptionsParser (line 6) | module CleanProjectOptionsParser
function set_options (line 7) | def set_options(opts)
class CleanProject (line 21) | class CleanProject < UpdateProject
method initialize (line 25) | def initialize(working_path, options)
method perform (line 30) | def perform
method determine_cache_location (line 38) | def determine_cache_location
method option_parser (line 43) | def option_parser(arguments)
method usage (line 50) | def usage
method primary (line 54) | def primary; true; end
method description (line 56) | def description(command)
method parse! (line 60) | def parse!(arguments)
method parse_arguments! (line 67) | def parse_arguments!(parser, arguments)
FILE: cli/lib/compass/commands/create_project.rb
type Compass (line 4) | module Compass
type Commands (line 5) | module Commands
type CreateProjectOptionsParser (line 6) | module CreateProjectOptionsParser
function set_options (line 7) | def set_options(opts)
class CreateProject (line 55) | class CreateProject < StampPattern
method option_parser (line 61) | def option_parser(arguments)
method usage (line 68) | def usage
method description (line 72) | def description(command)
method primary (line 80) | def primary; true; end
method parse! (line 82) | def parse!(arguments)
method parse_init! (line 93) | def parse_init!(arguments)
method parse_options! (line 104) | def parse_options!(parser, arguments)
method parse_arguments! (line 109) | def parse_arguments!(parser, arguments)
method set_default_arguments (line 119) | def set_default_arguments(parser)
method is_project_creation? (line 125) | def is_project_creation?
FILE: cli/lib/compass/commands/default.rb
type Compass (line 1) | module Compass
type Commands (line 2) | module Commands
type DefaultOptionsParser (line 3) | module DefaultOptionsParser
function set_options (line 4) | def set_options(opts)
class Default (line 24) | class Default < Base
method option_parser (line 27) | def option_parser(arguments)
method parse! (line 35) | def parse!(arguments)
method execute (line 45) | def execute
FILE: cli/lib/compass/commands/extension_command.rb
type Compass (line 4) | module Compass
type Commands (line 5) | module Commands
type ExtensionsOptionParser (line 6) | module ExtensionsOptionParser
function set_options (line 7) | def set_options(opts)
class ExtensionCommand (line 26) | class ExtensionCommand < Base
method option_parser (line 31) | def option_parser(arguments)
method usage (line 35) | def usage
method description (line 38) | def description(command)
method parse! (line 41) | def parse!(arguments)
method initialize (line 47) | def initialize(working_path, options)
method perform (line 52) | def perform
FILE: cli/lib/compass/commands/help.rb
type Compass (line 1) | module Compass
type Commands (line 2) | module Commands
type HelpOptionsParser (line 3) | module HelpOptionsParser
function set_options (line 4) | def set_options(opts)
function command_list (line 37) | def command_list(header, commands)
class Help (line 49) | class Help < Base
method option_parser (line 53) | def option_parser(arguments)
method usage (line 58) | def usage
method description (line 61) | def description(command)
method parse! (line 64) | def parse!(arguments)
method execute (line 72) | def execute
FILE: cli/lib/compass/commands/imports.rb
type Compass (line 1) | module Compass
type Commands (line 2) | module Commands
class Imports (line 3) | class Imports < ProjectBase
method initialize (line 6) | def initialize(working_path, options)
method execute (line 10) | def execute
method description (line 16) | def description(command)
method usage (line 19) | def usage
method parse! (line 25) | def parse!(arguments)
FILE: cli/lib/compass/commands/installer_command.rb
type Compass (line 3) | module Compass
type Commands (line 4) | module Commands
type InstallerCommand (line 5) | module InstallerCommand
function configure! (line 8) | def configure!
function app (line 15) | def app
function installer (line 19) | def installer
function installer_args (line 27) | def installer_args
FILE: cli/lib/compass/commands/interactive.rb
type Compass (line 5) | module Compass
type Commands (line 6) | module Commands
type InteractiveOptionsParser (line 7) | module InteractiveOptionsParser
function set_options (line 8) | def set_options(opts)
class Interactive (line 21) | class Interactive < ProjectBase
method initialize (line 25) | def initialize(working_path, options)
method perform (line 29) | def perform
method option_parser (line 36) | def option_parser(arguments)
method usage (line 43) | def usage
method description (line 47) | def description(command)
method parse! (line 51) | def parse!(arguments)
FILE: cli/lib/compass/commands/list_frameworks.rb
type Compass (line 1) | module Compass
type Commands (line 2) | module Commands
class ListFrameworks (line 3) | class ListFrameworks < ProjectBase
method initialize (line 6) | def initialize(working_path, options)
method execute (line 10) | def execute
method option_parser (line 21) | def option_parser(arguments)
method usage (line 25) | def usage
method description (line 28) | def description(command)
method parse! (line 31) | def parse!(arguments)
FILE: cli/lib/compass/commands/print_version.rb
type Compass (line 1) | module Compass
type Commands (line 2) | module Commands
type VersionOptionsParser (line 3) | module VersionOptionsParser
function set_options (line 4) | def set_options(opts)
class PrintVersion (line 34) | class PrintVersion < Base
method option_parser (line 38) | def option_parser(arguments)
method usage (line 42) | def usage
method description (line 45) | def description(command)
method parse! (line 48) | def parse!(arguments)
method long_output_string (line 53) | def long_output_string
method initialize (line 69) | def initialize(working_path, options)
method execute (line 73) | def execute
FILE: cli/lib/compass/commands/project_base.rb
type Compass (line 6) | module Compass
type Commands (line 7) | module Commands
class ProjectBase (line 8) | class ProjectBase < Base
method initialize (line 11) | def initialize(working_path, options = {})
method execute (line 18) | def execute
method configure! (line 24) | def configure!
method add_project_configuration (line 30) | def add_project_configuration
method projectize (line 42) | def projectize(path)
method project_directory (line 46) | def project_directory
method project_css_subdirectory (line 50) | def project_css_subdirectory
method project_src_subdirectory (line 54) | def project_src_subdirectory
method project_images_subdirectory (line 58) | def project_images_subdirectory
method assert_project_directory_exists! (line 62) | def assert_project_directory_exists!
method determine_project_name (line 72) | def determine_project_name(working_path, options)
method determine_project_directory (line 80) | def determine_project_directory(working_path, options)
method absolute_path? (line 92) | def absolute_path?(path)
method skip_extension_discovery? (line 97) | def skip_extension_discovery?
FILE: cli/lib/compass/commands/project_stats.rb
type Compass (line 4) | module Compass
type Commands (line 5) | module Commands
type StatsOptionsParser (line 6) | module StatsOptionsParser
function set_options (line 7) | def set_options(opts)
class ProjectStats (line 22) | class ProjectStats < UpdateProject
method initialize (line 26) | def initialize(working_path, options)
method perform (line 31) | def perform
method pad (line 73) | def pad(c, max, options = {})
method format_kb (line 87) | def format_kb(v)
method sorted_sass_files (line 98) | def sorted_sass_files(compiler)
method filename_columns (line 110) | def filename_columns(sass_file)
method sass_columns (line 115) | def sass_columns(sass_file)
method css_columns (line 123) | def css_columns(css_file)
method option_parser (line 140) | def option_parser(arguments)
method usage (line 147) | def usage
method description (line 151) | def description(command)
method primary (line 155) | def primary; false; end
method parse! (line 157) | def parse!(arguments)
method parse_arguments! (line 164) | def parse_arguments!(parser, arguments)
FILE: cli/lib/compass/commands/project_structure.rb
type Compass (line 4) | module Compass
type Commands (line 5) | module Commands
type StructureOptionsParser (line 6) | module StructureOptionsParser
function set_options (line 7) | def set_options(opts)
class ProjectStats (line 20) | class ProjectStats < UpdateProject
method initialize (line 24) | def initialize(working_path, options)
method perform (line 29) | def perform
method print_tree (line 36) | def print_tree(file, depth = 0, importer = @compiler.importer)
method sorted_sass_files (line 43) | def sorted_sass_files
method option_parser (line 57) | def option_parser(arguments)
method usage (line 64) | def usage
method description (line 68) | def description(command)
method primary (line 72) | def primary; false; end
method parse! (line 74) | def parse!(arguments)
method parse_arguments! (line 81) | def parse_arguments!(parser, arguments)
FILE: cli/lib/compass/commands/registry.rb
type Compass::Commands (line 1) | module Compass::Commands
type Registry (line 2) | module Registry
function register (line 3) | def register(name, command_class)
function get (line 7) | def get(name)
function abbreviation_of (line 12) | def abbreviation_of(name)
function abbreviation? (line 25) | def abbreviation?(name)
function command_exists? (line 29) | def command_exists?(name)
function all (line 33) | def all
FILE: cli/lib/compass/commands/sprite.rb
type Compass (line 4) | module Compass
type Commands (line 5) | module Commands
type SpriteOptionsParser (line 6) | module SpriteOptionsParser
function set_options (line 7) | def set_options(opts)
class Sprite (line 31) | class Sprite < ProjectBase
method initialize (line 35) | def initialize(working_path, options)
method perform (line 40) | def perform
method option_parser (line 56) | def option_parser(arguments)
method usage (line 63) | def usage
method description (line 67) | def description(command)
method parse! (line 71) | def parse!(arguments)
method parse_arguments! (line 78) | def parse_arguments!(parser, arguments)
FILE: cli/lib/compass/commands/stamp_pattern.rb
type Compass (line 5) | module Compass
type Commands (line 6) | module Commands
type StampPatternOptionsParser (line 7) | module StampPatternOptionsParser
function set_options (line 8) | def set_options(opts)
class StampPattern (line 27) | class StampPattern < ProjectBase
method option_parser (line 32) | def option_parser(arguments)
method usage (line 38) | def usage
method description (line 41) | def description(command)
method parse! (line 44) | def parse!(arguments)
method parse_arguments! (line 50) | def parse_arguments!(parser, arguments)
method initialize (line 68) | def initialize(working_path, options)
method perform (line 73) | def perform
method is_project_creation? (line 80) | def is_project_creation?
method template_directory (line 84) | def template_directory(pattern)
FILE: cli/lib/compass/commands/unpack_extension.rb
type Compass (line 4) | module Compass
type Commands (line 5) | module Commands
type ExtensionOptionsParser (line 6) | module ExtensionOptionsParser
function set_options (line 7) | def set_options(opts)
class UnpackExtension (line 26) | class UnpackExtension < ProjectBase
method initialize (line 30) | def initialize(working_path, options)
method perform (line 35) | def perform
method readme (line 57) | def readme(framework)
method skip_extension_discovery? (line 78) | def skip_extension_discovery?
method option_parser (line 84) | def option_parser(arguments)
method usage (line 91) | def usage
method description (line 95) | def description(command)
method parse! (line 99) | def parse!(arguments)
method parse_arguments! (line 106) | def parse_arguments!(parser, arguments)
FILE: cli/lib/compass/commands/update_project.rb
type Compass (line 4) | module Compass
type Commands (line 5) | module Commands
type CompileProjectOptionsParser (line 6) | module CompileProjectOptionsParser
function set_options (line 7) | def set_options(opts)
class UpdateProject (line 36) | class UpdateProject < ProjectBase
method initialize (line 40) | def initialize(working_path, options)
method perform (line 45) | def perform
method prepare_project! (line 58) | def prepare_project!(compiler)
method new_config? (line 71) | def new_config?(compiler)
method check_for_sass_files! (line 81) | def check_for_sass_files!(compiler)
method new_compiler_instance (line 92) | def new_compiler_instance
method compiler_options (line 96) | def compiler_options
method transfer_options (line 100) | def transfer_options(from, to, *keys)
method option_parser (line 108) | def option_parser(arguments)
method usage (line 115) | def usage
method primary (line 119) | def primary; true; end
method description (line 121) | def description(command)
method parse! (line 125) | def parse!(arguments)
method parse_arguments! (line 132) | def parse_arguments!(parser, arguments)
method absolutize (line 141) | def absolutize(*paths)
FILE: cli/lib/compass/commands/validate_project.rb
type Compass (line 4) | module Compass
type Commands (line 5) | module Commands
type ValidationOptionsParser (line 6) | module ValidationOptionsParser
function set_options (line 7) | def set_options(opts)
class ValidateProject (line 22) | class ValidateProject < ProjectBase
method initialize (line 26) | def initialize(working_path, options)
method perform (line 31) | def perform
method option_parser (line 41) | def option_parser(arguments)
method usage (line 48) | def usage
method description (line 52) | def description(command)
method parse! (line 56) | def parse!(arguments)
method parse_arguments! (line 63) | def parse_arguments!(parser, arguments)
FILE: cli/lib/compass/commands/watch_project.rb
type Compass (line 7) | module Compass
type Commands (line 8) | module Commands
type WatchProjectOptionsParser (line 9) | module WatchProjectOptionsParser
function set_options (line 10) | def set_options(opts)
class WatchProject (line 29) | class WatchProject < UpdateProject
method perform (line 35) | def perform
method happy_styling! (line 48) | def happy_styling!(logger)
method compiler_options (line 52) | def compiler_options
method additional_watch_paths (line 56) | def additional_watch_paths
method notify_watches (line 70) | def notify_watches(modified, added, removed)
method relative_to (line 96) | def relative_to(f, dir)
method description (line 103) | def description(command)
method option_parser (line 107) | def option_parser(arguments)
FILE: cli/lib/compass/commands/write_configuration.rb
type Compass (line 3) | module Compass
type Commands (line 4) | module Commands
type ConfigurationOptionsParser (line 5) | module ConfigurationOptionsParser
function set_options (line 6) | def set_options(opts)
class WriteConfiguration (line 30) | class WriteConfiguration < ProjectBase
method initialize (line 36) | def initialize(working_path, options)
method add_project_configuration (line 41) | def add_project_configuration
method perform (line 45) | def perform
method installer_args (line 79) | def installer_args
method explicit_config_file_must_be_readable? (line 83) | def explicit_config_file_must_be_readable?
method option_parser (line 89) | def option_parser(arguments)
method usage (line 96) | def usage
method description (line 100) | def description(command)
method parse! (line 104) | def parse!(arguments)
method parse_arguments! (line 111) | def parse_arguments!(parser, arguments)
FILE: cli/lib/compass/compiler.rb
type Compass (line 3) | module Compass
class Compiler (line 4) | class Compiler
method initialize (line 10) | def initialize(working_path, from, to, options)
method reset_staleness_checker! (line 31) | def reset_staleness_checker!
method determine_cache_location (line 37) | def determine_cache_location
method sass_files (line 41) | def sass_files(options = {})
method relative_stylesheet_name (line 46) | def relative_stylesheet_name(sass_file)
method stylesheet_name (line 50) | def stylesheet_name(sass_file)
method css_files (line 58) | def css_files
method sourcemap_files (line 62) | def sourcemap_files
method corresponding_css_file (line 66) | def corresponding_css_file(sass_file)
method corresponding_sourcemap_file (line 70) | def corresponding_sourcemap_file(sass_file)
method target_directories (line 74) | def target_directories
method out_of_date? (line 79) | def out_of_date?
method needs_update? (line 86) | def needs_update?(css_filename, sass_filename)
method new_config? (line 91) | def new_config?
method reset! (line 101) | def reset!
method clean! (line 108) | def clean!
method run (line 116) | def run
method compile_if_required (line 144) | def compile_if_required(sass_filename, css_filename, sourcemap_filen...
method timed (line 153) | def timed(timed_thing = lambda {|res| res})
method compile (line 166) | def compile(sass_filename, css_filename, sourcemap_filename = nil)
method relative_path (line 191) | def relative_path(from_path, to_path)
method should_compile? (line 195) | def should_compile?(sass_filename, css_filename, sourcemap_filename ...
method engine (line 204) | def engine(sass_filename, css_filename, sourcemap_filename = nil)
method handle_exception (line 216) | def handle_exception(sass_filename, css_filename, e)
method error_contents (line 227) | def error_contents(e, sass_filename)
method show_full_exception? (line 244) | def show_full_exception?
FILE: cli/lib/compass/configuration/comments.rb
type Compass (line 1) | module Compass
type Configuration (line 2) | module Configuration
type Comments (line 4) | module Comments
function comment_for_http_path (line 6) | def comment_for_http_path
function comment_for_relative_assets (line 14) | def comment_for_relative_assets
function comment_for_line_comments (line 24) | def comment_for_line_comments
function comment_for_output_style (line 34) | def comment_for_output_style
function comment_for_preferred_syntax (line 44) | def comment_for_preferred_syntax
class Data (line 58) | class Data
FILE: cli/lib/compass/configuration/file_data.rb
type Compass (line 1) | module Compass
type Configuration (line 2) | module Configuration
class FileData (line 3) | class FileData < Data
method new_from_file (line 4) | def self.new_from_file(config_file, defaults = nil)
method new_from_string (line 12) | def self.new_from_string(contents, filename, defaults = nil)
FILE: cli/lib/compass/configuration/helpers.rb
type Compass (line 1) | module Compass
type Configuration (line 2) | module Configuration
type Helpers (line 5) | module Helpers
function configuration_for (line 6) | def configuration_for(config, filename = nil, defaults = nil)
function sass_plugin_configuration (line 27) | def sass_plugin_configuration
function configure_sass_plugin! (line 31) | def configure_sass_plugin!
function sass_engine_options (line 59) | def sass_engine_options
function add_project_configuration (line 64) | def add_project_configuration(*args)
function detect_configuration_file (line 87) | def detect_configuration_file(project_path = nil)
function handle_configuration_change! (line 92) | def handle_configuration_change!
function compiler (line 99) | def compiler
function sass_compiler (line 106) | def sass_compiler(*args)
FILE: cli/lib/compass/configuration/serialization.rb
type Compass (line 1) | module Compass
type Configuration (line 2) | module Configuration
type Serialization (line 4) | module Serialization
function parse (line 5) | def parse(config_file)
function _parse (line 10) | def _parse(config_file)
function get_binding (line 19) | def get_binding
function parse_string (line 22) | def parse_string(contents, filename)
function serialize (line 41) | def serialize
function serialize_property (line 76) | def serialize_property(prop, value)
function issue_deprecation_warnings (line 84) | def issue_deprecation_warnings
class Data (line 91) | class Data
FILE: cli/lib/compass/deprecation.rb
type Compass (line 1) | module Compass
type Deprecation (line 2) | module Deprecation
function deprecated! (line 8) | def self.deprecated!(identifier, message)
function mark_as_issued (line 15) | def self.mark_as_issued(identifier)
FILE: cli/lib/compass/errors.rb
type Compass (line 2) | module Compass
class FilesystemConflict (line 3) | class FilesystemConflict < Error
class MissingDependency (line 6) | class MissingDependency < Error
class SpriteException (line 8) | class SpriteException < Error; end
FILE: cli/lib/compass/exec.rb
type Compass::Exec (line 16) | module Compass::Exec
FILE: cli/lib/compass/exec/command_option_parser.rb
type Compass::Exec (line 1) | module Compass::Exec
class CommandOptionParser (line 2) | class CommandOptionParser
method initialize (line 4) | def initialize(arguments)
method parse! (line 8) | def parse!
method opts (line 11) | def opts
method set_options (line 16) | def set_options(opts)
method to_s (line 19) | def to_s
FILE: cli/lib/compass/exec/global_options_parser.rb
type Compass::Exec::GlobalOptionsParser (line 1) | module Compass::Exec::GlobalOptionsParser
function set_options (line 2) | def set_options(opts)
function set_global_options (line 6) | def set_global_options(opts)
FILE: cli/lib/compass/exec/helpers.rb
type Compass::Exec (line 1) | module Compass::Exec
type Helpers (line 2) | module Helpers
function report_error (line 4) | def report_error(e, options)
function get_file (line 13) | def get_file(exception)
function get_line (line 17) | def get_line(exception)
FILE: cli/lib/compass/exec/project_options_parser.rb
type Compass::Exec::ProjectOptionsParser (line 1) | module Compass::Exec::ProjectOptionsParser
function set_options (line 2) | def set_options(opts)
function set_dir_or_path (line 6) | def set_dir_or_path(type, dir)
function set_project_options (line 14) | def set_project_options(opts)
FILE: cli/lib/compass/exec/sub_command_ui.rb
type Compass::Exec (line 4) | module Compass::Exec
class SubCommandUI (line 5) | class SubCommandUI
method initialize (line 9) | def initialize(args)
method run! (line 13) | def run!
method perform! (line 29) | def perform!
FILE: cli/lib/compass/generated_version.rb
type Compass (line 1) | module Compass
FILE: cli/lib/compass/installers/bare_installer.rb
type Compass (line 1) | module Compass
type Installers (line 2) | module Installers
class BareInstaller (line 4) | class BareInstaller < Base
method completed_configuration (line 5) | def completed_configuration
method init (line 9) | def init
method prepare (line 14) | def prepare
method install (line 17) | def install
method config_contents (line 22) | def config_contents
method finalize (line 29) | def finalize(options = {})
FILE: cli/lib/compass/installers/base.rb
type Compass (line 1) | module Compass
type Installers (line 2) | module Installers
class Base (line 4) | class Base
method initialize (line 11) | def initialize(template_path, target_path, options = {})
method run (line 31) | def run(run_options = {})
method prepare (line 39) | def prepare
method install (line 43) | def install
method finalize (line 49) | def finalize(options = {})
method compilation_required? (line 52) | def compilation_required?
method pattern_name_as_dir (line 56) | def pattern_name_as_dir
method installer (line 60) | def self.installer(type, installer_opts = {}, &locator)
method install_stylesheet (line 92) | def install_stylesheet(from, to, options)
method install_directory (line 133) | def install_directory(from, to, options)
method install_html (line 147) | def install_html(from, to, options)
method targetize (line 169) | def targetize(path)
method templatize (line 175) | def templatize(path)
method stylesheet_links (line 180) | def stylesheet_links
FILE: cli/lib/compass/installers/manifest.rb
type Compass (line 1) | module Compass
type Installers (line 2) | module Installers
class Manifest (line 4) | class Manifest
class Entry (line 8) | class Entry < Struct.new(:type, :from, :options)
method to (line 9) | def to
method initialize (line 15) | def initialize(manifest_file = nil, options = {})
method known_extensions (line 23) | def self.known_extensions
method plural_types (line 27) | def self.plural_types
method type (line 31) | def self.type(t, options = {})
method discover (line 57) | def discover(type)
method help (line 79) | def help(value = nil)
method welcome_message (line 89) | def welcome_message(value = nil, options = {})
method welcome_message_options (line 98) | def welcome_message_options
method description (line 102) | def description(value = nil)
method each (line 111) | def each
method generate_config? (line 115) | def generate_config?
method compile? (line 119) | def compile?
method no_configuration_file! (line 125) | def no_configuration_file!
method skip_compilation! (line 129) | def skip_compilation!
method with_manifest (line 133) | def with_manifest(manifest_file)
method parse (line 142) | def parse(manifest_file)
method instance_binding (line 155) | def instance_binding
FILE: cli/lib/compass/installers/manifest_installer.rb
type Compass (line 1) | module Compass
type Installers (line 2) | module Installers
class ManifestInstaller (line 4) | class ManifestInstaller < Base
method initialize (line 8) | def initialize(template_path, target_path, options = {})
method manifest_file (line 13) | def manifest_file
method init (line 18) | def init
method install (line 37) | def install
method stylesheet_links (line 43) | def stylesheet_links
FILE: cli/lib/compass/installers/template_context.rb
type Compass (line 1) | module Compass
type Installers (line 2) | module Installers
class TemplateContext (line 3) | class TemplateContext
method ctx (line 5) | def self.ctx(*arguments)
method initialize (line 9) | def initialize(template, locals = {})
method http_stylesheets_path (line 14) | def http_stylesheets_path
method config (line 28) | def config
method get_binding (line 36) | def get_binding
FILE: cli/lib/compass/logger.rb
type Compass (line 1) | module Compass
class Logger (line 3) | class Logger
method initialize (line 53) | def initialize(*actions)
method record (line 60) | def record(action, *arguments)
method green (line 73) | def green
method red (line 77) | def red
method yellow (line 81) | def yellow
method wrap (line 85) | def wrap(c, reset_to = :clear)
method color (line 95) | def color(c)
method emit (line 108) | def emit(msg)
method log (line 114) | def log(msg)
method action_padding (line 120) | def action_padding(action)
method max_action_length (line 125) | def max_action_length
class NullLogger (line 130) | class NullLogger < Logger
method record (line 131) | def record(*args)
method log (line 134) | def log(msg)
method emit (line 137) | def emit(msg)
FILE: cli/lib/compass/quick_cache.rb
type QuickCache (line 1) | module QuickCache
function quick_cache (line 6) | def quick_cache(key, ttl = 1)
FILE: cli/lib/compass/sass_compiler.rb
class Compass::SassCompiler (line 3) | class Compass::SassCompiler
method initialize (line 15) | def initialize(options = {}, config = Compass.configuration)
method compile! (line 39) | def compile!
method watch! (line 43) | def watch!(options = {}, &block)
method individual_files (line 53) | def individual_files
method clean! (line 57) | def clean!
method file_list (line 61) | def file_list
method when_updating_stylesheets (line 65) | def when_updating_stylesheets(individual_files)
method when_compilation_starting (line 70) | def when_compilation_starting(sass_file, css, sourcemap)
method when_template_created (line 74) | def when_template_created(sass_file)
method when_template_deleted (line 78) | def when_template_deleted(sass_file)
method when_template_modified (line 82) | def when_template_modified(sass_file)
method when_updated_stylesheet (line 86) | def when_updated_stylesheet(sass_file, css, sourcemap)
method when_creating_directory (line 99) | def when_creating_directory(dirname)
method when_deleting_css (line 103) | def when_deleting_css(filename)
method when_deleting_sourcemap (line 108) | def when_deleting_sourcemap(filename)
method when_compilation_error (line 113) | def when_compilation_error(error, sass_file, css_file, sourcemap_file)
method logger (line 128) | def logger
method corresponding_css_file (line 132) | def corresponding_css_file(sass_file)
method stylesheet_name (line 136) | def stylesheet_name(sass_file)
method sass_files (line 144) | def sass_files(options = {})
FILE: cli/lib/compass/sass_extensions.rb
type Compass::SassExtensions (line 5) | module Compass::SassExtensions
FILE: cli/lib/compass/sass_extensions/functions.rb
type Compass::SassExtensions::Functions (line 1) | module Compass::SassExtensions::Functions
type SassDeclarationHelper (line 2) | module SassDeclarationHelper
function declare (line 3) | def declare(*args)
type Sass::Script::Functions (line 13) | module Sass::Script::Functions
FILE: cli/lib/compass/sass_extensions/functions/sprites.rb
type Compass::SassExtensions::Functions::Sprites (line 1) | module Compass::SassExtensions::Functions::Sprites
type VariableReader (line 14) | module VariableReader
function get_var (line 15) | def get_var(variable_name)
function sprite_width (line 21) | def sprite_width(map, sprite=nil)
function sprite_height (line 31) | def sprite_height(map, sprite=nil)
function sprite_names (line 41) | def sprite_names(map)
function sprite_path (line 48) | def sprite_path(map)
function inline_sprite (line 59) | def inline_sprite(map)
function sprite_map (line 76) | def sprite_map(glob, kwargs = {})
function sprite (line 96) | def sprite(map, sprite, offset_x = ZERO, offset_y = ZERO, use_percenta...
function sprite_map_name (line 111) | def sprite_map_name(map)
function sprite_file (line 118) | def sprite_file(map, sprite)
function sprite_does_not_have_parent (line 133) | def sprite_does_not_have_parent(map, sprite)
function sprite_selector_file (line 142) | def sprite_selector_file(map, sprite, selector)
function sprite_has_selector (line 155) | def sprite_has_selector(map, sprite, selector)
function sprite_has_valid_selector (line 169) | def sprite_has_valid_selector(selector)
function sprite_url (line 177) | def sprite_url(map)
function sprite_position (line 213) | def sprite_position(map, sprite = nil, offset_x = ZERO, offset_y = ZER...
function get_sprite_file (line 252) | def get_sprite_file(map, sprite=nil)
function reversed_color_names (line 260) | def reversed_color_names
function convert_sprite_name (line 268) | def convert_sprite_name(sprite)
function verify_map (line 285) | def verify_map(map, error = "sprite")
function verify_sprite (line 291) | def verify_sprite(sprite)
function missing_image! (line 297) | def missing_image!(map, sprite)
function missing_sprite! (line 301) | def missing_sprite!(function_name)
FILE: cli/lib/compass/sass_extensions/sprites.rb
type Compass (line 4) | module Compass
type SassExtensions (line 5) | module SassExtensions
type Sprites (line 6) | module Sprites
FILE: cli/lib/compass/sass_extensions/sprites/engines.rb
type Compass (line 1) | module Compass
type SassExtensions (line 2) | module SassExtensions
type Sprites (line 3) | module Sprites
class Engine (line 4) | class Engine
method initialize (line 6) | def initialize(width, height, images)
method construct_sprite (line 11) | def construct_sprite
method save (line 15) | def save(filename)
FILE: cli/lib/compass/sass_extensions/sprites/engines/chunky_png_engine.rb
type Compass (line 7) | module Compass
type SassExtensions (line 8) | module SassExtensions
type Sprites (line 9) | module Sprites
class ChunkyPngEngine (line 10) | class ChunkyPngEngine < Compass::SassExtensions::Sprites::Engine
method construct_sprite (line 12) | def construct_sprite
method save (line 24) | def save(filename)
FILE: cli/lib/compass/sass_extensions/sprites/image.rb
type Compass (line 1) | module Compass
type SassExtensions (line 2) | module SassExtensions
type Sprites (line 3) | module Sprites
class Image (line 4) | class Image
method initialize (line 21) | def initialize(base, relative_file, options)
method file (line 28) | def file
method find_file (line 32) | def find_file
method width (line 42) | def width
method size (line 46) | def size
method height (line 51) | def height
method get_var_file (line 55) | def get_var_file(var)
method repeat (line 60) | def repeat
method repeat_x? (line 71) | def repeat_x?
method repeat_y? (line 75) | def repeat_y?
method no_repeat? (line 79) | def no_repeat?
method position (line 84) | def position
method offset (line 89) | def offset
method spacing (line 94) | def spacing
method digest (line 99) | def digest
method mtime (line 104) | def mtime
method hover? (line 109) | def hover?
method hover (line 114) | def hover
method target? (line 119) | def target?
method target (line 124) | def target
method active? (line 129) | def active?
method active (line 134) | def active
method focus? (line 139) | def focus?
method focus (line 144) | def focus
method parent (line 148) | def parent
method dimensions (line 156) | def dimensions
FILE: cli/lib/compass/sass_extensions/sprites/image_methods.rb
type Compass (line 1) | module Compass
type SassExtensions (line 2) | module SassExtensions
type Sprites (line 3) | module Sprites
type ImageMethods (line 4) | module ImageMethods
function image_for (line 6) | def image_for(name)
function has_hover? (line 15) | def has_hover?(name)
function has_target? (line 20) | def has_target?(name)
function has_focus? (line 25) | def has_focus?(name)
function has_active? (line 30) | def has_active?(name)
function get_magic_selector_image (line 36) | def get_magic_selector_image(name, selector)
function sprite_names (line 46) | def sprite_names
FILE: cli/lib/compass/sass_extensions/sprites/image_row.rb
type Compass (line 3) | module Compass
type SassExtensions (line 4) | module SassExtensions
type Sprites (line 5) | module Sprites
class ImageRow (line 6) | class ImageRow
method initialize (line 12) | def initialize(max_width)
method add (line 17) | def add(image)
method height (line 25) | def height
method width (line 29) | def width
method total_width (line 33) | def total_width
method efficiency (line 37) | def efficiency
method will_fit? (line 41) | def will_fit?(image)
FILE: cli/lib/compass/sass_extensions/sprites/images.rb
type Compass (line 1) | module Compass
type SassExtensions (line 2) | module SassExtensions
type Sprites (line 3) | module Sprites
class Images (line 4) | class Images < Array
method sort_by! (line 6) | def sort_by!(method)
FILE: cli/lib/compass/sass_extensions/sprites/layout.rb
type Compass (line 2) | module Compass
type SassExtensions (line 3) | module SassExtensions
type Sprites (line 4) | module Sprites
type Layout (line 5) | module Layout
class SpriteLayout (line 6) | class SpriteLayout
method initialize (line 11) | def initialize(images, kwargs={})
method layout! (line 20) | def layout!
method properties (line 24) | def properties
FILE: cli/lib/compass/sass_extensions/sprites/layout/diagonal.rb
type Compass (line 1) | module Compass
type SassExtensions (line 2) | module SassExtensions
type Sprites (line 3) | module Sprites
type Layout (line 4) | module Layout
class Diagonal (line 5) | class Diagonal < SpriteLayout
method layout! (line 7) | def layout!
method calculate_width! (line 15) | def calculate_width!
method calculate_height! (line 19) | def calculate_height!
method calculate_positions! (line 23) | def calculate_positions!
FILE: cli/lib/compass/sass_extensions/sprites/layout/horizontal.rb
type Compass (line 1) | module Compass
type SassExtensions (line 2) | module SassExtensions
type Sprites (line 3) | module Sprites
type Layout (line 4) | module Layout
class Horizontal (line 5) | class Horizontal < SpriteLayout
method layout! (line 7) | def layout!
method calculate_height! (line 16) | def calculate_height!
method calculate_width! (line 24) | def calculate_width!
method repeating_images? (line 28) | def repeating_images?
method calculate_repeat_extra_height! (line 32) | def calculate_repeat_extra_height!
method calculate_positions! (line 38) | def calculate_positions!
method tile_images_that_repeat! (line 47) | def tile_images_that_repeat!
FILE: cli/lib/compass/sass_extensions/sprites/layout/smart.rb
type Compass (line 1) | module Compass
type SassExtensions (line 2) | module SassExtensions
type Sprites (line 3) | module Sprites
type Layout (line 4) | module Layout
class Smart (line 5) | class Smart < SpriteLayout
method layout! (line 7) | def layout!
method calculate_positions! (line 13) | def calculate_positions!
FILE: cli/lib/compass/sass_extensions/sprites/layout/vertical.rb
type Compass (line 1) | module Compass
type SassExtensions (line 2) | module SassExtensions
type Sprites (line 3) | module Sprites
type Layout (line 4) | module Layout
class Vertical (line 5) | class Vertical < SpriteLayout
method layout! (line 7) | def layout!
method calculate_width! (line 16) | def calculate_width!
method calculate_height! (line 25) | def calculate_height!
method repeating_images? (line 30) | def repeating_images?
method calculate_repeat_extra_width! (line 34) | def calculate_repeat_extra_width!
method calculate_positions! (line 40) | def calculate_positions!
method tile_images_that_repeat! (line 49) | def tile_images_that_repeat!
FILE: cli/lib/compass/sass_extensions/sprites/layout_methods.rb
type Compass (line 1) | module Compass
type SassExtensions (line 2) | module SassExtensions
type Sprites (line 3) | module Sprites
type LayoutMethods (line 4) | module LayoutMethods
function smart? (line 10) | def smart?
function horizontal? (line 14) | def horizontal?
function diagonal? (line 18) | def diagonal?
function vertical? (line 22) | def vertical?
function layout (line 26) | def layout
function compute_image_positions! (line 32) | def compute_image_positions!
FILE: cli/lib/compass/sass_extensions/sprites/row_fitter.rb
type Compass (line 3) | module Compass
type SassExtensions (line 4) | module SassExtensions
type Sprites (line 5) | module Sprites
class RowFitter (line 6) | class RowFitter
method initialize (line 12) | def initialize(images)
method fit! (line 23) | def fit!(style = :scan)
method width (line 28) | def width
method height (line 32) | def height
method efficiency (line 36) | def efficiency
method new_row (line 41) | def new_row(image = nil)
method fast_fit (line 47) | def fast_fit
method scan_fit (line 59) | def scan_fit
FILE: cli/lib/compass/sass_extensions/sprites/sprite_map.rb
type Compass (line 1) | module Compass
type SassExtensions (line 2) | module SassExtensions
type Sprites (line 3) | module Sprites
class SpriteMap (line 4) | class SpriteMap < Sass::Script::Value::Base
method from_uri (line 16) | def self.from_uri(uri, context, kwargs)
method relative_name (line 26) | def self.relative_name(sprite)
method initialize (line 37) | def initialize(sprites, path, name, context, kwargs)
method sort_method (line 53) | def sort_method
method inspect (line 57) | def inspect
method to_s (line 68) | def to_s(kwargs = self.kwargs)
method respond_to? (line 72) | def respond_to?(meth)
method method_missing (line 76) | def method_missing(meth, *args, &block)
method modulize (line 86) | def modulize
FILE: cli/lib/compass/sass_extensions/sprites/sprite_methods.rb
type Compass (line 1) | module Compass
type SassExtensions (line 2) | module SassExtensions
type Sprites (line 3) | module Sprites
type SpriteMethods (line 4) | module SpriteMethods
function compute_image_metadata! (line 13) | def compute_image_metadata!
function init_engine (line 20) | def init_engine
function init_images (line 28) | def init_images
function name_and_hash (line 38) | def name_and_hash
function filename (line 43) | def filename
function relativize (line 47) | def relativize(path)
function generate (line 52) | def generate
function cleanup_old_sprites (line 65) | def cleanup_old_sprites
function generation_required? (line 74) | def generation_required?
function uniqueness_hash (line 79) | def uniqueness_hash
function save! (line 96) | def save!
function image_filenames (line 106) | def image_filenames
function outdated? (line 111) | def outdated?
function mtime (line 119) | def mtime
function size (line 124) | def size
function log (line 128) | def log(action, filename, *extra)
FILE: cli/lib/compass/sprite_importer.rb
type Compass (line 3) | module Compass
class SpriteImporter (line 4) | class SpriteImporter < Sass::Importers::Base
method find_all_sprite_map_files (line 16) | def self.find_all_sprite_map_files(path)
method find (line 22) | def find(uri, options)
method find_relative (line 29) | def find_relative(uri, base, options)
method to_s (line 33) | def to_s
method hash (line 37) | def hash
method eql? (line 41) | def eql?(other)
method mtime (line 45) | def mtime(uri, options)
method key (line 51) | def key(uri, options={})
method public_url (line 55) | def public_url(*args)
method path_and_name (line 60) | def self.path_and_name(uri)
method sprite_name (line 69) | def self.sprite_name(uri)
method path (line 75) | def self.path(uri)
method files (line 81) | def self.files(uri)
method sprite_names (line 93) | def self.sprite_names(uri)
method sass_options (line 100) | def self.sass_options(uri, importer, options)
method sass_engine (line 105) | def self.sass_engine(uri, name, importer, options)
method content_for_images (line 111) | def self.content_for_images(uri, name, skip_overrides = false)
FILE: cli/lib/compass/sprite_importer/binding.rb
type Compass (line 2) | module Compass
type Sprites (line 3) | module Sprites
class Binding (line 4) | class Binding < OpenStruct
method get_binding (line 6) | def get_binding
FILE: cli/lib/compass/stats.rb
type Compass (line 1) | module Compass
type Stats (line 2) | module Stats
class StatsVisitor (line 3) | class StatsVisitor
method initialize (line 5) | def initialize
method visit (line 11) | def visit(node)
method up (line 19) | def up(node)
method down (line 21) | def down(node)
method import? (line 23) | def import?(node)
class CssFile (line 29) | class CssFile
method initialize (line 33) | def initialize(path)
method contents (line 41) | def contents
method lines (line 44) | def lines
method analyze! (line 47) | def analyze!
class SassFile (line 57) | class SassFile
method initialize (line 62) | def initialize(path)
method contents (line 65) | def contents
method tree (line 68) | def tree
method visit_tree! (line 73) | def visit_tree!
method analyze! (line 78) | def analyze!
method lines (line 82) | def lines
method rule_count (line 85) | def rule_count
method prop_count (line 88) | def prop_count
method mixin_def_count (line 91) | def mixin_def_count
method mixin_count (line 94) | def mixin_count
FILE: cli/lib/compass/test_case.rb
type Compass (line 1) | module Compass
class TestCase (line 18) | class TestCase < (defined?(ActiveSupport::TestCase) ? ActiveSupport::T...
method setup (line 20) | def setup
method compile (line 25) | def compile(stylesheet)
method assert_compiles (line 33) | def assert_compiles(stylesheet, &block)
FILE: cli/lib/compass/version.rb
type Compass (line 2) | module Compass
type Version (line 3) | module Version
function scope (line 4) | def scope(file) # :nodoc:
function parse_version (line 8) | def parse_version(version, name)
function version (line 28) | def version
FILE: cli/test/helpers/command_line.rb
type Compass::CommandLineHelper (line 3) | module Compass::CommandLineHelper
function compass (line 4) | def compass(*arguments)
function decolorize (line 51) | def decolorize(str)
class Responder (line 55) | class Responder
method initialize (line 57) | def initialize
method respond_to (line 60) | def respond_to(prompt, options = {})
method response_for (line 63) | def response_for(prompt)
method assert_required_responses! (line 77) | def assert_required_responses!
function assert_action_performed (line 86) | def assert_action_performed(action, path)
function within_tmp_directory (line 99) | def within_tmp_directory(dir = "tmp")
function execute (line 109) | def execute(*arguments)
FILE: cli/test/helpers/diff.rb
type Compass (line 3) | module Compass
type Diff (line 4) | module Diff
function diff_as_string (line 6) | def diff_as_string(data_old, data_new)
function format (line 40) | def format
function context_lines (line 44) | def context_lines
FILE: cli/test/helpers/io.rb
type Compass (line 1) | module Compass
type IoHelper (line 2) | module IoHelper
function capture_output (line 3) | def capture_output
function capture_warning (line 11) | def capture_warning
function capture_pipe (line 19) | def capture_pipe(io, options = {})
FILE: cli/test/helpers/rails.rb
type Compass (line 1) | module Compass
type RailsHelper (line 2) | module RailsHelper
function generate_rails_app_directories (line 3) | def generate_rails_app_directories(name)
function generate_rails_app (line 13) | def generate_rails_app(name, dir = nil)
FILE: cli/test/helpers/test_case.rb
type Compass (line 1) | module Compass
type TestCaseHelper (line 2) | module TestCaseHelper
function absolutize (line 3) | def absolutize(path)
function compile_for_project (line 14) | def compile_for_project(contents, options = {})
function assert_correct (line 20) | def assert_correct(before, after)
type ClassMethods (line 28) | module ClassMethods
function let (line 30) | def let(method, &block)
function it (line 34) | def it(name, &block)
function test (line 38) | def test(name, &block)
function setup (line 42) | def setup(&block)
function after (line 48) | def after(&block)
function underscore (line 56) | def underscore(string)
FILE: cli/test/integrations/compass_test.rb
class CompassTest (line 7) | class CompassTest < Test::Unit::TestCase
method setup (line 9) | def setup
method teardown (line 13) | def teardown
method test_on_stylesheet_saved_callback (line 21) | def test_on_stylesheet_saved_callback
method test_on_stylesheet_error_callback (line 35) | def test_on_stylesheet_error_callback
method test_empty_project (line 46) | def test_empty_project
method test_compass (line 56) | def test_compass
method test_sourcemaps (line 67) | def test_sourcemaps
method test_env_in_development (line 78) | def test_env_in_development
method test_env_in_production (line 89) | def test_env_in_production
method test_busted_font_urls (line 100) | def test_busted_font_urls
method test_busted_image_urls (line 111) | def test_busted_image_urls
method test_with_sass_globbing (line 122) | def test_with_sass_globbing
method test_image_urls (line 133) | def test_image_urls
method test_relative (line 144) | def test_relative
method assert_no_errors (line 156) | def assert_no_errors(css_file, project_name)
method assert_renders_correctly (line 162) | def assert_renders_correctly(*arguments)
method within_project (line 187) | def within_project(project_name, config_block = nil)
method each_css_file (line 210) | def each_css_file(dir, &block)
method each_sass_file (line 214) | def each_sass_file(sass_dir = nil)
method save_output (line 222) | def save_output(dir)
method project_path (line 227) | def project_path(project_name)
method configuration_file (line 231) | def configuration_file(project_name)
method tempfile_path (line 235) | def tempfile_path(project_name)
method template_path (line 239) | def template_path(project_name)
method result_path (line 243) | def result_path(project_name)
method save_path (line 247) | def save_path(project_name)
method filename (line 251) | def filename
method output_file (line 255) | def output_file
FILE: cli/test/integrations/sprites_test.rb
class SpritesTest (line 8) | class SpritesTest < Test::Unit::TestCase
method setup (line 10) | def setup
method teardown (line 29) | def teardown
method map_location (line 36) | def map_location(file)
method map_files (line 40) | def map_files(glob)
method image_size (line 44) | def image_size(file)
method image_md5 (line 48) | def image_md5(file)
method render (line 54) | def render(scss)
method clean (line 66) | def clean(string)
FILE: cli/test/test_helper.rb
class String (line 11) | class String
method name (line 12) | def name
class Test::Unit::TestCase (line 22) | class Test::Unit::TestCase
method fixture_path (line 28) | def fixture_path
type SpriteHelper (line 34) | module SpriteHelper
function init_sprite_helper (line 37) | def init_sprite_helper
function sprite_map_test (line 45) | def sprite_map_test(options, uri = URI)
function create_sprite_temp (line 55) | def create_sprite_temp
function clean_up_sprites (line 60) | def clean_up_sprites
FILE: cli/test/units/actions_test.rb
class ActionsTest (line 4) | class ActionsTest < Test::Unit::TestCase
class BaseActionExtender (line 5) | class BaseActionExtender
method options (line 7) | def options
method working_path (line 10) | def working_path
FILE: cli/test/units/caniuse_test.rb
class CanIUseTest (line 4) | class CanIUseTest < Test::Unit::TestCase
method caniuse (line 6) | def caniuse
method test_unknown_browsers (line 12) | def test_unknown_browsers
method test_browser_names (line 17) | def test_browser_names
method test_prefixes (line 21) | def test_prefixes
method test_prefix (line 26) | def test_prefix
method test_browsers_with_prefix (line 34) | def test_browsers_with_prefix
method test_capabilities (line 41) | def test_capabilities
method test_usage (line 116) | def test_usage
method test_prefixed_usage (line 132) | def test_prefixed_usage
method test_requires_prefix (line 140) | def test_requires_prefix
method test_browser_ranges_only_prefixed (line 150) | def test_browser_ranges_only_prefixed
method test_ranges_are_empty_when_prefix_doesnt_exit (line 161) | def test_ranges_are_empty_when_prefix_doesnt_exit
method test_browser_ranges_including_unprefixed (line 167) | def test_browser_ranges_including_unprefixed
method test_capability_matches (line 178) | def test_capability_matches
method test_omitted_usage (line 187) | def test_omitted_usage
FILE: cli/test/units/command_line_test.rb
class CommandLineTest (line 7) | class CommandLineTest < Test::Unit::TestCase
method teardown (line 12) | def teardown
method test_print_version (line 16) | def test_print_version
method test_basic_install (line 21) | def test_basic_install
method test_basic_update (line 46) | def test_basic_update
FILE: cli/test/units/compass_util_test.rb
class CompassUtilTest (line 3) | class CompassUtilTest < Test::Unit::TestCase
method test_warn (line 4) | def test_warn
FILE: cli/test/units/compiler_test.rb
class CompilerTest (line 4) | class CompilerTest < Test::Unit::TestCase
FILE: cli/test/units/configuration_test.rb
class ConfigurationTest (line 5) | class ConfigurationTest < Test::Unit::TestCase
method test_parse_and_serialize (line 22) | def test_parse_and_serialize
method test_custom_watch (line 64) | def test_custom_watch
method test_serialization_warns_with_asset_host_set (line 76) | def test_serialization_warns_with_asset_host_set
class TestData (line 91) | class TestData < Compass::Configuration::FileData
method initialize (line 92) | def initialize
method test_accumulated_array_does_not_clobber (line 99) | def test_accumulated_array_does_not_clobber
method test_inherited_array_can_clobber (line 108) | def test_inherited_array_can_clobber
method test_inherited_array_can_append (line 117) | def test_inherited_array_can_append
method test_inherited_array_can_append_2 (line 126) | def test_inherited_array_can_append_2
method test_inherited_array_can_remove (line 138) | def test_inherited_array_can_remove
method test_inherited_array_combined_augmentations (line 147) | def test_inherited_array_combined_augmentations
method test_inherited_array_long_methods (line 157) | def test_inherited_array_long_methods
method test_inherited_array_augmentations_can_be_clobbered (line 167) | def test_inherited_array_augmentations_can_be_clobbered
method test_inherited_array_augmentations_after_clobbering (line 178) | def test_inherited_array_augmentations_after_clobbering
method test_serialization_warns_with_asset_cache_buster_set (line 191) | def test_serialization_warns_with_asset_cache_buster_set
method test_cache_buster_file_not_passed_when_the_file_does_not_exist (line 208) | def test_cache_buster_file_not_passed_when_the_file_does_not_exist
method test_cache_buster_file_is_closed (line 229) | def test_cache_buster_file_is_closed
method test_cache_buster_handles_id_refs_for_images (line 251) | def test_cache_buster_handles_id_refs_for_images
method test_default_cache_buster_handles_id_refs_for_images (line 279) | def test_default_cache_buster_handles_id_refs_for_images
method test_cache_buster_handles_id_refs_for_fonts (line 293) | def test_cache_buster_handles_id_refs_for_fonts
method test_inherited_arrays_augmentations_serialize (line 322) | def test_inherited_arrays_augmentations_serialize
method test_inherited_arrays_clobbering_with_augmentations_serialize (line 333) | def test_inherited_arrays_clobbering_with_augmentations_serialize
method test_additional_import_paths (line 344) | def test_additional_import_paths
method test_additional_import_paths_can_be_importers (line 393) | def test_additional_import_paths_can_be_importers
method test_config_with_pathname (line 409) | def test_config_with_pathname
method test_sass_options (line 454) | def test_sass_options
method test_sprite_load_path_clobbers (line 491) | def test_sprite_load_path_clobbers
method test_strip_trailing_directory_separators (line 528) | def test_strip_trailing_directory_separators
method test_custom_configuration_properties (line 554) | def test_custom_configuration_properties
method load_paths_as_strings (line 607) | def load_paths_as_strings(load_paths)
FILE: cli/test/units/regressions_test.rb
class RegressionsTest (line 6) | class RegressionsTest < Test::Unit::TestCase
method setup (line 10) | def setup
method teardown (line 15) | def teardown
method test_issue911_sprites_with_globbing_and_line_comments (line 20) | def test_issue911_sprites_with_globbing_and_line_comments
FILE: cli/test/units/sass_extensions_test.rb
class SassExtensionsTest (line 3) | class SassExtensionsTest < Test::Unit::TestCase
method test_simple (line 4) | def test_simple
method test_left_side_expansion (line 7) | def test_left_side_expansion
method test_right_side_expansion (line 10) | def test_right_side_expansion
method test_both_sides_expansion (line 13) | def test_both_sides_expansion
method test_three_selectors_expansion (line 16) | def test_three_selectors_expansion
method test_third_argument_expansion (line 19) | def test_third_argument_expansion
method test_enumerate (line 23) | def test_enumerate
method test_append_selector (line 27) | def test_append_selector
method test_headers (line 32) | def test_headers
method test_scale_lightness (line 40) | def test_scale_lightness
method test_adjust_lightness (line 45) | def test_adjust_lightness
method test_scale_saturation (line 52) | def test_scale_saturation
method test_adjust_saturation (line 57) | def test_adjust_saturation
method test_shade (line 62) | def test_shade
method test_tint (line 67) | def test_tint
method test_if_function (line 72) | def test_if_function
method test_math_functions (line 77) | def test_math_functions
method test_blank (line 123) | def test_blank
method test_css2_fallback (line 131) | def test_css2_fallback
method test_font_files (line 137) | def test_font_files
method test_inline_font_files (line 191) | def test_inline_font_files
method test_font_formats (line 200) | def test_font_formats
method test_linear_gradient_with_calc (line 204) | def test_linear_gradient_with_calc
method test_image_size_should_respond_to_to_path (line 209) | def test_image_size_should_respond_to_to_path
method test_reject (line 217) | def test_reject
method evaluate (line 223) | def evaluate(value)
FILE: cli/test/units/sass_extenstions/gradients_test.rb
class GradientTestClass (line 1) | class GradientTestClass
method options (line 4) | def self.options
class GradientsTest (line 12) | class GradientsTest < Test::Unit::TestCase
method klass (line 15) | def klass
FILE: cli/test/units/sprites/engine_test.rb
class EngineTest (line 3) | class EngineTest < Test::Unit::TestCase
method setup (line 5) | def setup
method taredown (line 14) | def taredown
FILE: cli/test/units/sprites/image_row_test.rb
class ImageRowTest (line 3) | class ImageRowTest < Test::Unit::TestCase
method setup (line 5) | def setup
method teardown (line 19) | def teardown
method image_row (line 23) | def image_row(max)
method populate_row (line 27) | def populate_row
FILE: cli/test/units/sprites/image_test.rb
class SpritesImageTest (line 5) | class SpritesImageTest < Test::Unit::TestCase
method setup (line 8) | def setup
method teardown (line 12) | def teardown
method sprite_path (line 18) | def sprite_path
method sprite_name (line 22) | def sprite_name
method digest (line 26) | def digest
method test_map (line 30) | def test_map(options ={})
method test_image (line 35) | def test_image(options ={})
FILE: cli/test/units/sprites/images_test.rb
class ImagesTest (line 4) | class ImagesTest < Test::Unit::TestCase
method setup (line 6) | def setup
FILE: cli/test/units/sprites/importer_test.rb
class ImporterTest (line 3) | class ImporterTest < Test::Unit::TestCase
method setup (line 6) | def setup
method teardown (line 13) | def teardown
method options (line 17) | def options
FILE: cli/test/units/sprites/layout_test.rb
class LayoutTest (line 3) | class LayoutTest < Test::Unit::TestCase
method setup (line 6) | def setup
method teardown (line 16) | def teardown
method vertical (line 22) | def vertical
method smart (line 28) | def smart
method diagonal (line 41) | def diagonal
method horizontal (line 47) | def horizontal(options= {}, uri=URI)
FILE: cli/test/units/sprites/row_fitter_test.rb
class RowFitterTest (line 4) | class RowFitterTest < Test::Unit::TestCase
method setup (line 6) | def setup
method row_fitter (line 11) | def row_fitter(images = nil)
method teardown (line 15) | def teardown
method create_images (line 19) | def create_images(dims)
method basic_dims (line 27) | def basic_dims
FILE: cli/test/units/sprites/sprite_command_test.rb
class SpriteCommandTest (line 3) | class SpriteCommandTest < Test::Unit::TestCase
method setup (line 10) | def setup
method config_data (line 20) | def config_data
method create_temp_cli_dir (line 26) | def create_temp_cli_dir
method run_compass_with_options (line 32) | def run_compass_with_options(options)
method options_to_cli (line 38) | def options_to_cli(options)
method teardown (line 42) | def teardown
FILE: cli/test/units/sprites/sprite_map_test.rb
class SpriteMapTest (line 3) | class SpriteMapTest < Test::Unit::TestCase
method setup (line 6) | def setup
method teardown (line 19) | def teardown
FILE: compass-style.org/assets/javascripts/install.js
function showInstallCommand (line 1) | function showInstallCommand() {
function attachMadlibBehaviors (line 97) | function attachMadlibBehaviors() {
function setupMadlib (line 114) | function setupMadlib() {
FILE: compass-style.org/assets/javascripts/shBrushCss.js
function Brush (line 22) | function Brush()
FILE: compass-style.org/assets/javascripts/shBrushPlain.js
function Brush (line 22) | function Brush()
FILE: compass-style.org/assets/javascripts/shBrushSass.js
function Brush (line 22) | function Brush()
FILE: compass-style.org/assets/javascripts/shBrushScss.js
function Brush (line 22) | function Brush()
FILE: compass-style.org/assets/javascripts/shBrushXml.js
function Brush (line 22) | function Brush()
FILE: compass-style.org/assets/javascripts/site.js
function changeTheme (line 1) | function changeTheme(theme, setCookie) {
function changeSyntax (line 13) | function changeSyntax(style, setCookie){
function changeExampleStyleSyntax (line 20) | function changeExampleStyleSyntax(style, setCookie){
function changeExampleMarkupSyntax (line 27) | function changeExampleMarkupSyntax(markup){
function setThemePreference (line 34) | function setThemePreference(theme) {
function getThemePreference (line 42) | function getThemePreference(defaultTheme) {
function setStyleSyntaxPreference (line 51) | function setStyleSyntaxPreference (mainSyntax) {
function setExampleStyleSyntaxPreference (line 56) | function setExampleStyleSyntaxPreference (exampleStyle) {
function setExampleMarkupSyntaxPreference (line 61) | function setExampleMarkupSyntaxPreference (exampleMarkup) {
function getSyntaxPreference (line 66) | function getSyntaxPreference(defaultSyntax, defaultMarkup) {
FILE: compass-style.org/lib/blog.rb
function blog_posts_in_order (line 5) | def blog_posts_in_order
function previous_post (line 9) | def previous_post(item = @item)
function next_post (line 16) | def next_post(item = @item)
function blog_date (line 23) | def blog_date(item = @item)
function authors (line 29) | def authors
function author (line 35) | def author(author_id)
FILE: compass-style.org/lib/data_sources/asset_data_source.rb
type Nanoc3::DataSources (line 1) | module Nanoc3::DataSources
class AssetDataSource (line 6) | class AssetDataSource < Nanoc3::DataSource
method items (line 9) | def items
method checksum_for (line 40) | def checksum_for(*filenames)
FILE: compass-style.org/lib/data_sources/better_combined_datasource.rb
class BetterFilesystemCombined (line 3) | class BetterFilesystemCombined < Nanoc3::DataSources::FilesystemCombined
method parse_file (line 6) | def parse_file(filename, kind)
FILE: compass-style.org/lib/data_sources/core_extensions.rb
class Object (line 1) | class Object
method try (line 2) | def try(method, *args, &block)
class NilClass (line 7) | class NilClass
method try (line 8) | def try(*args)
FILE: compass-style.org/lib/data_sources/nanoc_monkey_patches.rb
class Nanoc3::Site (line 1) | class Nanoc3::Site
method cached (line 2) | def cached(key)
method cached_stuff (line 9) | def cached_stuff
FILE: compass-style.org/lib/data_sources/syntax_highter.rb
class SyntaxHighlighterFilter (line 3) | class SyntaxHighlighterFilter < Nanoc3::Filter
method highlight (line 6) | def highlight(code, type)
method pygmentize (line 12) | def pygmentize(code, type)
method coderay (line 21) | def coderay(code, type)
method run (line 27) | def run(content, params={})
FILE: compass-style.org/lib/default.rb
function body_class (line 11) | def body_class(item)
function body_id (line 18) | def body_id(item)
function body_attributes (line 26) | def body_attributes(item)
type Enumerable (line 33) | module Enumerable
function sorted_and_grouped_by_name (line 34) | def sorted_and_grouped_by_name
class Recycler (line 39) | class Recycler
method initialize (line 42) | def initialize *values
method next (line 46) | def next
method reset! (line 52) | def reset!
function cycle (line 57) | def cycle(*args)
function default_path (line 61) | def default_path(item)
function find (line 65) | def find(identifier)
function get_var (line 69) | def get_var(instance_var)
function sidebar_item (line 73) | def sidebar_item(item)
function sidebar_stylesheet (line 83) | def sidebar_stylesheet(item)
function item_tree (line 89) | def item_tree(item, options = {})
function tutorial_item (line 125) | def tutorial_item(path)
function documentation_item (line 132) | def documentation_item(path)
function compass_version (line 140) | def compass_version
function long_compass_version (line 145) | def long_compass_version
function sprite_tutorial_links (line 151) | def sprite_tutorial_links(index=false)
FILE: compass-style.org/lib/examples.rb
function example_haml (line 1) | def example_haml
function example_html (line 6) | def example_html
function example_scss (line 10) | def example_scss
function example_sass (line 15) | def example_sass
function example_css (line 19) | def example_css
FILE: compass-style.org/lib/search.rb
function search_terms_for (line 36) | def search_terms_for(item)
function search_index (line 47) | def search_index
FILE: compass-style.org/lib/stylesheets.rb
function stylesheets_dir (line 3) | def stylesheets_dir(framework)
function tree_key (line 7) | def tree_key(item)
function tree (line 11) | def tree(item)
function imports (line 20) | def imports(item)
function reference_item (line 31) | def reference_item(options)
function departialize (line 45) | def departialize(path)
function reference_path (line 49) | def reference_path(options)
function import_paths (line 56) | def import_paths
function stylesheet_path (line 68) | def stylesheet_path(ss)
function possible_filenames_for_stylesheet (line 81) | def possible_filenames_for_stylesheet(ss)
function mixins (line 101) | def mixins(item)
function selectors (line 121) | def selectors(item)
function functions (line 146) | def functions(item)
function constants (line 166) | def constants(item)
function all_constants (line 187) | def all_constants
function all_mixins (line 195) | def all_mixins
function all_functions (line 203) | def all_functions
function sass_functions (line 213) | def sass_functions
function example_items (line 217) | def example_items
function item_for_function_name (line 225) | def item_for_function_name(function_name)
function examples_for_item (line 231) | def examples_for_item(item)
function examples (line 240) | def examples(item, mixin = nil)
function format_doc (line 250) | def format_doc(docstring)
FILE: compass-style.org/lib/stylesheets/sass_extensions.rb
type Sass (line 2) | module Sass
type Tree (line 3) | module Tree
class RuleNode (line 4) | class RuleNode
method identifier (line 6) | def identifier
method name (line 14) | def name
class VariableNode (line 18) | class VariableNode < Node
class DebugNode (line 24) | class DebugNode < Node
method to_sass (line 25) | def to_sass
class MixinNode (line 29) | class MixinNode < Node
class VariableNode (line 33) | class VariableNode < Node
type HasSignature (line 36) | module HasSignature
function sass_signature (line 37) | def sass_signature(format = :text)
function arglist_to_sass (line 42) | def arglist_to_sass(format = :text)
function arg_to_sass (line 49) | def arg_to_sass(arg, format = :text)
class MixinDefNode (line 65) | class MixinDefNode < Node
method sass_signature (line 72) | def sass_signature(mode = :definition, format = :text)
class FunctionNode (line 83) | class FunctionNode < Node
class ImportNode (line 89) | class ImportNode < RootNode
class CommentNode (line 92) | class CommentNode < Node
method clean (line 99) | def self.clean(docstring)
method docstring (line 102) | def docstring
method doc (line 107) | def doc
type Script (line 116) | module Script
class Color (line 117) | class Color < Literal
method to_sass (line 118) | def to_sass(options = {})
FILE: core/lib/compass/browser_support.rb
type Compass (line 1) | module Compass
type BrowserSupport (line 2) | module BrowserSupport
function add_support (line 23) | def add_support(function, *aspects)
function remove_support (line 45) | def remove_support(function, *aspects)
function supports? (line 55) | def supports?(function, aspect)
function has_aspect? (line 59) | def has_aspect?(function)
FILE: core/lib/compass/configuration.rb
type Compass (line 1) | module Compass
type Configuration (line 2) | module Configuration
function attributes_for_directory (line 5) | def attributes_for_directory(dir_name, http_dir_name = dir_name)
function add_configuration_property (line 21) | def add_configuration_property(name, comment = nil, &default)
function remove_configuration_property (line 44) | def remove_configuration_property(name)
function configuration (line 122) | def configuration
function default_configuration (line 130) | def default_configuration
function add_configuration (line 134) | def add_configuration(data, filename = nil)
function reset_configuration! (line 152) | def reset_configuration!
function projectize (line 157) | def projectize(path, project_path = nil)
function deprojectize (line 162) | def deprojectize(path, project_path = nil)
FILE: core/lib/compass/configuration/adapters.rb
type Compass (line 1) | module Compass
type Configuration (line 2) | module Configuration
type Adapters (line 5) | module Adapters
function to_compiler_arguments (line 6) | def to_compiler_arguments(additional_options = {})
function to_sass_plugin_options (line 16) | def to_sass_plugin_options
function resolve_additional_import_paths (line 47) | def resolve_additional_import_paths
function absolute_path? (line 57) | def absolute_path?(path)
function to_sass_engine_options (line 62) | def to_sass_engine_options
function sass_load_paths (line 80) | def sass_load_paths
function sass_3_4? (line 101) | def sass_3_4?
class Data (line 105) | class Data
FILE: core/lib/compass/configuration/data.rb
type Compass (line 1) | module Compass
type Configuration (line 2) | module Configuration
class Data (line 18) | class Data
method initialize (line 83) | def initialize(name, attr_hash = nil)
method set_all (line 90) | def set_all(attr_hash)
method add_import_path (line 98) | def add_import_path(*paths)
method asset_host (line 113) | def asset_host(&block)
method asset_cache_buster (line 140) | def asset_cache_buster(simple = nil, &block)
method watch (line 161) | def watch(glob, &block)
method watches (line 166) | def watches
method require (line 177) | def require(lib)
method load (line 182) | def load(framework_dir)
method discover (line 188) | def discover(frameworks_dir)
method relative_assets? (line 193) | def relative_assets?
FILE: core/lib/compass/configuration/defaults.rb
type Compass (line 1) | module Compass
type Configuration (line 2) | module Configuration
type Defaults (line 3) | module Defaults
function default_project_path (line 4) | def default_project_path
function default_project_type (line 8) | def default_project_type
function default_http_path (line 12) | def default_http_path
function default_extensions_dir (line 16) | def default_extensions_dir
function default_css_dir (line 20) | def default_css_dir
function default_sass_dir (line 24) | def default_sass_dir
function default_fonts_dir (line 28) | def default_fonts_dir
function default_images_dir (line 32) | def default_images_dir
function default_environment (line 36) | def default_environment
function default_output_style (line 40) | def default_output_style
function default_line_comments (line 48) | def default_line_comments
function default_color_output (line 52) | def default_color_output
function default_sass_path (line 56) | def default_sass_path
function default_css_path (line 62) | def default_css_path
function default_images_path (line 68) | def default_images_path
function default_generated_images_path (line 74) | def default_generated_images_path
function default_javascripts_path (line 82) | def default_javascripts_path
function default_extensions_path (line 88) | def default_extensions_path
function default_fonts_path (line 94) | def default_fonts_path
function default_cache_dir (line 100) | def default_cache_dir
function default_cache_path (line 104) | def default_cache_path
function default_generated_images_dir (line 116) | def default_generated_images_dir
function default_http_generated_images_dir (line 120) | def default_http_generated_images_dir
function default_http_images_dir (line 124) | def default_http_images_dir
function default_sprite_load_path (line 128) | def default_sprite_load_path
function default_http_images_path (line 132) | def default_http_images_path
function default_http_stylesheets_dir (line 136) | def default_http_stylesheets_dir
function default_http_stylesheets_path (line 140) | def default_http_stylesheets_path
function default_http_generated_images_path (line 144) | def default_http_generated_images_path
function default_http_fonts_dir (line 148) | def default_http_fonts_dir
function default_http_fonts_path (line 152) | def default_http_fonts_path
function default_http_javascripts_dir (line 156) | def default_http_javascripts_dir
function default_http_javascripts_path (line 160) | def default_http_javascripts_path
function default_cache (line 164) | def default_cache
function default_preferred_syntax (line 168) | def default_preferred_syntax
function default_sprite_engine (line 172) | def default_sprite_engine
function default_chunky_png_options (line 176) | def default_chunky_png_options
function http_join (line 186) | def http_join(*segments)
function http_pathify (line 194) | def http_pathify(path)
function http_root_relative (line 202) | def http_root_relative(path)
FILE: core/lib/compass/configuration/inheritance.rb
type Compass (line 1) | module Compass
type Configuration (line 2) | module Configuration
type Inheritance (line 6) | module Inheritance
function included (line 8) | def self.included(base)
type ClassMethods (line 17) | module ClassMethods
function inherited_writer (line 18) | def inherited_writer(*attributes)
function inherited_reader (line 42) | def inherited_reader(*attributes)
function inherited_accessor (line 59) | def inherited_accessor(*attributes)
class ArrayProxy (line 64) | class ArrayProxy
method initialize (line 65) | def initialize(data, attr)
method to_ary (line 68) | def to_ary
method to_a (line 71) | def to_a
method << (line 74) | def <<(v)
method >> (line 77) | def >>(v)
method serialize_to_config (line 80) | def serialize_to_config(prop)
method method_missing (line 102) | def method_missing(m, *args, &block)
function inherited_array (line 112) | def inherited_array(*attributes)
function chained_method (line 162) | def chained_method(method)
type InstanceMethods (line 178) | module InstanceMethods
function on_top! (line 180) | def on_top!
function set_top_level (line 184) | def set_top_level(new_top)
function inherit_from! (line 192) | def inherit_from!(data)
function reset_inheritance! (line 201) | def reset_inheritance!
function with_defaults (line 205) | def with_defaults(data)
function unset! (line 211) | def unset!(attribute)
function set? (line 218) | def set?(attribute)
function any_attributes_set? (line 223) | def any_attributes_set?
function default_for (line 227) | def default_for(attribute)
function read_without_default (line 235) | def read_without_default(attribute)
function raw (line 249) | def raw(attribute)
function read (line 255) | def read(attribute)
function method_missing (line 263) | def method_missing(meth, *args, &block)
function respond_to? (line 271) | def respond_to?(meth)
function chain (line 281) | def chain
function debug (line 287) | def debug
FILE: core/lib/compass/configuration/paths.rb
type Compass::Configuration::Paths (line 1) | module Compass::Configuration::Paths
function strip_trailing_separator (line 5) | def strip_trailing_separator(*attributes)
FILE: core/lib/compass/configuration/watch.rb
type Compass (line 1) | module Compass
type Configuration (line 2) | module Configuration
class Watch (line 3) | class Watch
method initialize (line 8) | def initialize(glob, &block)
method run_callback (line 25) | def run_callback(base, relative, action)
method run_once_per_changeset? (line 29) | def run_once_per_changeset?
method match? (line 33) | def match?(changed_path)
FILE: core/lib/compass/core.rb
type Compass (line 3) | module Compass
type Core (line 4) | module Core
function base_directory (line 8) | def base_directory(*subdirs)
function lib_directory (line 11) | def lib_directory(*subdirs)
type HasDeprecatedConstantsFromCore (line 18) | module HasDeprecatedConstantsFromCore
function extended (line 19) | def self.extended(base)
type SassExtensions (line 41) | module SassExtensions
type Functions (line 44) | module Functions
function shared_extension_paths (line 49) | def shared_extension_paths
FILE: core/lib/compass/core/caniuse.rb
class Compass::Core::CanIUse (line 3) | class Compass::Core::CanIUse
method initialize (line 9) | def initialize
method browsers (line 42) | def browsers
method prefix (line 47) | def prefix(browser, version = nil)
method all_prefixes (line 61) | def all_prefixes(browser)
method prefixes (line 72) | def prefixes(browsers = browsers())
method browser_ranges (line 80) | def browser_ranges(capability, prefix = nil, include_unprefixed_versio...
method find_first_prefixed_version (line 98) | def find_first_prefixed_version(browser, versions, capability, prefix)
method omitted_usage (line 116) | def omitted_usage(browser, min_version, max_version = nil)
method browsers_with_prefix (line 137) | def browsers_with_prefix(prefix)
method capability_matches (line 156) | def capability_matches(support, capability_options_list)
method prefixed_usage (line 164) | def prefixed_usage(prefix, capability, capability_options_list)
method next_version (line 180) | def next_version(browser, version)
method previous_version (line 187) | def previous_version(browser, version)
method requires_prefix (line 196) | def requires_prefix(browser, min_version, capability, capability_optio...
method versions (line 235) | def versions(browser, min_usage = 0)
method capabilities (line 243) | def capabilities
method usage (line 251) | def usage(browser, version)
method caniuse_version (line 258) | def caniuse_version(browser, version)
method inspect (line 263) | def inspect
method capability_data (line 268) | def capability_data(capability)
method browser_support (line 272) | def browser_support(browser, version, capability)
method browser_data (line 278) | def browser_data(browser)
method assert_valid_prefix (line 283) | def assert_valid_prefix(prefix)
method assert_valid_browser (line 291) | def assert_valid_browser(browser)
method assert_valid_capability (line 299) | def assert_valid_capability(capability)
method assert_valid_version (line 307) | def assert_valid_version(browser, *versions)
FILE: core/lib/compass/core/generated_version.rb
type Compass (line 1) | module Compass
type Core (line 2) | module Core
FILE: core/lib/compass/core/sass_extensions.rb
type Compass::Core::SassExtensions (line 6) | module Compass::Core::SassExtensions
FILE: core/lib/compass/core/sass_extensions/functions.rb
type Compass::Core::SassExtensions::Functions (line 1) | module Compass::Core::SassExtensions::Functions
type SassDeclarationHelper (line 2) | module SassDeclarationHelper
function declare (line 3) | def declare(*args)
type Sass::Script::Functions (line 19) | module Sass::Script::Functions
class Sass::Script::Functions::EvaluationContext (line 39) | class Sass::Script::Functions::EvaluationContext
FILE: core/lib/compass/core/sass_extensions/functions/colors.rb
type Compass::Core::SassExtensions::Functions::Colors (line 1) | module Compass::Core::SassExtensions::Functions::Colors
function adjust_lightness (line 4) | def adjust_lightness(color, amount)
function scale_lightness (line 13) | def scale_lightness(color, amount)
function adjust_saturation (line 20) | def adjust_saturation(color, amount)
function scale_saturation (line 29) | def scale_saturation(color, amount)
function shade (line 35) | def shade(color, percentage)
function tint (line 42) | def tint(color, percentage)
function ie_hex_str (line 51) | def ie_hex_str(color)
function scale_color_value (line 59) | def scale_color_value(value, amount)
FILE: core/lib/compass/core/sass_extensions/functions/configuration.rb
type Compass::Core::SassExtensions::Functions::Configuration (line 2) | module Compass::Core::SassExtensions::Functions::Configuration
function join_file_segments (line 7) | def join_file_segments(*segments)
function absolute_path (line 13) | def absolute_path(relative_path)
function split_filename (line 19) | def split_filename(path)
function using_compass_compiler (line 29) | def using_compass_compiler
function reset_configuration (line 34) | def reset_configuration()
function add_sass_configuration (line 40) | def add_sass_configuration(project_path)
function add_configuration (line 127) | def add_configuration(options)
function runtime_writable_attributes (line 146) | def runtime_writable_attributes
function common_parent_directory (line 150) | def common_parent_directory(directory1, directory2)
function relative_path_from (line 155) | def relative_path_from(directory1, directory2)
function update_sass_options! (line 159) | def update_sass_options!
FILE: core/lib/compass/core/sass_extensions/functions/constants.rb
type Compass::Core::SassExtensions::Functions::Constants (line 1) | module Compass::Core::SassExtensions::Functions::Constants
function is_position (line 3) | def is_position(position)
function is_position_list (line 6) | def is_position_list(position_list)
function opposite_position (line 10) | def opposite_position(position)
function is_url (line 48) | def is_url(string)
FILE: core/lib/compass/core/sass_extensions/functions/cross_browser_support.rb
type Compass::Core::SassExtensions::Functions::CrossBrowserSupport (line 1) | module Compass::Core::SassExtensions::Functions::CrossBrowserSupport
class CSS2FallbackValue (line 4) | class CSS2FallbackValue < Sass::Script::Value::Base
method children (line 6) | def children
method initialize (line 9) | def initialize(value, css2_value)
method inspect (line 13) | def inspect
method to_s (line 16) | def to_s(options = self.options)
method supports? (line 19) | def supports?(aspect)
method has_aspect? (line 22) | def has_aspect?
method to_css2 (line 25) | def to_css2(options = self.options)
function prefixed (line 31) | def prefixed(prefix, *args)
function prefix (line 48) | def prefix(prefix, *objects)
function css2_fallback (line 69) | def css2_fallback(value, css2_value)
function browsers (line 76) | def browsers(prefix = nil)
function browser_capabilities (line 89) | def browser_capabilities
function browser_versions (line 95) | def browser_versions(browser)
function browser_requires_prefix (line 105) | def browser_requires_prefix(browser, version, capability, capability_o...
function browser_prefix (line 120) | def browser_prefix(browser, version = nil)
function browser_prefixes (line 130) | def browser_prefixes(browsers)
function omitted_usage (line 143) | def omitted_usage(browser, min_version, max_version = nil)
function previous_version (line 155) | def previous_version(browser, version)
function next_version (line 164) | def next_version(browser, version)
function prefix_usage (line 173) | def prefix_usage(prefix, capability, capability_options)
function compare_browser_versions (line 189) | def compare_browser_versions(browser, version1, version2)
function browser_ranges (line 217) | def browser_ranges(capability, prefix = null(), include_unprefixed_ver...
function unbox_capability_options_list (line 233) | def unbox_capability_options_list(capability_options_list)
function unbox_capability_options (line 257) | def unbox_capability_options(capability_options)
FILE: core/lib/compass/core/sass_extensions/functions/display.rb
type Compass::Core::SassExtensions::Functions::Display (line 1) | module Compass::Core::SassExtensions::Functions::Display
function elements_of_type (line 29) | def elements_of_type(display)
FILE: core/lib/compass/core/sass_extensions/functions/enumerate.rb
type Compass::Core::SassExtensions::Functions::Enumerate (line 1) | module Compass::Core::SassExtensions::Functions::Enumerate
function enumerate (line 2) | def enumerate(prefix, from, through, separator = nil)
FILE: core/lib/compass/core/sass_extensions/functions/env.rb
type Compass::Core::SassExtensions::Functions::Env (line 1) | module Compass::Core::SassExtensions::Functions::Env
function compass_env (line 5) | def compass_env
function current_time (line 12) | def current_time(format = DEFAULT_TIME)
function current_date (line 20) | def current_date(format = DEFAULT_DATE)
function current_source_file (line 27) | def current_source_file(absolute = NOT_ABSOLUTE)
function current_output_file (line 40) | def current_output_file(absolute = NOT_ABSOLUTE)
function compass_extensions (line 53) | def compass_extensions
function at_stylesheet_root (line 66) | def at_stylesheet_root
FILE: core/lib/compass/core/sass_extensions/functions/files.rb
type Compass::Core::SassExtensions::Functions::Files (line 3) | module Compass::Core::SassExtensions::Functions::Files
function md5sum (line 7) | def md5sum(file, format = nil)
FILE: core/lib/compass/core/sass_extensions/functions/font_files.rb
type Compass::Core::SassExtensions::Functions::FontFiles (line 1) | module Compass::Core::SassExtensions::Functions::FontFiles
function font_formats (line 13) | def font_formats(*args)
function font_files (line 21) | def font_files(*args)
function with_each_font_file (line 31) | def with_each_font_file(*args)
FILE: core/lib/compass/core/sass_extensions/functions/gradient_support.rb
type Compass::Core::SassExtensions::Functions::GradientSupport (line 1) | module Compass::Core::SassExtensions::Functions::GradientSupport
class CSS3AngleToSVGConverter (line 5) | class CSS3AngleToSVGConverter
method initialize (line 8) | def initialize(angle)
method handle_keywords (line 41) | def handle_keywords(angle)
method in_radians (line 61) | def in_radians(angle)
method sin2 (line 76) | def sin2(a)
method x (line 81) | def x
method y (line 89) | def y
method x1 (line 97) | def x1
method y1 (line 106) | def y1
method x2 (line 115) | def x2
method y2 (line 124) | def y2
method scale (line 133) | def scale(p)
method round6 (line 137) | def round6(v)
method result (line 141) | def result(v)
class ColorStop (line 146) | class ColorStop < Sass::Script::Value::Base
method children (line 149) | def children
method initialize (line 152) | def initialize(color, stop = nil)
method inspect (line 157) | def inspect
method assert_legal_color! (line 161) | def assert_legal_color!(color)
method assert_legal_color_stop! (line 169) | def assert_legal_color_stop!(stop)
method color_to_svg_s (line 179) | def self.color_to_svg_s(c)
method color_to_svg_alpha (line 191) | def self.color_to_svg_alpha(c)
method color_to_s (line 203) | def self.color_to_s(c)
method to_s (line 211) | def to_s(options = self.options)
method to_sass (line 224) | def to_sass(options = nil)
type Gradient (line 229) | module Gradient
function included (line 232) | def self.included(base)
type ClassMethods (line 236) | module ClassMethods
function standardized_prefix (line 237) | def standardized_prefix(prefix)
function inspect (line 246) | def inspect
function supports? (line 250) | def supports?(aspect)
function has_aspect? (line 254) | def has_aspect?
function is_position (line 258) | def is_position(pos)
function angle? (line 262) | def angle?(value)
class RadialGradient (line 271) | class RadialGradient < Sass::Script::Value::Base
method children (line 276) | def children
method initialize (line 280) | def initialize(position, shape_and_size, color_stops)
method to_s (line 292) | def to_s(options = self.options)
method to_s_prefixed (line 296) | def to_s_prefixed(options = self.options)
method supports? (line 300) | def supports?(aspect)
method to_webkit (line 312) | def to_webkit(options = self.options)
method to_moz (line 319) | def to_moz(options = self.options)
method to_official (line 326) | def to_official
method new_standard_arguments (line 333) | def new_standard_arguments(options = self.options)
method old_standard_arguments (line 343) | def old_standard_arguments(options = self.options)
method to_svg (line 353) | def to_svg(options = self.options)
method to_css2 (line 358) | def to_css2(options = self.options)
method array_to_s (line 362) | def array_to_s(array, opts)
class LinearGradient (line 373) | class LinearGradient < Sass::Script::Value::Base
method children (line 378) | def children
method initialize (line 382) | def initialize(position_or_angle, color_stops, legacy=false)
method to_s_prefixed (line 391) | def to_s_prefixed(options = self.options)
method convert_to_or_from_legacy (line 402) | def convert_to_or_from_legacy(position_or_angle, options = self.opti...
method to_s (line 411) | def to_s(options = self.options)
method supports? (line 426) | def supports?(aspect)
method to_owg (line 439) | def to_owg(options = self.options)
method to_svg (line 451) | def to_svg(options = self.options)
method to_css2 (line 455) | def to_css2(options = self.options)
type Functions (line 460) | module Functions
function reverse_side_or_corner (line 463) | def reverse_side_or_corner(position)
function convert_angle_from_offical (line 481) | def convert_angle_from_offical(deg)
function grad_point (line 505) | def grad_point(position)
function color_stops (line 542) | def color_stops(*args)
function radial_gradient (line 560) | def radial_gradient(position_or_angle, shape_and_size, *color_stops)
function _build_linear_gradient (line 595) | def _build_linear_gradient(position_or_angle, *color_stops)
function _linear_gradient (line 612) | def _linear_gradient(position_or_angle, *color_stops)
function _linear_gradient_legacy (line 617) | def _linear_gradient_legacy(position_or_angle, *color_stops)
function grad_color_stops (line 623) | def grad_color_stops(color_list)
function color_stops_in_percentages (line 630) | def color_stops_in_percentages(color_list)
function linear_end_position (line 650) | def linear_end_position(position_or_angle, start_point, end_target)
function grad_end_position (line 673) | def grad_end_position(color_list, radial = bool(false))
function grad_position (line 679) | def grad_position(color_list, index, default, radial = bool(false))
function linear_svg_gradient (line 705) | def linear_svg_gradient(color_stops, start)
function radial_svg_gradient (line 713) | def radial_svg_gradient(color_stops, center)
function color_stop? (line 724) | def color_stop?(arg)
function normalize_stops (line 732) | def normalize_stops(color_list)
function parse_color_stop (line 767) | def parse_color_stop(arg)
function list_of_color_stops? (line 790) | def list_of_color_stops?(arg)
function linear_svg (line 798) | def linear_svg(color_stops, x1, y1, x2, y2)
function radial_svg (line 803) | def radial_svg(color_stops, cx, cy, r)
function color_stops_svg (line 809) | def color_stops_svg(color_stops)
function svg (line 819) | def svg(gradient)
function _center_position (line 826) | def _center_position
function opts (line 830) | def opts(v)
type Assertions (line 837) | module Assertions
function assert_type (line 838) | def assert_type(value, type, name = nil)
class LinearGradient (line 846) | class LinearGradient < Sass::Script::Value::Base
method children (line 378) | def children
method initialize (line 382) | def initialize(position_or_angle, color_stops, legacy=false)
method to_s_prefixed (line 391) | def to_s_prefixed(options = self.options)
method convert_to_or_from_legacy (line 402) | def convert_to_or_from_legacy(position_or_angle, options = self.opti...
method to_s (line 411) | def to_s(options = self.options)
method supports? (line 426) | def supports?(aspect)
method to_owg (line 439) | def to_owg(options = self.options)
method to_svg (line 451) | def to_svg(options = self.options)
method to_css2 (line 455) | def to_css2(options = self.options)
class RadialGradient (line 853) | class RadialGradient < Sass::Script::Value::Base
method children (line 276) | def children
method initialize (line 280) | def initialize(position, shape_and_size, color_stops)
method to_s (line 292) | def to_s(options = self.options)
method to_s_prefixed (line 296) | def to_s_prefixed(options = self.options)
method supports? (line 300) | def supports?(aspect)
method to_webkit (line 312) | def to_webkit(options = self.options)
method to_moz (line 319) | def to_moz(options = self.options)
method to_official (line 326) | def to_official
method new_standard_arguments (line 333) | def new_standard_arguments(options = self.options)
method old_standard_arguments (line 343) | def old_standard_arguments(options = self.options)
method to_svg (line 353) | def to_svg(options = self.options)
method to_css2 (line 358) | def to_css2(options = self.options)
method array_to_s (line 362) | def array_to_s(array, opts)
FILE: core/lib/compass/core/sass_extensions/functions/image_size.rb
type Compass::Core::SassExtensions::Functions::ImageSize (line 1) | module Compass::Core::SassExtensions::Functions::ImageSize
function image_width (line 5) | def image_width(image_file)
function image_height (line 11) | def image_height(image_file)
class ImageProperties (line 16) | class ImageProperties
method initialize (line 17) | def initialize(file)
method size (line 25) | def size
method get_size_for_png (line 30) | def get_size_for_png
method get_size_for_gif (line 34) | def get_size_for_gif
method get_size_for_jpg (line 38) | def get_size_for_jpg
method get_size_for_jpeg (line 42) | def get_size_for_jpeg
function image_dimensions (line 50) | def image_dimensions(image_file)
function image_path_for_size (line 57) | def image_path_for_size(image_file)
function real_path (line 64) | def real_path(image_file)
class JPEG (line 73) | class JPEG
method initialize (line 76) | def initialize(file)
method examine (line 85) | def examine(io)
FILE: core/lib/compass/core/sass_extensions/functions/inline_image.rb
type Compass::Core::SassExtensions::Functions::InlineImage (line 1) | module Compass::Core::SassExtensions::Functions::InlineImage
function inline_image (line 3) | def inline_image(path, mime_type = nil)
function inline_font_files (line 9) | def inline_font_files(*args)
function inline_image_string (line 21) | def inline_image_string(data, mime_type)
function compute_mime_type (line 28) | def compute_mime_type(path, mime_type = nil)
function data (line 56) | def data(real_path)
FILE: core/lib/compass/core/sass_extensions/functions/lists.rb
type Compass::Core::SassExtensions::Functions::Lists (line 1) | module Compass::Core::SassExtensions::Functions::Lists
function blank (line 4) | def blank(obj)
function compact (line 18) | def compact(*args)
function _compass_nth (line 29) | def _compass_nth(list, place)
function _compass_list (line 43) | def _compass_list(arg)
function _compass_space_list (line 53) | def _compass_space_list(list)
function _compass_list_size (line 62) | def _compass_list_size(list)
function _compass_slice (line 68) | def _compass_slice(list, start_index, end_index = nil)
function reject (line 78) | def reject(list, *values)
function first_value_of (line 83) | def first_value_of(list)
function assert_list (line 96) | def assert_list(value)
FILE: core/lib/compass/core/sass_extensions/functions/math.rb
type Compass::Core::SassExtensions::Functions::Math (line 1) | module Compass::Core::SassExtensions::Functions::Math
function included (line 5) | def self.included(base)
function pi (line 15) | def pi()
function deprecated_random (line 20) | def deprecated_random(*args)
function sin (line 35) | def sin(number)
function asin (line 40) | def asin(number)
function cos (line 45) | def cos(number)
function acos (line 50) | def acos(number)
function tan (line 55) | def tan(number)
function atan (line 60) | def atan(number)
function e (line 65) | def e
function logarithm (line 70) | def logarithm(number, base = e )
function sqrt (line 81) | def sqrt(number)
function pow (line 89) | def pow(number, exponent)
function trig (line 98) | def trig(operation, number)
FILE: core/lib/compass/core/sass_extensions/functions/selectors.rb
type Compass::Core::SassExtensions::Functions::Selectors (line 1) | module Compass::Core::SassExtensions::Functions::Selectors
function nest (line 22) | def nest(*arguments)
function append_selector (line 50) | def append_selector(selector, to_append)
function headers (line 63) | def headers(from = nil, to = nil)
FILE: core/lib/compass/core/sass_extensions/functions/urls.rb
type Compass::Core::SassExtensions::Functions::Urls (line 1) | module Compass::Core::SassExtensions::Functions::Urls
function has? (line 4) | def self.has?(base, instance_method)
function included (line 8) | def self.included(base)
type StylesheetUrl (line 15) | module StylesheetUrl
function included (line 16) | def self.included(base)
function stylesheet_url (line 22) | def stylesheet_url(path, only_path = bool(false))
type FontUrl (line 42) | module FontUrl
function included (line 43) | def self.included(base)
function font_url (line 50) | def font_url(path, only_path = bool(false), cache_buster = bool(true))
type ImageUrl (line 104) | module ImageUrl
function included (line 105) | def self.included(base)
function image_url (line 112) | def image_url(path, only_path = bool(false), cache_buster = bool(true))
type GeneratedImageUrl (line 174) | module GeneratedImageUrl
function included (line 175) | def self.included(base)
function generated_image_url (line 181) | def generated_image_url(path, cache_buster = bool(false))
function clean_path (line 242) | def clean_path(url)
function clean_url (line 248) | def clean_url(url)
function relative? (line 252) | def relative?
function absolute_path? (line 256) | def absolute_path?(path)
function compute_relative_path (line 260) | def compute_relative_path(path)
function cache_busted_path (line 268) | def cache_busted_path(path, real_path)
function compute_cache_buster (line 285) | def compute_cache_buster(path, real_path)
function default_cache_buster (line 305) | def default_cache_buster(path, real_path)
FILE: core/lib/compass/core/sass_extensions/monkey_patches/browser_support.rb
type Sass::Script (line 3) | module Sass::Script
type Value (line 4) | module Value
class Base (line 5) | class Base
method children (line 7) | def children
method opts (line 11) | def opts(value)
class List (line 17) | class List < Base
method children (line 18) | def children
class ArgList (line 23) | class ArgList < List
method children (line 24) | def children
class Map (line 29) | class Map < Base
method children (line 30) | def children
type HasSimpleCrossBrowserFunctionSupport (line 35) | module HasSimpleCrossBrowserFunctionSupport
function supports? (line 36) | def supports?(aspect)
function has_aspect? (line 41) | def has_aspect?(children = nil)
class CrossBrowserFunctionCall (line 48) | class CrossBrowserFunctionCall < Literal
method initialize (line 55) | def initialize(name, args)
method children (line 60) | def children
method inspect (line 64) | def inspect
method to_s (line 68) | def to_s(options = self.options)
class Funcall (line 95) | class Funcall < Node
method to_value (line 100) | def to_value(args)
class List (line 109) | class List < Literal
method supports? (line 110) | def supports?(aspect)
method has_aspect? (line 114) | def has_aspect?
FILE: core/lib/compass/core/sass_extensions/monkey_patches/traversal.rb
type Sass (line 1) | module Sass
type Tree (line 2) | module Tree
class Node (line 3) | class Node
method visit_depth_first (line 5) | def visit_depth_first(visitor)
FILE: core/lib/compass/core/version.rb
type Compass (line 3) | module Compass
type Core (line 4) | module Core
function scope (line 6) | def self.scope(file)
FILE: core/lib/compass/error.rb
type Compass (line 1) | module Compass
class Error (line 2) | class Error < Sass::SyntaxError
FILE: core/lib/compass/frameworks.rb
type Compass (line 1) | module Compass
type Frameworks (line 2) | module Frameworks
class Framework (line 7) | class Framework
method initialize (line 12) | def initialize(name, *arguments)
method template_directories (line 23) | def template_directories
method manifest_file (line 31) | def manifest_file(pattern)
method manifest (line 35) | def manifest(pattern, options = {})
function detect_registration (line 41) | def detect_registration
function register (line 49) | def register(name, *arguments)
function [] (line 66) | def [](name)
function guess_gem_version (line 70) | def guess_gem_version(line_reference)
function discover (line 79) | def discover(frameworks_directory)
function register_directory (line 91) | def register_directory(directory)
function template_exists? (line 106) | def template_exists?(template)
function template_usage (line 115) | def template_usage(template)
function pretty_print (line 131) | def pretty_print(skip_patterns = false)
function discover_gem_extensions! (line 157) | def discover_gem_extensions!
function discover_extensions! (line 169) | def discover_extensions!
FILE: core/lib/compass/util.rb
type Compass::Util (line 1) | module Compass::Util
function compass_warn (line 4) | def compass_warn(*args)
function blank? (line 8) | def blank?(value)
FILE: core/test/helpers/diff.rb
type Compass (line 3) | module Compass
type Diff (line 4) | module Diff
function diff_as_string (line 6) | def diff_as_string(data_old, data_new)
function format (line 40) | def format
function context_lines (line 44) | def context_lines
FILE: core/test/integrations/projects_test.rb
class ProjectsTest (line 12) | class ProjectsTest < Test::Unit::TestCase
method setup (line 13) | def setup
method verbose? (line 17) | def verbose?
method test_compass (line 21) | def test_compass
method test_busted_font_urls (line 25) | def test_busted_font_urls
method test_relative (line 29) | def test_relative
method test_valid (line 33) | def test_valid
method test_busted_image_urls (line 37) | def test_busted_image_urls
method test_envtest (line 41) | def test_envtest
method test_image_urls (line 47) | def test_image_urls
method test_uses_only_stylesheets_ext (line 51) | def test_uses_only_stylesheets_ext
method standard_checks (line 57) | def standard_checks(compiler)
method assert_renders_correctly (line 73) | def assert_renders_correctly(*arguments)
method compile_project (line 98) | def compile_project(project_name, options = {})
method sass_path_env (line 122) | def sass_path_env
method each_css_file (line 126) | def each_css_file(dir, &block)
method load_paths (line 130) | def load_paths
method each_sass_file (line 134) | def each_sass_file(sass_dir = nil)
method save_output (line 141) | def save_output(dir)
method projects (line 146) | def projects
method projects_path (line 152) | def projects_path
method project_path (line 156) | def project_path(project_name)
method tempfile_path (line 160) | def tempfile_path(project_name)
method template_path (line 164) | def template_path(project_name)
method result_path (line 168) | def result_path(project_name)
method save_path (line 172) | def save_path(project_name)
FILE: core/test/units/configuration_test.rb
class ConfigurationTest (line 7) | class ConfigurationTest < Test::Unit::TestCase
method test_sass_engine_options (line 9) | def test_sass_engine_options
method test_sass_plugin_options (line 14) | def test_sass_plugin_options
FILE: core/test/units/frameworks_test.rb
class FrameworksTest (line 6) | class FrameworksTest < Test::Unit::TestCase
method test_compass_has_the_compass_framework (line 8) | def test_compass_has_the_compass_framework
FILE: core/test/units/shared_extension_paths_test.rb
class SharedExtensionsTest (line 3) | class SharedExtensionsTest < Test::Unit::TestCase
method setup (line 5) | def setup
method teardown (line 11) | def teardown
method test_shared_extension_paths_with_valid_home (line 16) | def test_shared_extension_paths_with_valid_home
method test_shared_extension_paths_with_nil_home (line 21) | def test_shared_extension_paths_with_nil_home
method test_shared_extension_paths_with_file_home (line 26) | def test_shared_extension_paths_with_file_home
method test_shared_extension_paths_with_relative_home (line 31) | def test_shared_extension_paths_with_relative_home
FILE: core/test/units/urls_test.rb
class UrlsTest (line 6) | class UrlsTest < Test::Unit::TestCase
method test_compute_relative_path (line 9) | def test_compute_relative_path
method options (line 20) | def options
FILE: import-once/lib/compass/import-once.rb
type Compass (line 6) | module Compass
type ImportOnce (line 10) | module ImportOnce
function import_tracker (line 19) | def import_tracker
function activate! (line 23) | def activate!
FILE: import-once/lib/compass/import-once/activate.rb
type Sass (line 2) | module Sass
class Engine (line 3) | class Engine
method new (line 4) | def self.new(*args)
FILE: import-once/lib/compass/import-once/engine.rb
type Compass (line 1) | module Compass
type ImportOnce (line 5) | module ImportOnce
type Engine (line 8) | module Engine
function to_css (line 9) | def to_css
function render (line 15) | def render
function render_with_sourcemap (line 21) | def render_with_sourcemap(sourcemap_uri)
function with_import_scope (line 27) | def with_import_scope(css_filename)
FILE: import-once/lib/compass/import-once/importer.rb
type Compass (line 1) | module Compass
type ImportOnce (line 2) | module ImportOnce
type Importer (line 4) | module Importer
function find_relative (line 5) | def find_relative(uri, base, options, *args)
function find (line 10) | def find(uri, options, *args)
function key (line 15) | def key(uri, options, *args)
function mtime (line 23) | def mtime(uri, options, *args)
function handle_force_import (line 34) | def handle_force_import(uri)
function maybe_replace_with_dummy_engine (line 42) | def maybe_replace_with_dummy_engine(engine, options, force_import)
function tracker (line 51) | def tracker(options)
function normalize_filesystem_importers (line 57) | def normalize_filesystem_importers(key)
function import_tracker_key (line 63) | def import_tracker_key(engine, options)
function dummy_engine (line 67) | def dummy_engine(engine, options)
function imported? (line 72) | def imported?(engine, options)
function imported! (line 76) | def imported!(engine, options)
FILE: import-once/lib/compass/import-once/version.rb
type Compass (line 1) | module Compass
type ImportOnce (line 2) | module ImportOnce
FILE: import-once/test/diff_as_string.rb
type DiffAsString (line 4) | module DiffAsString
function diff_as_string (line 6) | def diff_as_string(data_old, data_new)
function format (line 40) | def format
function context_lines (line 44) | def context_lines
FILE: import-once/test/import_once_test.rb
type Sass::Script::Functions (line 6) | module Sass::Script::Functions
function filename (line 7) | def filename
function importer (line 14) | def importer
function importer_is_import_onced (line 21) | def importer_is_import_onced
class ImportOnceTest (line 26) | class ImportOnceTest < Test::Unit::TestCase
method assert_compilation_result (line 44) | def assert_compilation_result(sass_file, css_file, options = {})
FILE: import-once/test/test_helper.rb
class Test::Unit::TestCase (line 7) | class Test::Unit::TestCase
Condensed preview — 883 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (2,387K chars).
[
{
"path": ".gitignore",
"chars": 6,
"preview": "*.gem\n"
},
{
"path": ".travis.yml",
"chars": 3046,
"preview": "language: ruby\n\nrvm:\n - 1.8.7\n - 1.9.2\n - 1.9.3\n - jruby-18mode\n - jruby-19mode\n - rbx\n - ree\n - 2.0.0\n - 2.1.0"
},
{
"path": "CONTRIBUTING.md",
"chars": 15667,
"preview": " Contributing Stylesheets to Compass\n ===================================\n\n **Please make all pull requests against t"
},
{
"path": "Guardfile",
"chars": 482,
"preview": "group :tests do\n guard :test do\n watch(%r{^lib/(.+)\\.rb$}) { |m| \"test/#{m[1]}_test.rb\" }\n watch(%r{^test/.+_test"
},
{
"path": "LICENSE.markdown",
"chars": 1542,
"preview": "Copyright (c) 2009-2014 Christopher M. Eppstein\n\nPermission is hereby granted, free of charge, to any person obtaining\na"
},
{
"path": "README.markdown",
"chars": 1154,
"preview": "# Compass Stylesheet Authoring Framework\n\n**Depreciated:** Compass is no longer supported.\n\nBuild Status: [![Build Statu"
},
{
"path": "Rakefile",
"chars": 1432,
"preview": "\nGEMS = ['core', 'cli', 'import-once']\n\n\ntask :default => %w[test]\n\ndesc \"Run all tests\"\ntask :test do\n sh %{./test_all"
},
{
"path": "TODO.md",
"chars": 3741,
"preview": "FYI: I'm abandoning the even/odd release numbering scheme in favor of using preview releases. Going forward the master b"
},
{
"path": "cli/.gitignore",
"chars": 365,
"preview": "*.DS_Store\n*.tmproj\n*.lock\ntmp/*\ndevbin\n.sass-cache\ntest/tmp\ntest/fixtures/stylesheets/*/tmp\ntest/fixtures/stylesheets/*"
},
{
"path": "cli/Gemfile",
"chars": 1133,
"preview": "source 'https://rubygems.org'\n\ngemspec unless defined?(CI)\n\nunless ENV['PKG']\n\n gem \"sass\", \"~> 3.3.13\" unless defined?"
},
{
"path": "cli/Rakefile",
"chars": 7333,
"preview": "sh \"git checkout lib/compass/generated_version.rb\"\nrequire 'rubygems'\nrequire 'rubygems/package_task'\nrequire 'rake/test"
},
{
"path": "cli/VERSION",
"chars": 5,
"preview": "1.0.3"
},
{
"path": "cli/VERSION_NAME",
"chars": 8,
"preview": "Polaris\n"
},
{
"path": "cli/bin/compass",
"chars": 901,
"preview": "#!/usr/bin/env ruby\n# The compass command line utility\n\n# This allows compass to run easily from a git checkout without "
},
{
"path": "cli/compass.gemspec",
"chars": 1894,
"preview": "path = File.expand_path(\"lib\", File.dirname(__FILE__))\n$:.unshift(path) unless $:.include?(path)\nrequire 'compass/versio"
},
{
"path": "cli/features/command_line.feature",
"chars": 8507,
"preview": "Feature: Command Line\n In order to manage my stylesheets\n As a user on the command line\n I want to create a new proje"
},
{
"path": "cli/features/extensions.feature",
"chars": 1141,
"preview": "Feature: Extensions\n In order to have an open source ecosystem for stylesheets\n As a compass user\n I can install exte"
},
{
"path": "cli/features/step_definitions/command_line_steps.rb",
"chars": 7707,
"preview": "$:.unshift(File.expand_path(File.join(File.dirname(__FILE__), '../../test')))\n\nrequire 'bundler/setup'\nrequire 'test_hel"
},
{
"path": "cli/features/step_definitions/extension_steps.rb",
"chars": 801,
"preview": "Given /^the \"([^\\\"]*)\" directory exists$/ do |directory|\n directory.gsub!('~', ENV[\"HOME\"]) if directory.include?('~/')"
},
{
"path": "cli/gemfiles/listen_2.gemfile",
"chars": 340,
"preview": "CI=true\nmain_gemfile = File.expand_path(File.join(File.dirname(__FILE__), \"..\", \"Gemfile\"))\neval File.read(main_gemfile)"
},
{
"path": "cli/gemfiles/sass_3_3.gemfile",
"chars": 315,
"preview": "CI=true\nmain_gemfile = File.expand_path(File.join(File.dirname(__FILE__), \"..\", \"Gemfile\"))\neval File.read(main_gemfile)"
},
{
"path": "cli/gemfiles/sass_local.gemfile",
"chars": 227,
"preview": "CI=true\nmain_gemfile = File.expand_path(File.join(File.dirname(__FILE__), \"..\", \"Gemfile\"))\neval File.read(main_gemfile)"
},
{
"path": "cli/lib/compass/actions.rb",
"chars": 3573,
"preview": "module Compass\n module Actions\n\n attr_writer :logger\n\n def logger\n @logger ||= ::Compass::Logger.new\n end"
},
{
"path": "cli/lib/compass/app_integration/stand_alone/configuration_defaults.rb",
"chars": 552,
"preview": "module Compass\n module AppIntegration\n module StandAlone\n module ConfigurationDefaults\n def default_proj"
},
{
"path": "cli/lib/compass/app_integration/stand_alone/installer.rb",
"chars": 2506,
"preview": "module Compass\n module Installers\n class Base\n end\n class ManifestInstaller < Base\n end\n end\n\n module App"
},
{
"path": "cli/lib/compass/app_integration/stand_alone.rb",
"chars": 409,
"preview": "%w(configuration_defaults installer).each do |lib|\n require \"compass/app_integration/stand_alone/#{lib}\"\nend\n\nmodule Co"
},
{
"path": "cli/lib/compass/app_integration.rb",
"chars": 812,
"preview": "require \"compass/app_integration/stand_alone\"\n\nmodule Compass\n module AppIntegration\n module Helpers\n #attr_acc"
},
{
"path": "cli/lib/compass/commands/base.rb",
"chars": 848,
"preview": "module Compass\n module Commands\n class Base\n def self.register(command_name)\n Compass::Commands[command_"
},
{
"path": "cli/lib/compass/commands/clean_project.rb",
"chars": 2107,
"preview": "require 'compass/commands/project_base'\nrequire 'compass/compiler'\n\nmodule Compass\n module Commands\n module CleanPro"
},
{
"path": "cli/lib/compass/commands/create_project.rb",
"chars": 3784,
"preview": "require 'fileutils'\nrequire 'compass/commands/stamp_pattern'\n\nmodule Compass\n module Commands\n module CreateProjectO"
},
{
"path": "cli/lib/compass/commands/default.rb",
"chars": 1336,
"preview": "module Compass\n module Commands\n module DefaultOptionsParser\n def set_options(opts)\n opts.on(\"--trace\") "
},
{
"path": "cli/lib/compass/commands/extension_command.rb",
"chars": 1374,
"preview": "require 'fileutils'\nrequire 'compass/commands/base'\n\nmodule Compass\n module Commands\n module ExtensionsOptionParser\n"
},
{
"path": "cli/lib/compass/commands/help.rb",
"chars": 2656,
"preview": "module Compass\n module Commands\n module HelpOptionsParser\n def set_options(opts)\n banner = %Q{Usage: com"
},
{
"path": "cli/lib/compass/commands/imports.rb",
"chars": 1005,
"preview": "module Compass\n module Commands\n class Imports < ProjectBase\n attr_accessor :options\n register :imports\n "
},
{
"path": "cli/lib/compass/commands/installer_command.rb",
"chars": 825,
"preview": "require 'compass/installers'\n\nmodule Compass\n module Commands\n module InstallerCommand\n include Compass::Instal"
},
{
"path": "cli/lib/compass/commands/interactive.rb",
"chars": 1316,
"preview": "\nrequire 'compass/commands/project_base'\nrequire 'compass/commands/update_project'\n\nmodule Compass\n module Commands\n "
},
{
"path": "cli/lib/compass/commands/list_frameworks.rb",
"chars": 1022,
"preview": "module Compass\n module Commands\n class ListFrameworks < ProjectBase\n attr_accessor :options\n register :fra"
},
{
"path": "cli/lib/compass/commands/print_version.rb",
"chars": 2652,
"preview": "module Compass\n module Commands\n module VersionOptionsParser\n def set_options(opts)\n opts.banner = %Q{Us"
},
{
"path": "cli/lib/compass/commands/project_base.rb",
"chars": 2906,
"preview": "require 'fileutils'\nrequire 'pathname'\nrequire 'compass/commands/base'\nrequire 'compass/commands/installer_command'\n\nmod"
},
{
"path": "cli/lib/compass/commands/project_stats.rb",
"chars": 6347,
"preview": "require 'compass/commands/project_base'\nrequire 'compass/commands/update_project'\n\nmodule Compass\n module Commands\n "
},
{
"path": "cli/lib/compass/commands/project_structure.rb",
"chars": 2681,
"preview": "require 'compass/commands/project_base'\nrequire 'compass/commands/update_project'\n\nmodule Compass\n module Commands\n "
},
{
"path": "cli/lib/compass/commands/registry.rb",
"chars": 1134,
"preview": "module Compass::Commands\n module Registry\n def register(name, command_class)\n @commands ||= Hash.new\n @com"
},
{
"path": "cli/lib/compass/commands/sprite.rb",
"chars": 2854,
"preview": "require 'compass/commands/project_base'\nrequire 'compass/commands/update_project'\n\nmodule Compass\n module Commands\n "
},
{
"path": "cli/lib/compass/commands/stamp_pattern.rb",
"chars": 2667,
"preview": "require 'fileutils'\nrequire 'compass/commands/base'\nrequire 'compass/commands/update_project'\n\nmodule Compass\n module C"
},
{
"path": "cli/lib/compass/commands/unpack_extension.rb",
"chars": 3925,
"preview": "require 'compass/commands/project_base'\nrequire 'fileutils'\n\nmodule Compass\n module Commands\n module ExtensionOption"
},
{
"path": "cli/lib/compass/commands/update_project.rb",
"chars": 4519,
"preview": "require 'compass/commands/project_base'\nrequire 'compass/compiler'\n\nmodule Compass\n module Commands\n module CompileP"
},
{
"path": "cli/lib/compass/commands/validate_project.rb",
"chars": 2006,
"preview": "require 'compass/commands/project_base'\nrequire 'compass/commands/update_project'\n\nmodule Compass\n module Commands\n "
},
{
"path": "cli/lib/compass/commands/watch_project.rb",
"chars": 3731,
"preview": "# encoding: UTF-8\nrequire 'fileutils'\nrequire 'pathname'\nrequire 'compass/commands/update_project'\nrequire \"compass/sass"
},
{
"path": "cli/lib/compass/commands/write_configuration.rb",
"chars": 4023,
"preview": "require 'compass/commands/project_base'\n\nmodule Compass\n module Commands\n module ConfigurationOptionsParser\n de"
},
{
"path": "cli/lib/compass/commands.rb",
"chars": 429,
"preview": "module Compass::Commands\nend\n\nrequire 'compass/commands/registry'\n\n%w(base project_base default help list_frameworks \n "
},
{
"path": "cli/lib/compass/compiler.rb",
"chars": 9346,
"preview": "require 'pathname'\n\nmodule Compass\n class Compiler\n\n include Actions\n\n attr_accessor :working_path, :from, :to, :"
},
{
"path": "cli/lib/compass/configuration/comments.rb",
"chars": 1765,
"preview": "module Compass\n module Configuration\n # Comments are emitted into the configuration file when serialized and make it"
},
{
"path": "cli/lib/compass/configuration/file_data.rb",
"chars": 502,
"preview": "module Compass\n module Configuration\n class FileData < Data\n def self.new_from_file(config_file, defaults = nil"
},
{
"path": "cli/lib/compass/configuration/helpers.rb",
"chars": 4255,
"preview": "module Compass\n module Configuration\n @callbacks_loaded = false\n # The helpers are available as methods on the Co"
},
{
"path": "cli/lib/compass/configuration/serialization.rb",
"chars": 3286,
"preview": "module Compass\n module Configuration\n # The serialization module manages reading and writing the configuration file("
},
{
"path": "cli/lib/compass/dependencies.rb",
"chars": 249,
"preview": "begin\n require 'sass'\nrescue LoadError\n require 'rubygems'\n begin\n require 'sass'\n rescue LoadError\n puts \"Una"
},
{
"path": "cli/lib/compass/deprecation.rb",
"chars": 482,
"preview": "module Compass\n module Deprecation\n class << self\n attr_accessor :issued_deprecations\n end\n self.issued_d"
},
{
"path": "cli/lib/compass/errors.rb",
"chars": 162,
"preview": "require 'compass/error'\nmodule Compass\n class FilesystemConflict < Error\n end\n\n class MissingDependency < Error\n end"
},
{
"path": "cli/lib/compass/exec/command_option_parser.rb",
"chars": 419,
"preview": "module Compass::Exec\n class CommandOptionParser\n attr_accessor :options, :arguments, :opts\n def initialize(argume"
},
{
"path": "cli/lib/compass/exec/global_options_parser.rb",
"chars": 1885,
"preview": "module Compass::Exec::GlobalOptionsParser\n def set_options(opts)\n super\n set_global_options(opts)\n end\n def set"
},
{
"path": "cli/lib/compass/exec/helpers.rb",
"chars": 531,
"preview": "module Compass::Exec\n module Helpers\n extend self\n def report_error(e, options)\n $stderr.puts \"#{e.class} on"
},
{
"path": "cli/lib/compass/exec/project_options_parser.rb",
"chars": 2807,
"preview": "module Compass::Exec::ProjectOptionsParser\n def set_options(opts)\n super\n set_project_options(opts)\n end\n def s"
},
{
"path": "cli/lib/compass/exec/sub_command_ui.rb",
"chars": 1273,
"preview": "require 'compass/exec/global_options_parser'\nrequire 'compass/exec/project_options_parser'\n\nmodule Compass::Exec\n class"
},
{
"path": "cli/lib/compass/exec.rb",
"chars": 514,
"preview": "require 'compass/dependencies'\nrequire 'optparse'\nrequire 'compass/logger'\nrequire 'compass/errors'\nrequire 'compass/act"
},
{
"path": "cli/lib/compass/generated_version.rb",
"chars": 129,
"preview": "module Compass\n # This file intentionall does nothing.\n # The compass build scripts put the release VERSION constant h"
},
{
"path": "cli/lib/compass/installers/bare_installer.rb",
"chars": 1629,
"preview": "module Compass\n module Installers\n\n class BareInstaller < Base\n def completed_configuration\n nil\n e"
},
{
"path": "cli/lib/compass/installers/base.rb",
"chars": 6067,
"preview": "module Compass\n module Installers\n\n class Base\n\n include Actions\n\n attr_accessor :template_path, :target_p"
},
{
"path": "cli/lib/compass/installers/manifest.rb",
"chars": 4150,
"preview": "module Compass\n module Installers\n\n class Manifest\n include Enumerable\n\n # A Manifest entry\n class En"
},
{
"path": "cli/lib/compass/installers/manifest_installer.rb",
"chars": 1837,
"preview": "module Compass\n module Installers\n\n class ManifestInstaller < Base\n\n attr_accessor :manifest\n\n def initial"
},
{
"path": "cli/lib/compass/installers/template_context.rb",
"chars": 947,
"preview": "module Compass\n module Installers\n class TemplateContext\n\n def self.ctx(*arguments)\n new(*arguments).sen"
},
{
"path": "cli/lib/compass/installers.rb",
"chars": 121,
"preview": "%w(manifest template_context base manifest_installer bare_installer).each do |f|\n require \"compass/installers/#{f}\"\nend"
},
{
"path": "cli/lib/compass/logger.rb",
"chars": 3224,
"preview": "module Compass\n\n class Logger\n\n COLORS = { :clear => 0, :red => 31, :green => 32, :yellow => 33, :blue => 34 }\n\n "
},
{
"path": "cli/lib/compass/quick_cache.rb",
"chars": 437,
"preview": "module QuickCache\n\n # cache a value in memory for just a few seconds\n # This can speed up reads of values that change "
},
{
"path": "cli/lib/compass/rails.rb",
"chars": 67,
"preview": "# Rails requires compass by requiring this file.\nrequire 'compass'\n"
},
{
"path": "cli/lib/compass/sass_compiler.rb",
"chars": 4681,
"preview": "require 'sass/plugin'\n\nclass Compass::SassCompiler\n\n include Compass::Actions\n\n attr_writer :logger\n attr_reader :qui"
},
{
"path": "cli/lib/compass/sass_extensions/functions/sprites.rb",
"chars": 10550,
"preview": "module Compass::SassExtensions::Functions::Sprites\n\n extend Compass::SassExtensions::Functions::SassDeclarationHelper\n "
},
{
"path": "cli/lib/compass/sass_extensions/functions.rb",
"chars": 335,
"preview": "module Compass::SassExtensions::Functions\n module SassDeclarationHelper\n def declare(*args)\n Sass::Script::Func"
},
{
"path": "cli/lib/compass/sass_extensions/sprites/engines/chunky_png_engine.rb",
"chars": 996,
"preview": "begin\n require 'oily_png'\nrescue LoadError\n require 'chunky_png'\nend\n\nmodule Compass\n module SassExtensions\n modul"
},
{
"path": "cli/lib/compass/sass_extensions/sprites/engines.rb",
"chars": 621,
"preview": "module Compass\n module SassExtensions\n module Sprites\n class Engine\n attr_accessor :width, :height, :ima"
},
{
"path": "cli/lib/compass/sass_extensions/sprites/image.rb",
"chars": 4083,
"preview": "module Compass\n module SassExtensions\n module Sprites\n class Image\n include Sass::Script::Value::Helpers"
},
{
"path": "cli/lib/compass/sass_extensions/sprites/image_methods.rb",
"chars": 1539,
"preview": "module Compass\n module SassExtensions\n module Sprites\n module ImageMethods\n # Fetches the Sprite::Image "
},
{
"path": "cli/lib/compass/sass_extensions/sprites/image_row.rb",
"chars": 957,
"preview": "require 'forwardable'\n\nmodule Compass\n module SassExtensions\n module Sprites\n class ImageRow\n extend For"
},
{
"path": "cli/lib/compass/sass_extensions/sprites/images.rb",
"chars": 681,
"preview": "module Compass\n module SassExtensions\n module Sprites\n class Images < Array\n\n def sort_by!(method)\n "
},
{
"path": "cli/lib/compass/sass_extensions/sprites/layout/diagonal.rb",
"chars": 1104,
"preview": "module Compass\n module SassExtensions\n module Sprites\n module Layout\n class Diagonal < SpriteLayout\n\n "
},
{
"path": "cli/lib/compass/sass_extensions/sprites/layout/horizontal.rb",
"chars": 2081,
"preview": "module Compass\n module SassExtensions\n module Sprites\n module Layout\n class Horizontal < SpriteLayout\n\n "
},
{
"path": "cli/lib/compass/sass_extensions/sprites/layout/smart.rb",
"chars": 877,
"preview": "module Compass\n module SassExtensions\n module Sprites\n module Layout\n class Smart < SpriteLayout\n\n "
},
{
"path": "cli/lib/compass/sass_extensions/sprites/layout/vertical.rb",
"chars": 2221,
"preview": "module Compass\n module SassExtensions\n module Sprites\n module Layout\n class Vertical < SpriteLayout\n\n "
},
{
"path": "cli/lib/compass/sass_extensions/sprites/layout.rb",
"chars": 917,
"preview": "require 'rational'\nmodule Compass\n module SassExtensions\n module Sprites\n module Layout\n class SpriteLay"
},
{
"path": "cli/lib/compass/sass_extensions/sprites/layout_methods.rb",
"chars": 1546,
"preview": "module Compass\n module SassExtensions\n module Sprites\n module LayoutMethods\n HORIZONTAL = 'horizontal'\n "
},
{
"path": "cli/lib/compass/sass_extensions/sprites/row_fitter.rb",
"chars": 2125,
"preview": "require 'forwardable'\n\nmodule Compass\n module SassExtensions\n module Sprites\n class RowFitter\n extend Fo"
},
{
"path": "cli/lib/compass/sass_extensions/sprites/sprite_map.rb",
"chars": 2665,
"preview": "module Compass\n module SassExtensions\n module Sprites\n class SpriteMap < Sass::Script::Value::Base\n attr"
},
{
"path": "cli/lib/compass/sass_extensions/sprites/sprite_methods.rb",
"chars": 4134,
"preview": "module Compass\n module SassExtensions\n module Sprites\n module SpriteMethods\n \n # Changing this st"
},
{
"path": "cli/lib/compass/sass_extensions/sprites.rb",
"chars": 658,
"preview": "require 'digest/md5'\nrequire 'compass/sprite_importer'\n\nmodule Compass\n module SassExtensions\n module Sprites\n en"
},
{
"path": "cli/lib/compass/sass_extensions.rb",
"chars": 368,
"preview": "unless Sass::Script::Functions.methods.grep(/\\Adeclare\\Z/).any?\n raise LoadError, \"It looks like you've got an incompat"
},
{
"path": "cli/lib/compass/sprite_importer/binding.rb",
"chars": 153,
"preview": "require 'ostruct'\nmodule Compass\n module Sprites\n class Binding < OpenStruct\n \n def get_binding\n bi"
},
{
"path": "cli/lib/compass/sprite_importer/content.erb",
"chars": 4448,
"preview": "@import \"compass/utilities/sprites/base\";\n\n// General Sprite Defaults\n// You can override them before you import this fi"
},
{
"path": "cli/lib/compass/sprite_importer.rb",
"chars": 3399,
"preview": "require 'erb'\nrequire 'compass/sprite_importer/binding'\nmodule Compass\n class SpriteImporter < Sass::Importers::Base\n "
},
{
"path": "cli/lib/compass/stats.rb",
"chars": 2728,
"preview": "module Compass\n module Stats\n class StatsVisitor\n attr_accessor :rule_count, :prop_count, :mixin_def_count, :mi"
},
{
"path": "cli/lib/compass/test_case.rb",
"chars": 1085,
"preview": "module Compass\n # Write your unit test like this if you want to make sure all your stylesheets compile.\n #\n # require"
},
{
"path": "cli/lib/compass/validator.rb",
"chars": 461,
"preview": "begin\n require 'rubygems'\n require 'compass-validator'\nrescue LoadError => e\n if e.message =~ /core_ext/\n raise Co"
},
{
"path": "cli/lib/compass/version.rb",
"chars": 1271,
"preview": "require 'compass/generated_version'\nmodule Compass\n module Version\n def scope(file) # :nodoc:\n File.join(File.d"
},
{
"path": "cli/lib/compass.rb",
"chars": 676,
"preview": "module Compass\nend\n\n%w(core\n deprecation\n dependencies\n sass_extensions\n version\n errors\n quick_cache\n log"
},
{
"path": "cli/test/fixtures/extensions/only_stylesheets/compass_init.rb",
"chars": 111,
"preview": "Compass::Frameworks.register(\"only-stylesheets\", :stylesheets_dir => File.join(File.dirname(__FILE__),\"scss\"))\n"
},
{
"path": "cli/test/fixtures/extensions/only_stylesheets/scss/only_stylesheets/foo.scss",
"chars": 42,
"preview": "@mixin only-stylesheets {\n color: red;\n}\n"
},
{
"path": "cli/test/fixtures/fonts/bgrove.base64.txt",
"chars": 24993,
"preview": "AAEAAAAOAIAAAwBgRkZUTVRX4doAAEkcAAAAHE9TLzJXOYGVAAABaAAAAFZjbWFwo9b83AAAA5wAAAGCY3Z0IAAhAnkAAAUgAAAABGdhc3D//wADAABJFAAA"
},
{
"path": "cli/test/fixtures/stylesheets/busted_font_urls/config.rb",
"chars": 796,
"preview": "# Require any additional compass plugins here.\nproject_type = :stand_alone\ncss_dir = \"tmp\"\nsass_dir = \"sass\"\nfonts_dir ="
},
{
"path": "cli/test/fixtures/stylesheets/busted_font_urls/css/screen.css",
"chars": 431,
"preview": ".showgrid { font-family: url('http://assets3.example.com/fonts/grid-BUSTED.ttf'); }\n\n.no-buster { font-family: url('http"
},
{
"path": "cli/test/fixtures/stylesheets/busted_font_urls/sass/screen.sass",
"chars": 397,
"preview": ".showgrid\n font-family: font-url(\"grid.ttf\", $only-path: false, $cache-buster: true)\n\n.no-buster\n font-family: font-ur"
},
{
"path": "cli/test/fixtures/stylesheets/busted_image_urls/config.rb",
"chars": 746,
"preview": "# Require any additional compass plugins here.\nproject_type = :stand_alone\ncss_dir = \"tmp\"\nsass_dir = \"sass\"\nimages_dir "
},
{
"path": "cli/test/fixtures/stylesheets/busted_image_urls/css/screen.css",
"chars": 697,
"preview": ".showgrid { background-image: url('http://assets0.example.com/images/grid-BUSTED.png'); }\n\n.inlinegrid { background-imag"
},
{
"path": "cli/test/fixtures/stylesheets/busted_image_urls/sass/screen.sass",
"chars": 304,
"preview": ".showgrid\n background-image: image-url(\"grid.png\")\n\n.inlinegrid\n background-image: inline-image(\"grid.png\")\n\n.no-buste"
},
{
"path": "cli/test/fixtures/stylesheets/compass/config.rb",
"chars": 437,
"preview": "# Require any additional compass plugins here.\nrequire 'true'\nrequire 'compass/import-once/activate'\nproject_type = :sta"
},
{
"path": "cli/test/fixtures/stylesheets/compass/css/animation-with-legacy-ie.css",
"chars": 332,
"preview": "@-moz-keyframes test {\n 0%, 100% {\n opacity: 1; }\n\n 50% {\n opacity: 0; } }\n@-webkit-keyframes test {\n 0%, 100% "
},
{
"path": "cli/test/fixtures/stylesheets/compass/css/animation.css",
"chars": 401,
"preview": "@-moz-keyframes test {\n 0%, 100% {\n background-color: red; }\n\n 50% {\n background-color: blue; } }\n@-webkit-keyfr"
},
{
"path": "cli/test/fixtures/stylesheets/compass/css/appearance.css",
"chars": 84,
"preview": ".searchfield {\n -moz-appearance: searchfield;\n -webkit-appearance: searchfield; }\n"
},
{
"path": "cli/test/fixtures/stylesheets/compass/css/background-clip.css",
"chars": 404,
"preview": ".background-clip {\n -moz-background-clip: border;\n -o-background-clip: border-box;\n -webkit-background-clip: border;\n"
},
{
"path": "cli/test/fixtures/stylesheets/compass/css/background-origin.css",
"chars": 424,
"preview": ".background-origin {\n -moz-background-origin: border;\n -o-background-origin: border-box;\n -webkit-background-origin: "
},
{
"path": "cli/test/fixtures/stylesheets/compass/css/background-size.css",
"chars": 545,
"preview": ".background-size-default {\n -moz-background-size: 100% auto;\n -o-background-size: 100% auto;\n -webkit-background-size"
},
{
"path": "cli/test/fixtures/stylesheets/compass/css/border_radius.css",
"chars": 388,
"preview": ".simple {\n -moz-border-radius: 4px / 4px;\n -webkit-border-radius: 4px 4px;\n border-radius: 4px / 4px; }\n\n.compound {\n"
},
{
"path": "cli/test/fixtures/stylesheets/compass/css/box-sizing.css",
"chars": 305,
"preview": ".div {\n -moz-box-sizing: border-box;\n -webkit-box-sizing: border-box;\n box-sizing: border-box; }\n\n.div {\n -moz-box-s"
},
{
"path": "cli/test/fixtures/stylesheets/compass/css/box.css",
"chars": 2018,
"preview": ".hbox {\n display: -webkit-box;\n display: -moz-box;\n display: -ms-box;\n display: box;\n -webkit-box-orient: horizonta"
},
{
"path": "cli/test/fixtures/stylesheets/compass/css/box_shadow.css",
"chars": 756,
"preview": ".no-box-shadow {\n -moz-box-shadow: none;\n -webkit-box-shadow: none;\n box-shadow: none; }\n\n.box-shadow {\n -moz-box-sh"
},
{
"path": "cli/test/fixtures/stylesheets/compass/css/brightness.css",
"chars": 251,
"preview": ".black-is-0-percent {\n brightness: 0%; }\n\n.white-is-100-percent {\n brightness: 100%; }\n\n.green-is-58-point-7-percent {"
},
{
"path": "cli/test/fixtures/stylesheets/compass/css/browser-support.css",
"chars": 9990,
"preview": ".android {\n versions: \"2.1\", \"2.2\", \"2.3\", \"3\", \"4\", \"4.1\", \"4.2-4.3\", \"4.4\", \"4.4.3\";\n background-img-opts: -webkit;\n"
},
{
"path": "cli/test/fixtures/stylesheets/compass/css/color.css",
"chars": 398,
"preview": ".handles-null {\n content: \"there should be no property below this one\"; }\n\n.contrasts-light {\n background-color: #eeee"
},
{
"path": "cli/test/fixtures/stylesheets/compass/css/columns.css",
"chars": 2930,
"preview": ".columns {\n -moz-columns: 20em 5;\n -webkit-columns: 20em 5;\n columns: 20em 5; }\n\n.column-count {\n -moz-column-count:"
},
{
"path": "cli/test/fixtures/stylesheets/compass/css/filters.css",
"chars": 3801,
"preview": ".blur {\n /* Capability css-filters is not prefixed with -moz because 0% of users are affected which is less than the th"
},
{
"path": "cli/test/fixtures/stylesheets/compass/css/flexbox.css",
"chars": 2000,
"preview": ".display {\n display: -webkit-flex;\n display: flex; }\n\n.flex-direction {\n -webkit-flex-direction: row-reverse;\n flex-"
},
{
"path": "cli/test/fixtures/stylesheets/compass/css/fonts.css",
"chars": 434,
"preview": "@font-face {\n font-family: \"font1\";\n src: url('/fonts/font1.eot?busted=true');\n src: url('/fonts/font1.eot?&busted=tr"
},
{
"path": "cli/test/fixtures/stylesheets/compass/css/force-wrap.css",
"chars": 216,
"preview": "pre {\n white-space: pre;\n white-space: pre-wrap;\n white-space: pre-line;\n white-space: -pre-wrap;\n white-space: -o-"
},
{
"path": "cli/test/fixtures/stylesheets/compass/css/gradients.css",
"chars": 23282,
"preview": ".bg-shortcut-simple-image {\n background: white url(\"foo.png\"); }\n\n.bg-shortcut-linear-gradient {\n background: white ur"
},
{
"path": "cli/test/fixtures/stylesheets/compass/css/grid_background.css",
"chars": 85090,
"preview": ".baseline {\n background-image: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2Z"
},
{
"path": "cli/test/fixtures/stylesheets/compass/css/hyphenation.css",
"chars": 299,
"preview": ".word-break {\n word-break: keep-all; }\n\n.hyphens {\n -moz-hyphens: manual;\n -ms-hyphens: manual;\n -webkit-hyphens: ma"
},
{
"path": "cli/test/fixtures/stylesheets/compass/css/image_size.css",
"chars": 172,
"preview": ".png {\n width: 100px;\n height: 150px; }\n\n.jpg {\n width: 100px;\n height: 150px; }\n\n.jpeg {\n width: 100px;\n height: "
},
{
"path": "cli/test/fixtures/stylesheets/compass/css/images.css",
"chars": 221,
"preview": ".relative {\n background-image: url('/images/4x6.png?busted=true'); }\n\n.root-relative {\n background-image: url('/images"
},
{
"path": "cli/test/fixtures/stylesheets/compass/css/layout.css",
"chars": 259,
"preview": "html, body {\n height: 100%; }\n\n#layout {\n clear: both;\n min-height: 100%;\n height: auto !important;\n height: 100%;\n"
},
{
"path": "cli/test/fixtures/stylesheets/compass/css/legacy_clearfix.css",
"chars": 522,
"preview": ".clearfix {\n overflow: hidden;\n display: inline-block; }\n .clearfix {\n display: block; }\n\n.pie-clearfix {\n displa"
},
{
"path": "cli/test/fixtures/stylesheets/compass/css/lists.css",
"chars": 3066,
"preview": "ul.horizontal {\n margin: 0;\n padding: 0;\n border: 0;\n overflow: hidden;\n *zoom: 1; }\n ul.horizontal li {\n list-"
},
{
"path": "cli/test/fixtures/stylesheets/compass/css/opacity.css",
"chars": 176,
"preview": "div {\n filter: progid:DXImageTransform.Microsoft.Alpha(enabled=false);\n opacity: 1; }\n\ndiv {\n filter: progid:DXImageT"
},
{
"path": "cli/test/fixtures/stylesheets/compass/css/print.css",
"chars": 1612,
"preview": ".noprint, .no-print {\n display: none; }\n\naddress.print-only, article.print-only, aside.print-only, blockquote.print-onl"
},
{
"path": "cli/test/fixtures/stylesheets/compass/css/regions.css",
"chars": 182,
"preview": ".source {\n -ms-flow-into: target;\n -webkit-flow-into: target;\n flow-into: target; }\n\n.new-container {\n -ms-flow-from"
},
{
"path": "cli/test/fixtures/stylesheets/compass/css/replacement.css",
"chars": 4047,
"preview": ".basic {\n text-indent: -119988px;\n overflow: hidden;\n text-align: left;\n text-transform: capitalize;\n background-im"
},
{
"path": "cli/test/fixtures/stylesheets/compass/css/reset.css",
"chars": 8182,
"preview": "html, body, div, span, applet, object, iframe,\nh1, h2, h3, h4, h5, h6, p, blockquote, pre,\na, abbr, acronym, address, bi"
},
{
"path": "cli/test/fixtures/stylesheets/compass/css/selection.css",
"chars": 1254,
"preview": "*::-moz-selection {\n background-color: #fe57a1;\n color: #fff; }\n*::selection {\n background-color: #fe57a1;\n color: #"
},
{
"path": "cli/test/fixtures/stylesheets/compass/css/sprites_with_explicit_separator.css",
"chars": 665,
"preview": ".flag_states_sprite, .flag_states_foo {\n background-image: url('/images/flag_states-sc42d7bf926.png');\n background-rep"
},
{
"path": "cli/test/fixtures/stylesheets/compass/css/stretching.css",
"chars": 880,
"preview": ".stretched-completely {\n position: absolute;\n top: 0;\n bottom: 0;\n left: 0;\n right: 0; }\n\n.stretched-horizontally {"
},
{
"path": "cli/test/fixtures/stylesheets/compass/css/support.css",
"chars": 3686,
"preview": "/* ### Compass Support ---------- */\n/* - [function] set-arglist-default() with no arguments (1 Assertions, 1 Passed, 0 "
},
{
"path": "cli/test/fixtures/stylesheets/compass/css/text_shadow.css",
"chars": 774,
"preview": ".default-single-text-shadow {\n text-shadow: 0px 0px 1px #aaaaaa; }\n\n.none {\n text-shadow: none; }\n\n.color-only {\n tex"
},
{
"path": "cli/test/fixtures/stylesheets/compass/css/transform.css",
"chars": 11681,
"preview": ".apply-origin-2d {\n -moz-transform-origin: 2px 5%;\n -ms-transform-origin: 2px 5%;\n -webkit-transform-origin: 2px 5%;\n"
},
{
"path": "cli/test/fixtures/stylesheets/compass/css/transition.css",
"chars": 4624,
"preview": ".single-transition-without-delay {\n -moz-transition: all 0.6s ease-out;\n -o-transition: all 0.6s ease-out;\n -webkit-t"
},
{
"path": "cli/test/fixtures/stylesheets/compass/css/typography/links/hover-link.css",
"chars": 86,
"preview": "a {\n text-decoration: none; }\n a:hover, a:focus {\n text-decoration: underline; }\n"
},
{
"path": "cli/test/fixtures/stylesheets/compass/css/units.css",
"chars": 1007,
"preview": ".foo {\n width: 600px;\n height: 200px; }\n\n.foo .test {\n /* 16px for margins should be 1em */\n margin-top: 1em;\n /* 1"
},
{
"path": "cli/test/fixtures/stylesheets/compass/css/user-interface.css",
"chars": 1384,
"preview": ".user-select {\n -moz-user-select: -moz-none;\n -ms-user-select: none;\n -webkit-user-select: none;\n user-select: none;"
},
{
"path": "cli/test/fixtures/stylesheets/compass/css/utilities.css",
"chars": 1534,
"preview": ".clearfix {\n overflow: hidden;\n *zoom: 1; }\n\n.pie-clearfix {\n *zoom: 1; }\n .pie-clearfix:after {\n content: \"\\0020"
},
{
"path": "cli/test/fixtures/stylesheets/compass/css/vertical_rhythm.css",
"chars": 879,
"preview": "html {\n font-size: 87.5%;\n line-height: 1.14286em; }\n\n.small {\n font-size: 0.85714em;\n line-height: 1.33333em; }\n\n.p"
},
{
"path": "cli/test/fixtures/stylesheets/compass/css/vertical_rhythm_with_ems.css",
"chars": 1920,
"preview": "/* New test using em output */\nhtml {\n font-size: 112.5%;\n line-height: 1.4em; }\n\n.container {\n background-image: url"
},
{
"path": "cli/test/fixtures/stylesheets/compass/css/vertical_rhythm_with_px.css",
"chars": 1850,
"preview": "/* New using px output */\nhtml {\n font-size: 18px;\n line-height: 25px; }\n\n.container {\n background-image: url('data:i"
},
{
"path": "cli/test/fixtures/stylesheets/compass/css/vertical_rhythm_with_rems.css",
"chars": 2245,
"preview": "/* New using rem output with pixel fallbacks */\nhtml {\n font-size: 112.5%;\n line-height: 1.4em; }\n\n.container {\n back"
},
{
"path": "cli/test/fixtures/stylesheets/compass/sass/animation-with-legacy-ie.scss",
"chars": 258,
"preview": "@import \"compass/css3/animation\";\n@import \"compass/css3/opacity\";\n\n$browser-minimum-versions: (ie: \"6\");\n\n@include keyfr"
},
{
"path": "cli/test/fixtures/stylesheets/compass/sass/animation.scss",
"chars": 189,
"preview": "@import \"compass/css3/animation\";\n\n@include keyframes(test) {\n 0%, 100% {\n background-color: red; }\n 50% {\n back"
},
{
"path": "cli/test/fixtures/stylesheets/compass/sass/appearance.scss",
"chars": 89,
"preview": "@import \"compass/css3/appearance\";\n\n.searchfield {\n @include appearance(searchfield);\n}\n"
},
{
"path": "cli/test/fixtures/stylesheets/compass/sass/background-clip.scss",
"chars": 199,
"preview": "@import \"compass/css3/background-clip\";\n\n.background-clip { @include background-clip('border-box'); }\n\n.background-clip-"
},
{
"path": "cli/test/fixtures/stylesheets/compass/sass/background-origin.scss",
"chars": 209,
"preview": "@import \"compass/css3/background-origin\";\n\n.background-origin { @include background-origin('border-box'); }\n\n.background"
},
{
"path": "cli/test/fixtures/stylesheets/compass/sass/background-size.scss",
"chars": 257,
"preview": "@import \"compass/css3/background-size\";\n\n.background-size-default { @include background-size; }\n\n.background-size-single"
},
{
"path": "cli/test/fixtures/stylesheets/compass/sass/border_radius.scss",
"chars": 213,
"preview": "@import \"compass/css3/border-radius\";\n\n.simple { @include border-radius(4px, 4px); }\n.compound { @include border-radiu"
},
{
"path": "cli/test/fixtures/stylesheets/compass/sass/box-sizing.scss",
"chars": 159,
"preview": "@import \"compass/css3/box-sizing\";\n\n.div {\n @include box-sizing();\n}\n.div {\n @include box-sizing(content-box);\n}\n.div "
},
{
"path": "cli/test/fixtures/stylesheets/compass/sass/box.sass",
"chars": 525,
"preview": "@import compass/css3/box\n\n.hbox\n +display-box\n +box-orient\n +box-align\n \n & > *\n +box-flex\n\n.vbox\n +display-box"
},
{
"path": "cli/test/fixtures/stylesheets/compass/sass/box_shadow.scss",
"chars": 337,
"preview": "@import \"compass/css3/box-shadow\";\n\n.no-box-shadow { @include box-shadow(none); }\n.box-shadow { @include box-shadow(defa"
},
{
"path": "cli/test/fixtures/stylesheets/compass/sass/brightness.scss",
"chars": 364,
"preview": "@import \"compass/utilities/color/brightness\";\n\n.black-is-0-percent {\n brightness: brightness(black); }\n.white-is-100-pe"
},
{
"path": "cli/test/fixtures/stylesheets/compass/sass/browser-support.scss",
"chars": 1073,
"preview": "@import \"compass/support\";\n@import \"compass/css3/flexbox\";\n\n@function unprefixed-at-version($browser, $capability) {\n $"
},
{
"path": "cli/test/fixtures/stylesheets/compass/sass/color.scss",
"chars": 510,
"preview": "$contrasted-dark-default: black;\n$contrasted-light-default: white;\n\n@import \"compass/utilities/color\";\n\n.handles-null {\n"
},
{
"path": "cli/test/fixtures/stylesheets/compass/sass/columns.scss",
"chars": 1795,
"preview": "@import \"compass/css3/columns\";\n\n.columns { @include columns(20em 5); }\n.column-count { @"
},
{
"path": "cli/test/fixtures/stylesheets/compass/sass/filters.scss",
"chars": 511,
"preview": "$debug-browser-support: true;\n@import \"compass/css3/filter\";\n\n.blur {\n @include filter(blur(5px));\n}\n.brightness {\n @i"
},
{
"path": "cli/test/fixtures/stylesheets/compass/sass/flexbox.scss",
"chars": 1322,
"preview": "@import \"compass/css3/flexbox\";\n\n.display {\n @include display-flex;\n}\n\n.flex-direction {\n @include flex-direction(row-"
},
{
"path": "cli/test/fixtures/stylesheets/compass/sass/fonts.sass",
"chars": 268,
"preview": "@import compass/css3/font-face\n\n+font-face(\"font1\", font-files(\"font1.woff\", woff), \"font1.eot\")\n\n@font-face\n font-fami"
},
{
"path": "cli/test/fixtures/stylesheets/compass/sass/force-wrap.scss",
"chars": 65,
"preview": "@import \"compass/typography/text\";\n\npre { @include force-wrap; }\n"
},
{
"path": "cli/test/fixtures/stylesheets/compass/sass/gradients.sass",
"chars": 4011,
"preview": "@import compass/css3/images\n\n$svg-gradient-shim-threshold: 0\n\n.bg-shortcut-simple-image\n +background(white url('foo.png"
},
{
"path": "cli/test/fixtures/stylesheets/compass/sass/grid_background.scss",
"chars": 631,
"preview": "@import \"compass/layout/grid-background\";\n\n.baseline {\n @include baseline-grid-background;\n}\n\n.columns {\n @include col"
},
{
"path": "cli/test/fixtures/stylesheets/compass/sass/hyphenation.scss",
"chars": 162,
"preview": "@import \"compass/css3/hyphenation\";\n\n.word-break {\n\t@include word-break(keep-all);\n}\n.hyphens {\n\t@include hyphens(manual"
},
{
"path": "cli/test/fixtures/stylesheets/compass/sass/image_size.sass",
"chars": 394,
"preview": ".png\n width: image_width(unquote(\"100x150.png\"))\n height: image_height(unquote(\"100x150.png\"))\n\n.jpg\n width: image_wi"
},
{
"path": "cli/test/fixtures/stylesheets/compass/sass/images.scss",
"chars": 206,
"preview": ".relative {\n background-image: image-url(\"4x6.png\");\n}\n.root-relative {\n background-image: image-url(\"/images/4x6.png\""
},
{
"path": "cli/test/fixtures/stylesheets/compass/sass/layout.sass",
"chars": 112,
"preview": "@import compass/layout\n\n+sticky-footer(72px, unquote(\"#layout\"), unquote(\"#layout_footer\"), unquote(\"#footer\"))\n"
},
{
"path": "cli/test/fixtures/stylesheets/compass/sass/legacy_clearfix.scss",
"chars": 214,
"preview": "$default-has-layout-approach: block;\n\n@import \"compass/utilities\";\n\n.clearfix {\n @include clearfix;\n}\n\n.pie-clearfix "
},
{
"path": "cli/test/fixtures/stylesheets/compass/sass/lists.scss",
"chars": 666,
"preview": "@import \"compass/typography/lists\";\n\nul.horizontal { @include horizontal-list; }\nul.wide-horizontal "
},
{
"path": "cli/test/fixtures/stylesheets/compass/sass/opacity.scss",
"chars": 97,
"preview": "@import \"compass/css3/opacity\";\n\ndiv {\n @include opacity(1);\n}\n\ndiv {\n @include opacity(.2);\n}\n"
},
{
"path": "cli/test/fixtures/stylesheets/compass/sass/print.sass",
"chars": 76,
"preview": "@import compass/utilities/print\n\n+print-utilities\n\n+print-utilities(screen)\n"
},
{
"path": "cli/test/fixtures/stylesheets/compass/sass/regions.scss",
"chars": 121,
"preview": "@import \"compass/css3/regions\";\n\n.source { @include flow-into(target); }\n.new-container { @include flow-from(target); "
},
{
"path": "cli/test/fixtures/stylesheets/compass/sass/replacement.scss",
"chars": 581,
"preview": "@import \"compass/typography/text/replacement\";\n.basic {\n @include replace-text(\"4x6.png\");\n}\n.with-dimensions {\n @incl"
},
{
"path": "cli/test/fixtures/stylesheets/compass/sass/reset.sass",
"chars": 326,
"preview": "@import compass/reset\n\n// Turn off the display for both of these classes\n.unregistered-only, .registered-only\n display:"
},
{
"path": "cli/test/fixtures/stylesheets/compass/sass/selection.scss",
"chars": 767,
"preview": "$contrasted-dark-default: black;\n$contrasted-light-default: white;\n\n@import \"compass/css3/selection\";\n\n* {\n @include se"
},
{
"path": "cli/test/fixtures/stylesheets/compass/sass/sprites_with_explicit_separator.scss",
"chars": 220,
"preview": "$flag_states-sprite-dimensions: true;\n$flag_states-class-separator: \"_\";\n\n@import \"flag_states/*.png\";\n\n@include all-fla"
},
{
"path": "cli/test/fixtures/stylesheets/compass/sass/stretching.sass",
"chars": 454,
"preview": "@import \"compass/layout/stretching\"\n\n.stretched-completely\n +stretch\n\n.stretched-horizontally\n +stretch-x\n\n.stretched-"
},
{
"path": "cli/test/fixtures/stylesheets/compass/sass/support.scss",
"chars": 7300,
"preview": "@import \"compass/css3/animation\";\n@import \"compass/css3/opacity\";\n@import \"true\";\n\n$some-default-value: some default val"
},
{
"path": "cli/test/fixtures/stylesheets/compass/sass/text_shadow.scss",
"chars": 741,
"preview": "$default-text-shadow-color: #aaaaaa;\n@import \"compass/css3/text-shadow\";\n\n.default-single-text-shadow { @include single-"
},
{
"path": "cli/test/fixtures/stylesheets/compass/sass/transform.scss",
"chars": 5590,
"preview": "@import \"compass/css3/transform\";\n\n.apply-origin-2d { @include apply-origin(2px 5%, false); }\n.apply-or"
},
{
"path": "cli/test/fixtures/stylesheets/compass/sass/transition.scss",
"chars": 1658,
"preview": "@import \"compass/css3/transition\";\n\n.single-transition-without-delay { @include single-transition(all, 0.6s, ease-out);"
},
{
"path": "cli/test/fixtures/stylesheets/compass/sass/typography/links/hover-link.scss",
"chars": 75,
"preview": "@import \"compass/typography/links/hover-link\";\n\na { @include hover-link; }\n"
},
{
"path": "cli/test/fixtures/stylesheets/compass/sass/units.scss",
"chars": 1288,
"preview": "$base-font-size: 16px;\n\n@import \"compass/typography/units\";\n\n.foo {\n\twidth: 600px;\n\theight: 200px;\n}\n\n.foo .test {\n\t/* 1"
},
{
"path": "cli/test/fixtures/stylesheets/compass/sass/user-interface.scss",
"chars": 525,
"preview": "@import \"compass/css3/user-interface\";\n\n.user-select {\n @include user-select(none);\n}\n\n* {\n @include input-placeholder"
},
{
"path": "cli/test/fixtures/stylesheets/compass/sass/utilities.scss",
"chars": 684,
"preview": "$contrasted-dark-default: black;\n$contrasted-light-default: white;\n\n@import \"compass/utilities\";\n\n.clearfix {\n @inclu"
}
]
// ... and 683 more files (download for full content)
About this extraction
This page contains the full source code of the Compass/compass GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 883 files (2.0 MB), approximately 584.5k tokens, and a symbol index with 1687 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.
Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.