whatsappicloudtweetdeckhipchattelegramhangoutsslackgmailskypefacebook-workplaceoutlookemailmicrosoft-teamsdiscordmessengercustom-servicesmacoslinuxwindowsinbox
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
81 lines
3.1 KiB
81 lines
3.1 KiB
# 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 |
|
|
|
|