user2014665
user2014665

Reputation: 3

susy 'Manual Start' - does it actually work?

On the Susy Getting Started page, there's a section marked 'Manual Start', which says :

"You can use this method if you're not using Compass from Terminal and/or Rails".

It then explains how to copy Susy's Sass definitions and @import "susy", after which (it claims), "you're good to go".

I'm trying to use Susy as part of my own build system, which uses the 'sass' command-line command to compile my stylesheets. Obviously, the Susy Sass mixins and includes depend on Compass, so I extracted the Compass Sass definitions from the Compass distribution, and put them where they could be accessed by Susy. I then tried to compile my stylesheets with:

sass -I scss/compass scss/foobar.scss ${CSSDIR}/foobar.css

When I do this, Susy throws a warning:

"You need to provide either a valid layout (number of columns) or a valid media-query min-width breakpoint (length)".

Digging into the code, it appears that the issue is that Susy calls the 'compact' function provided by Compass. The actual call is something like:

compact(false,false,false,...)

which - I presume - should evaluate to:

false

But 'compact' isn't a Sass feature; it's a Compass function, implemented in Ruby as part of Compass. If Compass's Ruby extensions aren't available, that call is left unchanged, so the Susy mixin is getting handed:

compact(false,false,false,...)

which is not 'false' ... and so things go pear-shaped. (The trouble happens at line 93 of susy/_grid.scss).

It looks to me as if using Susy without Compass is not actually possible. What's my best solution to this issue? Do I just use 'compass compile ...'instead of 'sass' to compile my stylesheet? Or can I somehow provide the 'compact' function to 'sass' in some other way?

Upvotes: 0

Views: 360

Answers (1)

cimmanon
cimmanon

Reputation: 68319

You can add this function yourself, though I really recommend using Compass. All it requires is a config.rb file so that Compass knows where files are supposed to live for various helper functions. The command for compiling with Compass is more compact since the output location is already defined in the config file: compass watch or compass compile

If you don't want to use Compass, you can add the function yourself. First you'll need the custom function, which comes from here: https://github.com/chriseppstein/compass/blob/stable/lib/compass/sass_extensions/functions/lists.rb#L18

def compact(*args)
sep = :comma
if args.size == 1 && args.first.is_a?(Sass::Script::List)
  list = args.first
  args = list.value
  sep = list.separator
end
Sass::Script::List.new(args.reject{|a| !a.to_bool}, sep)
end

Place it in a ruby file wherever makes sense.

Your sass command now just needs to add this flag: -r ./path/to/functions.rb

Upvotes: 1

Related Questions