123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081 |
- # These overrides add support for variable-exists(), mixin-exists() and function-exists()
- # to SASS 3.1.7. These functions are added to SASS in 3.3, so when Sencha Cmd is upgraded
- # to use SASS 3.3 these overrides should be removed.
- # Some monkey patching was required to get these methods working, specifically, we had to
- # add the "environment" instance variable to EvaluationContext. These patches should be
- # removed when Cmd is upgraded to use SASS 3.3. Additionally, if Cmd is upgraded to use
- # SASS 3.2, these patches may need to be updated, because the _perform() method underwent
- # changes from 3.1 - 3.2
- # These functions are not currently included in the build. To use them, add this file
- # to the ruby path. e.g.
- # package.sass.rubypath=${package.dir}/sass/utils.rb,${package.dir}/sass/overrides.rb
- module Sass::Script
- class Funcall
- def _perform(environment)
- args = @args.map {|a| a.perform(environment)}
- if fn = environment.function(@name)
- keywords = Sass::Util.map_hash(@keywords) {|k, v| [k, v.perform(environment)]}
- return perform_sass_fn(fn, args, keywords)
- end
- ruby_name = @name.tr('-', '_')
- args = construct_ruby_args(ruby_name, args, environment)
- unless Functions.callable?(ruby_name)
- opts(to_literal(args))
- else
- ###############################################################################
- # BEGIN PATCH
- ###############################################################################
- context = Functions::EvaluationContext.new(environment.options)
- context.instance_variable_set('@environment', environment)
- opts(context.send(ruby_name, *args))
- ###############################################################################
- # END PATCH
- ###############################################################################
- end
- rescue ArgumentError => e
- raise e unless e.backtrace.any? {|t| t =~ /:in `(block in )?(#{name}|perform)'$/}
- raise Sass::SyntaxError.new("#{e.message} for `#{name}'")
- end
- end
- module Functions
- ###################################################################################
- # BEGIN PATCH
- ###################################################################################
- class EvaluationContext
- attr_reader :environment
- end
- ###################################################################################
- # END PATCH
- ###################################################################################
- def variable_exists(variable_name)
- if(environment.var(variable_name.value))
- Sass::Script::Bool.new(true)
- else
- Sass::Script::Bool.new(false)
- end
- end
- def mixin_exists(mixin_name)
- if(environment.mixin(mixin_name.value))
- Sass::Script::Bool.new(true)
- else
- Sass::Script::Bool.new(false)
- end
- end
- def function_exists(function_name)
- if(environment.function(function_name.value))
- Sass::Script::Bool.new(true)
- else
- Sass::Script::Bool.new(false)
- end
- end
- end
- end
|