2013-10-12 52 views
1

我已经编写了一个Sass(SCSS)CSS3 @gradient mixin,它还为IE9输出一个base64编码的SVG字符串。Sass。检查是否存在自定义Ruby功能

这混入依靠这个自定义功能红宝石在用户的萨斯“手表”的文件要求:

require 'sass' 
require 'base64' 

module Sass::Script::Functions 
    def base64Encode(string) 
     assert_type string, :String 
     Sass::Script::String.new(Base64.encode64(string.value)) 
    end 
    declare :base64Encode, :args => [:string] 
end 

被称为像这样:base64Encode($svgStr)

但是,我想释放我的mixin库,并且不想强制要求此自定义函数。

例如,用于VS2012的AFAIK Web Workbench无法包含自定义功能。如果它不包含,那么我不想输出base64规则。

那么,是否有可能在mixin中检测是否存在base64Encode作为自定义函数?否则,你最终的东西,如:

background-image: url("data:image/svg+xml;base64,base64Encode('<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"100%\" height=\"100%\" viewBox=\"0 0 1 1\" preserveAspectRatio=\"none\"><linearGradient id=\"g522\" gradientUnits=\"userSpaceOnUse\" x1=\"0%\" y1=\"0%\" x2=\"0%\" y2=\"100%\"><stop stop-color=\"white\" offset=\"0\" /><stop stop-color=\"whitesmoke\" offset=\"1\" /></linearGradient><rect x=\"0\" y=\"0\" width=\"1\" height=\"1\" fill=\"url(#g522)\" /></svg>')"); 

,而不是

background-image: url("data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRo PSIxMDAlIiBoZWlnaHQ9IjEwMCUiIHZpZXdCb3g9IjAgMCAxIDEiIHByZXNl cnZlQXNwZWN0UmF0aW89Im5vbmUiPjxsaW5lYXJHcmFkaWVudCBpZD0iZzUy MiIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiIHgxPSIwJSIgeTE9 IjAlIiB4Mj0iMCUiIHkyPSIxMDAlIj48c3RvcCBzdG9wLWNvbG9yPSJ3aGl0 ZSIgb2Zmc2V0PSIwIiAvPjxzdG9wIHN0b3AtY29sb3I9IndoaXRlc21va2Ui IG9mZnNldD0iMSIgLz48L2xpbmVhckdyYWRpZW50PjxyZWN0IHg9IjAiIHk9 IjAiIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIGZpbGw9InVybCgjZzUyMikiIC8+ PC9zdmc+ "); 

还是可能以某种方式搜索返回的字符串内检查“base64Encode”是否存在,而忽略它?

回答

1

这拉请求(已合并)为您提供了一个“功能存在”功能:https://github.com/nex3/sass/pull/821

+0

嗯,这似乎并没有工作。我从3.2.8更新到Sass 3.2.12,并且以下代码始终生成“true”: if(function-exists(base64Encode)){0} {0} {0}调试true; } else { \t debug false; } (@删除,因为SO不允许它们) –

+1

我猜你需要最新的3.3版本候选版本。如果这不起作用,可能会在GitHub上创建一个问题。 – thelucid