compass 0.11.alpha.4 → 0.11.beta.0
Sign up to get free protection for your applications and to get access to all the features.
- data/Rakefile +1 -1
- data/VERSION.yml +2 -2
- data/examples/blueprint_plugins/src/link_icons.scss +1 -1
- data/examples/blueprint_semantic/src/liquid.scss +3 -3
- data/examples/blueprint_semantic/src/screen.scss +4 -4
- data/examples/compass/config.rb +1 -0
- data/examples/compass/images/emblem-a043c4f148.png +0 -0
- data/examples/compass/images/emblem/favorite.png +0 -0
- data/examples/compass/images/emblem/important.png +0 -0
- data/examples/compass/images/emblem/photos.png +0 -0
- data/examples/compass/images/emblem/readonly.png +0 -0
- data/examples/compass/images/emblem/symbolic-link.png +0 -0
- data/examples/compass/images/emblem/system.png +0 -0
- data/examples/compass/images/emblem/unreadable.png +0 -0
- data/examples/compass/images/flag-03c3b29b35.png +0 -0
- data/examples/compass/images/flag-21cfbfbfc8.png +0 -0
- data/examples/compass/images/flag/ad.png +0 -0
- data/examples/compass/images/flag/ae.png +0 -0
- data/examples/compass/images/flag/af.png +0 -0
- data/examples/compass/images/flag/ag.png +0 -0
- data/examples/compass/images/flag/ai.png +0 -0
- data/examples/compass/images/flag/al.png +0 -0
- data/examples/compass/images/flag/am.png +0 -0
- data/examples/compass/images/flag/an.png +0 -0
- data/examples/compass/images/flag/ao.png +0 -0
- data/examples/compass/images/flag/ar.png +0 -0
- data/examples/compass/images/flag/as.png +0 -0
- data/examples/compass/images/flag/at.png +0 -0
- data/examples/compass/images/flag/au.png +0 -0
- data/examples/compass/images/flag/aw.png +0 -0
- data/examples/compass/images/flag/ax.png +0 -0
- data/examples/compass/images/flag/az.png +0 -0
- data/examples/compass/images/flag/ba.png +0 -0
- data/examples/compass/images/flag/bb.png +0 -0
- data/examples/compass/images/flag/bd.png +0 -0
- data/examples/compass/images/flag/be.png +0 -0
- data/examples/compass/images/flag/bf.png +0 -0
- data/examples/compass/images/flag/bg.png +0 -0
- data/examples/compass/images/flag/bh.png +0 -0
- data/examples/compass/images/flag/bi.png +0 -0
- data/examples/compass/images/flag/bj.png +0 -0
- data/examples/compass/images/flag/bm.png +0 -0
- data/examples/compass/images/flag/bn.png +0 -0
- data/examples/compass/images/flag/bo.png +0 -0
- data/examples/compass/images/flag/br.png +0 -0
- data/examples/compass/images/flag/bs.png +0 -0
- data/examples/compass/images/flag/bt.png +0 -0
- data/examples/compass/images/flag/bv.png +0 -0
- data/examples/compass/images/flag/bw.png +0 -0
- data/examples/compass/images/flag/by.png +0 -0
- data/examples/compass/images/flag/bz.png +0 -0
- data/examples/compass/images/flag/ca.png +0 -0
- data/examples/compass/images/flag/catalonia.png +0 -0
- data/examples/compass/images/flag/cc.png +0 -0
- data/examples/compass/images/flag/cd.png +0 -0
- data/examples/compass/images/flag/cf.png +0 -0
- data/examples/compass/images/flag/cg.png +0 -0
- data/examples/compass/images/flag/ch.png +0 -0
- data/examples/compass/images/flag/ci.png +0 -0
- data/examples/compass/images/flag/ck.png +0 -0
- data/examples/compass/images/flag/cl.png +0 -0
- data/examples/compass/images/flag/cm.png +0 -0
- data/examples/compass/images/flag/cn.png +0 -0
- data/examples/compass/images/flag/co.png +0 -0
- data/examples/compass/images/flag/cr.png +0 -0
- data/examples/compass/images/flag/cs.png +0 -0
- data/examples/compass/images/flag/cu.png +0 -0
- data/examples/compass/images/flag/cv.png +0 -0
- data/examples/compass/images/flag/cx.png +0 -0
- data/examples/compass/images/flag/cy.png +0 -0
- data/examples/compass/images/flag/cz.png +0 -0
- data/examples/compass/images/flag/de.png +0 -0
- data/examples/compass/images/flag/dj.png +0 -0
- data/examples/compass/images/flag/dk.png +0 -0
- data/examples/compass/images/flag/dm.png +0 -0
- data/examples/compass/images/flag/do.png +0 -0
- data/examples/compass/images/flag/dz.png +0 -0
- data/examples/compass/images/flag/ec.png +0 -0
- data/examples/compass/images/flag/ee.png +0 -0
- data/examples/compass/images/flag/eg.png +0 -0
- data/examples/compass/images/flag/eh.png +0 -0
- data/examples/compass/images/flag/england.png +0 -0
- data/examples/compass/images/flag/er.png +0 -0
- data/examples/compass/images/flag/es.png +0 -0
- data/examples/compass/images/flag/et.png +0 -0
- data/examples/compass/images/flag/europeanunion.png +0 -0
- data/examples/compass/images/flag/fam.png +0 -0
- data/examples/compass/images/flag/fi.png +0 -0
- data/examples/compass/images/flag/fj.png +0 -0
- data/examples/compass/images/flag/fk.png +0 -0
- data/examples/compass/images/flag/fm.png +0 -0
- data/examples/compass/images/flag/fo.png +0 -0
- data/examples/compass/images/flag/fr.png +0 -0
- data/examples/compass/images/flag/ga.png +0 -0
- data/examples/compass/images/flag/gb.png +0 -0
- data/examples/compass/images/flag/gd.png +0 -0
- data/examples/compass/images/flag/ge.png +0 -0
- data/examples/compass/images/flag/gf.png +0 -0
- data/examples/compass/images/flag/gh.png +0 -0
- data/examples/compass/images/flag/gi.png +0 -0
- data/examples/compass/images/flag/gl.png +0 -0
- data/examples/compass/images/flag/gm.png +0 -0
- data/examples/compass/images/flag/gn.png +0 -0
- data/examples/compass/images/flag/gp.png +0 -0
- data/examples/compass/images/flag/gq.png +0 -0
- data/examples/compass/images/flag/gr.png +0 -0
- data/examples/compass/images/flag/gs.png +0 -0
- data/examples/compass/images/flag/gt.png +0 -0
- data/examples/compass/images/flag/gu.png +0 -0
- data/examples/compass/images/flag/gw.png +0 -0
- data/examples/compass/images/flag/gy.png +0 -0
- data/examples/compass/images/flag/hk.png +0 -0
- data/examples/compass/images/flag/hm.png +0 -0
- data/examples/compass/images/flag/hn.png +0 -0
- data/examples/compass/images/flag/hr.png +0 -0
- data/examples/compass/images/flag/ht.png +0 -0
- data/examples/compass/images/flag/hu.png +0 -0
- data/examples/compass/images/flag/id-2.png +0 -0
- data/examples/compass/images/flag/ie.png +0 -0
- data/examples/compass/images/flag/il.png +0 -0
- data/examples/compass/images/flag/in.png +0 -0
- data/examples/compass/images/flag/io.png +0 -0
- data/examples/compass/images/flag/iq.png +0 -0
- data/examples/compass/images/flag/ir.png +0 -0
- data/examples/compass/images/flag/is.png +0 -0
- data/examples/compass/images/flag/it.png +0 -0
- data/examples/compass/images/flag/jm.png +0 -0
- data/examples/compass/images/flag/jo.png +0 -0
- data/examples/compass/images/flag/jp.png +0 -0
- data/examples/compass/images/flag/ke.png +0 -0
- data/examples/compass/images/flag/kg.png +0 -0
- data/examples/compass/images/flag/kh.png +0 -0
- data/examples/compass/images/flag/ki.png +0 -0
- data/examples/compass/images/flag/km.png +0 -0
- data/examples/compass/images/flag/kn.png +0 -0
- data/examples/compass/images/flag/kp.png +0 -0
- data/examples/compass/images/flag/kr.png +0 -0
- data/examples/compass/images/flag/kw.png +0 -0
- data/examples/compass/images/flag/ky.png +0 -0
- data/examples/compass/images/flag/kz.png +0 -0
- data/examples/compass/images/flag/la.png +0 -0
- data/examples/compass/images/flag/lb.png +0 -0
- data/examples/compass/images/flag/lc.png +0 -0
- data/examples/compass/images/flag/li.png +0 -0
- data/examples/compass/images/flag/lk.png +0 -0
- data/examples/compass/images/flag/lr.png +0 -0
- data/examples/compass/images/flag/ls.png +0 -0
- data/examples/compass/images/flag/lt.png +0 -0
- data/examples/compass/images/flag/lu.png +0 -0
- data/examples/compass/images/flag/lv.png +0 -0
- data/examples/compass/images/flag/ly.png +0 -0
- data/examples/compass/images/flag/ma.png +0 -0
- data/examples/compass/images/flag/mc.png +0 -0
- data/examples/compass/images/flag/md.png +0 -0
- data/examples/compass/images/flag/me.png +0 -0
- data/examples/compass/images/flag/mg.png +0 -0
- data/examples/compass/images/flag/mh.png +0 -0
- data/examples/compass/images/flag/mk.png +0 -0
- data/examples/compass/images/flag/ml.png +0 -0
- data/examples/compass/images/flag/mm.png +0 -0
- data/examples/compass/images/flag/mn.png +0 -0
- data/examples/compass/images/flag/mo.png +0 -0
- data/examples/compass/images/flag/mp.png +0 -0
- data/examples/compass/images/flag/mq.png +0 -0
- data/examples/compass/images/flag/mr.png +0 -0
- data/examples/compass/images/flag/ms.png +0 -0
- data/examples/compass/images/flag/mt.png +0 -0
- data/examples/compass/images/flag/mu.png +0 -0
- data/examples/compass/images/flag/mv.png +0 -0
- data/examples/compass/images/flag/mw.png +0 -0
- data/examples/compass/images/flag/mx.png +0 -0
- data/examples/compass/images/flag/my.png +0 -0
- data/examples/compass/images/flag/mz.png +0 -0
- data/examples/compass/images/flag/na.png +0 -0
- data/examples/compass/images/flag/nc.png +0 -0
- data/examples/compass/images/flag/ne.png +0 -0
- data/examples/compass/images/flag/nf.png +0 -0
- data/examples/compass/images/flag/ng.png +0 -0
- data/examples/compass/images/flag/ni.png +0 -0
- data/examples/compass/images/flag/nl.png +0 -0
- data/examples/compass/images/flag/no.png +0 -0
- data/examples/compass/images/flag/np.png +0 -0
- data/examples/compass/images/flag/nr.png +0 -0
- data/examples/compass/images/flag/nu.png +0 -0
- data/examples/compass/images/flag/nz.png +0 -0
- data/examples/compass/images/flag/om.png +0 -0
- data/examples/compass/images/flag/pa.png +0 -0
- data/examples/compass/images/flag/pe.png +0 -0
- data/examples/compass/images/flag/pf.png +0 -0
- data/examples/compass/images/flag/pg.png +0 -0
- data/examples/compass/images/flag/ph.png +0 -0
- data/examples/compass/images/flag/pk.png +0 -0
- data/examples/compass/images/flag/pl.png +0 -0
- data/examples/compass/images/flag/pm.png +0 -0
- data/examples/compass/images/flag/pn.png +0 -0
- data/examples/compass/images/flag/pr.png +0 -0
- data/examples/compass/images/flag/ps.png +0 -0
- data/examples/compass/images/flag/pt.png +0 -0
- data/examples/compass/images/flag/pw.png +0 -0
- data/examples/compass/images/flag/py.png +0 -0
- data/examples/compass/images/flag/qa.png +0 -0
- data/examples/compass/images/flag/re.png +0 -0
- data/examples/compass/images/flag/ro.png +0 -0
- data/examples/compass/images/flag/rs.png +0 -0
- data/examples/compass/images/flag/ru.png +0 -0
- data/examples/compass/images/flag/rw.png +0 -0
- data/examples/compass/images/flag/sa.png +0 -0
- data/examples/compass/images/flag/sb.png +0 -0
- data/examples/compass/images/flag/sc.png +0 -0
- data/examples/compass/images/flag/scotland.png +0 -0
- data/examples/compass/images/flag/sd.png +0 -0
- data/examples/compass/images/flag/se.png +0 -0
- data/examples/compass/images/flag/sg.png +0 -0
- data/examples/compass/images/flag/sh.png +0 -0
- data/examples/compass/images/flag/si.png +0 -0
- data/examples/compass/images/flag/sj.png +0 -0
- data/examples/compass/images/flag/sk.png +0 -0
- data/examples/compass/images/flag/sl.png +0 -0
- data/examples/compass/images/flag/sm.png +0 -0
- data/examples/compass/images/flag/sn.png +0 -0
- data/examples/compass/images/flag/so.png +0 -0
- data/examples/compass/images/flag/sr.png +0 -0
- data/examples/compass/images/flag/st.png +0 -0
- data/examples/compass/images/flag/sv.png +0 -0
- data/examples/compass/images/flag/sy.png +0 -0
- data/examples/compass/images/flag/sz.png +0 -0
- data/examples/compass/images/flag/tc.png +0 -0
- data/examples/compass/images/flag/td.png +0 -0
- data/examples/compass/images/flag/tf.png +0 -0
- data/examples/compass/images/flag/tg.png +0 -0
- data/examples/compass/images/flag/th.png +0 -0
- data/examples/compass/images/flag/tj.png +0 -0
- data/examples/compass/images/flag/tk.png +0 -0
- data/examples/compass/images/flag/tl.png +0 -0
- data/examples/compass/images/flag/tm.png +0 -0
- data/examples/compass/images/flag/tn.png +0 -0
- data/examples/compass/images/flag/to.png +0 -0
- data/examples/compass/images/flag/tr.png +0 -0
- data/examples/compass/images/flag/tt.png +0 -0
- data/examples/compass/images/flag/tv.png +0 -0
- data/examples/compass/images/flag/tw.png +0 -0
- data/examples/compass/images/flag/tz.png +0 -0
- data/examples/compass/images/flag/ua.png +0 -0
- data/examples/compass/images/flag/ug.png +0 -0
- data/examples/compass/images/flag/um.png +0 -0
- data/examples/compass/images/flag/us.png +0 -0
- data/examples/compass/images/flag/uy.png +0 -0
- data/examples/compass/images/flag/uz.png +0 -0
- data/examples/compass/images/flag/va.png +0 -0
- data/examples/compass/images/flag/vc.png +0 -0
- data/examples/compass/images/flag/ve.png +0 -0
- data/examples/compass/images/flag/vg.png +0 -0
- data/examples/compass/images/flag/vi.png +0 -0
- data/examples/compass/images/flag/vn.png +0 -0
- data/examples/compass/images/flag/vu.png +0 -0
- data/examples/compass/images/flag/wales.png +0 -0
- data/examples/compass/images/flag/wf.png +0 -0
- data/examples/compass/images/flag/ws.png +0 -0
- data/examples/compass/images/flag/ye.png +0 -0
- data/examples/compass/images/flag/yt.png +0 -0
- data/examples/compass/images/flag/za.png +0 -0
- data/examples/compass/images/flag/zm.png +0 -0
- data/examples/compass/images/flag/zw.png +0 -0
- data/examples/compass/sprites.html.haml +37 -0
- data/examples/compass/src/sprites.scss +25 -0
- data/examples/compass/src/sticky_footer.scss +1 -1
- data/examples/compass/src/utilities.scss +1 -1
- data/examples/css3/src/gradients.scss +30 -30
- data/examples/css3/src/main.scss +13 -19
- data/features/rails_integration.feature +32 -0
- data/frameworks/blueprint/stylesheets/blueprint/_grid.scss +16 -9
- data/frameworks/blueprint/stylesheets/blueprint/_liquid.scss +11 -6
- data/frameworks/compass/stylesheets/compass/_support.scss +8 -5
- data/frameworks/compass/stylesheets/compass/css3/_images.scss +6 -2
- data/frameworks/compass/stylesheets/compass/css3/_opacity.scss +6 -11
- data/frameworks/compass/stylesheets/compass/css3/_transform.scss +20 -6
- data/frameworks/compass/stylesheets/compass/utilities/sprites/_base.scss +3 -2
- data/lib/compass.rb +1 -1
- data/lib/compass/app_integration/rails.rb +3 -3
- data/lib/compass/app_integration/rails/actionpack2/urls.rb +2 -2
- data/lib/compass/app_integration/rails/actionpack3/railtie.rb +39 -11
- data/lib/compass/app_integration/rails/configuration_defaults.rb +14 -8
- data/lib/compass/browser_support.rb +62 -0
- data/lib/compass/commands/print_version.rb +10 -7
- data/lib/compass/commands/project_base.rb +1 -1
- data/lib/compass/commands/watch_project.rb +17 -0
- data/lib/compass/configuration/data.rb +15 -0
- data/lib/compass/configuration/helpers.rb +7 -8
- data/lib/compass/configuration/inheritance.rb +14 -0
- data/lib/compass/configuration/serialization.rb +8 -4
- data/lib/compass/sass_extensions/functions.rb +2 -1
- data/lib/compass/sass_extensions/functions/colors.rb +2 -3
- data/lib/compass/sass_extensions/functions/cross_browser_support.rb +39 -0
- data/lib/compass/sass_extensions/functions/gradient_support.rb +87 -379
- data/lib/compass/sass_extensions/functions/lists.rb +84 -0
- data/lib/compass/sass_extensions/functions/sprites.rb +4 -2
- data/lib/compass/sass_extensions/monkey_patches.rb +1 -1
- data/lib/compass/sass_extensions/monkey_patches/browser_support.rb +89 -0
- data/lib/compass/sprites.rb +4 -4
- data/test/fixtures/stylesheets/blueprint/css/screen.css +24 -24
- data/test/fixtures/stylesheets/blueprint/css/single-imports/grid.css +24 -24
- data/test/fixtures/stylesheets/blueprint/css/single-imports/rtl.css +24 -24
- data/test/fixtures/stylesheets/compass/css/gradients.css +21 -6
- data/test/fixtures/stylesheets/compass/css/opacity.css +4 -0
- data/test/fixtures/stylesheets/compass/css/pie.css +0 -1
- data/test/fixtures/stylesheets/compass/sass/gradients.sass +9 -0
- data/test/fixtures/stylesheets/compass/sass/opacity.scss +5 -0
- data/test/rails_integration_test.rb +3 -3
- metadata +272 -4
@@ -28,7 +28,7 @@ module Compass
|
|
28
28
|
end
|
29
29
|
|
30
30
|
def add_project_configuration
|
31
|
-
Compass.add_project_configuration(options[:configuration_file]) do
|
31
|
+
Compass.add_project_configuration(options[:configuration_file], :defaults => Compass.configuration_for(options, "cli_defaults")) do
|
32
32
|
options[:project_type]
|
33
33
|
end
|
34
34
|
end
|
@@ -69,6 +69,23 @@ module Compass
|
|
69
69
|
path.create &method(:recompile)
|
70
70
|
end
|
71
71
|
end
|
72
|
+
Compass.configuration.watches.each do |glob, callback|
|
73
|
+
monitor.path Compass.configuration.project_path do |path|
|
74
|
+
path.glob glob
|
75
|
+
path.update do |base, relative|
|
76
|
+
puts ">>> Change detected to: #{relative}"
|
77
|
+
callback.call(base, relative)
|
78
|
+
end
|
79
|
+
path.create do |base, relative|
|
80
|
+
puts ">>> New file detected: #{relative}"
|
81
|
+
callback.call(base, relative)
|
82
|
+
end
|
83
|
+
path.delete do |base, relative|
|
84
|
+
puts ">>> File Removed: #{relative}"
|
85
|
+
callback.call(base, relative)
|
86
|
+
end
|
87
|
+
end
|
88
|
+
end
|
72
89
|
|
73
90
|
end
|
74
91
|
|
@@ -99,6 +99,21 @@ module Compass
|
|
99
99
|
end
|
100
100
|
end
|
101
101
|
|
102
|
+
def watch(glob, &block)
|
103
|
+
@watches ||= []
|
104
|
+
@watches << [glob, block]
|
105
|
+
end
|
106
|
+
|
107
|
+
def watches
|
108
|
+
if defined?(@watches)
|
109
|
+
@watches
|
110
|
+
elsif inherited_data.respond_to?(:watches)
|
111
|
+
inherited_data.watches
|
112
|
+
else
|
113
|
+
[]
|
114
|
+
end
|
115
|
+
end
|
116
|
+
|
102
117
|
# Require a compass plugin and capture that it occured so that the configuration serialization works next time.
|
103
118
|
def require(lib)
|
104
119
|
(self.required_libraries ||= []) << lib
|
@@ -27,16 +27,18 @@ module Compass
|
|
27
27
|
@configuration = data
|
28
28
|
end
|
29
29
|
|
30
|
-
def configuration_for(config, filename = nil)
|
31
|
-
if config.
|
30
|
+
def configuration_for(config, filename = nil, defaults = nil)
|
31
|
+
if config.nil?
|
32
|
+
nil
|
33
|
+
elsif config.is_a?(Compass::Configuration::Data)
|
32
34
|
config
|
33
35
|
elsif config.respond_to?(:read)
|
34
36
|
filename ||= config.to_s if config.is_a?(Pathname)
|
35
|
-
Compass::Configuration::Data.new_from_string(config.read, filename)
|
37
|
+
Compass::Configuration::Data.new_from_string(config.read, filename, defaults)
|
36
38
|
elsif config.is_a?(Hash)
|
37
39
|
Compass::Configuration::Data.new(filename, config)
|
38
40
|
elsif config.is_a?(String)
|
39
|
-
Compass::Configuration::Data.new_from_file(config)
|
41
|
+
Compass::Configuration::Data.new_from_file(config, defaults)
|
40
42
|
elsif config.is_a?(Symbol)
|
41
43
|
Compass::AppIntegration.lookup(config).configuration
|
42
44
|
else
|
@@ -74,10 +76,7 @@ module Compass
|
|
74
76
|
options = args.last.is_a?(Hash) ? args.pop : {}
|
75
77
|
configuration_file_path = args.shift || detect_configuration_file
|
76
78
|
raise ArgumentError, "Too many arguments" if args.any?
|
77
|
-
if configuration_file_path
|
78
|
-
|
79
|
-
data = configuration_for(configuration_file_path)
|
80
|
-
|
79
|
+
if data = configuration_for(configuration_file_path, nil, configuration_for(options[:defaults]))
|
81
80
|
if data.raw_project_type
|
82
81
|
add_configuration(data.raw_project_type.to_sym)
|
83
82
|
elsif options[:project_type]
|
@@ -87,6 +87,16 @@ module Compass
|
|
87
87
|
self
|
88
88
|
end
|
89
89
|
|
90
|
+
def reset_inheritance!
|
91
|
+
self.inherited_data = nil
|
92
|
+
end
|
93
|
+
|
94
|
+
def with_defaults(data)
|
95
|
+
inherit_from!(data)
|
96
|
+
yield
|
97
|
+
reset_inheritance!
|
98
|
+
end
|
99
|
+
|
90
100
|
def unset!(attribute)
|
91
101
|
@set_attributes ||= {}
|
92
102
|
send("#{attribute}=", nil)
|
@@ -99,6 +109,10 @@ module Compass
|
|
99
109
|
@set_attributes[attribute]
|
100
110
|
end
|
101
111
|
|
112
|
+
def any_attributes_set?
|
113
|
+
@set_attributes && @set_attributes.size > 0
|
114
|
+
end
|
115
|
+
|
102
116
|
def default_for(attribute)
|
103
117
|
method = "default_#{attribute}".to_sym
|
104
118
|
if respond_to?(method)
|
@@ -8,15 +8,19 @@ module Compass
|
|
8
8
|
end
|
9
9
|
|
10
10
|
module ClassMethods
|
11
|
-
def new_from_file(config_file)
|
11
|
+
def new_from_file(config_file, defaults = nil)
|
12
12
|
data = Data.new(config_file)
|
13
|
-
data.
|
13
|
+
data.with_defaults(defaults) do
|
14
|
+
data._parse(config_file)
|
15
|
+
end
|
14
16
|
data
|
15
17
|
end
|
16
18
|
|
17
|
-
def new_from_string(contents, filename)
|
19
|
+
def new_from_string(contents, filename, defaults = nil)
|
18
20
|
data = Data.new(filename)
|
19
|
-
data.
|
21
|
+
data.with_defaults(defaults) do
|
22
|
+
data.parse_string(contents, filename)
|
23
|
+
end
|
20
24
|
data
|
21
25
|
end
|
22
26
|
end
|
@@ -4,7 +4,7 @@ end
|
|
4
4
|
%w(
|
5
5
|
selectors enumerate urls display
|
6
6
|
inline_image image_size constants gradient_support
|
7
|
-
font_files lists colors trig sprites
|
7
|
+
font_files lists colors trig sprites cross_browser_support
|
8
8
|
).each do |func|
|
9
9
|
require "compass/sass_extensions/functions/#{func}"
|
10
10
|
end
|
@@ -23,6 +23,7 @@ module Sass::Script::Functions
|
|
23
23
|
include Compass::SassExtensions::Functions::Colors
|
24
24
|
include Compass::SassExtensions::Functions::Trig
|
25
25
|
include Compass::SassExtensions::Functions::Sprites
|
26
|
+
include Compass::SassExtensions::Functions::CrossBrowserSupport
|
26
27
|
end
|
27
28
|
|
28
29
|
# Wierd that this has to be re-included to pick up sub-modules. Ruby bug?
|
@@ -1,11 +1,10 @@
|
|
1
1
|
module Compass::SassExtensions::Functions::Colors
|
2
|
-
include Compass::Util
|
3
2
|
|
4
3
|
# a genericized version of lighten/darken so that negative values can be used.
|
5
4
|
def adjust_lightness(color, amount)
|
6
5
|
assert_type color, :Color
|
7
6
|
assert_type amount, :Number
|
8
|
-
color.with(:lightness => restrict(color.lightness + amount.value, 0..100))
|
7
|
+
color.with(:lightness => Compass::Util.restrict(color.lightness + amount.value, 0..100))
|
9
8
|
end
|
10
9
|
|
11
10
|
# Scales a color's lightness by some percentage.
|
@@ -21,7 +20,7 @@ module Compass::SassExtensions::Functions::Colors
|
|
21
20
|
def adjust_saturation(color, amount)
|
22
21
|
assert_type color, :Color
|
23
22
|
assert_type amount, :Number
|
24
|
-
color.with(:saturation => restrict(color.saturation + amount.value, 0..100))
|
23
|
+
color.with(:saturation => Compass::Util.restrict(color.saturation + amount.value, 0..100))
|
25
24
|
end
|
26
25
|
|
27
26
|
# Scales a color's saturation by some percentage.
|
@@ -0,0 +1,39 @@
|
|
1
|
+
module Compass::SassExtensions::Functions::CrossBrowserSupport
|
2
|
+
# Check if any of the arguments passed require a vendor prefix.
|
3
|
+
def prefixed(prefix, *args)
|
4
|
+
aspect = prefix.value.sub(/^-/,"")
|
5
|
+
needed = args.any?{|a| a.respond_to?(:supports?) && a.supports?(aspect)}
|
6
|
+
Sass::Script::Bool.new(needed)
|
7
|
+
end
|
8
|
+
|
9
|
+
%w(webkit moz o ms svg pie css2).each do |prefix|
|
10
|
+
class_eval <<-RUBY, __FILE__, __LINE__ + 1
|
11
|
+
# Syntactic sugar to apply the given prefix
|
12
|
+
# -moz($arg) is the same as calling prefix(-moz, $arg)
|
13
|
+
def _#{prefix}(*args)
|
14
|
+
prefix("#{prefix}", *args)
|
15
|
+
end
|
16
|
+
RUBY
|
17
|
+
end
|
18
|
+
|
19
|
+
def prefix(prefix, *objects)
|
20
|
+
prefix = prefix.value if prefix.is_a?(Sass::Script::String)
|
21
|
+
prefix = prefix[1..-1] if prefix[0] == ?-
|
22
|
+
if objects.size > 1
|
23
|
+
self.prefix(prefix, Sass::Script::List.new(objects, :comma))
|
24
|
+
else
|
25
|
+
object = objects.first
|
26
|
+
if object.is_a?(Sass::Script::List)
|
27
|
+
Sass::Script::List.new(object.value.map{|e|
|
28
|
+
self.prefix(prefix, e)
|
29
|
+
}, object.separator)
|
30
|
+
elsif object.respond_to?(:supports?) && object.supports?(prefix) && object.respond_to?(:"to_#{prefix}")
|
31
|
+
object.options = options
|
32
|
+
object.send(:"to_#{prefix}")
|
33
|
+
else
|
34
|
+
object
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
end
|
@@ -1,322 +1,6 @@
|
|
1
1
|
module Compass::SassExtensions::Functions::GradientSupport
|
2
2
|
|
3
|
-
|
4
|
-
class List < Sass::Script::Literal
|
5
|
-
attr_accessor :values
|
6
|
-
def children
|
7
|
-
values
|
8
|
-
end
|
9
|
-
def value
|
10
|
-
# duck type to a Sass List
|
11
|
-
values
|
12
|
-
end
|
13
|
-
def initialize(*values)
|
14
|
-
self.values = values
|
15
|
-
end
|
16
|
-
def join_with
|
17
|
-
", "
|
18
|
-
end
|
19
|
-
def inspect
|
20
|
-
to_s
|
21
|
-
end
|
22
|
-
def to_s(options = self.options)
|
23
|
-
values.map {|v| v.to_s }.join(join_with)
|
24
|
-
end
|
25
|
-
def size
|
26
|
-
values.size
|
27
|
-
end
|
28
|
-
end
|
29
|
-
|
30
|
-
class SpaceList < List
|
31
|
-
def join_with
|
32
|
-
" "
|
33
|
-
end
|
34
|
-
end
|
35
|
-
|
36
|
-
# given a position list, return a corresponding position in percents
|
37
|
-
def grad_point(position)
|
38
|
-
position = position.is_a?(Sass::Script::String) ? position.value : position.to_s
|
39
|
-
position = if position[" "]
|
40
|
-
if position =~ /(top|bottom|center) (left|right|center)/
|
41
|
-
"#{$2} #{$1}"
|
42
|
-
else
|
43
|
-
position
|
44
|
-
end
|
45
|
-
else
|
46
|
-
case position
|
47
|
-
when /top|bottom/
|
48
|
-
"center #{position}"
|
49
|
-
when /left|right/
|
50
|
-
"#{position} center"
|
51
|
-
when /center/
|
52
|
-
"center center"
|
53
|
-
else
|
54
|
-
"#{position} center"
|
55
|
-
end
|
56
|
-
end
|
57
|
-
position = position.
|
58
|
-
gsub(/top/, "0%").
|
59
|
-
gsub(/bottom/, "100%").
|
60
|
-
gsub(/left/,"0%").
|
61
|
-
gsub(/right/,"100%").
|
62
|
-
gsub(/center/, "50%")
|
63
|
-
SpaceList.new(*position.split(/ /).map{|s| Sass::Script::String.new(s)})
|
64
|
-
end
|
65
|
-
|
66
|
-
def color_stops(*args)
|
67
|
-
List.new(*args.map do |arg|
|
68
|
-
case arg
|
69
|
-
when ColorStop
|
70
|
-
arg
|
71
|
-
when Sass::Script::Color
|
72
|
-
ColorStop.new(arg)
|
73
|
-
when Sass::Script::String
|
74
|
-
# We get a string as the result of concatenation
|
75
|
-
# So we have to reparse the expression
|
76
|
-
parse_color_stop(arg)
|
77
|
-
else
|
78
|
-
raise Sass::SyntaxError, "Not a valid color stop: #{arg.class.name}: #{arg}"
|
79
|
-
end
|
80
|
-
end)
|
81
|
-
end
|
82
|
-
|
83
|
-
# Returns a comma-delimited list after removing any non-true values
|
84
|
-
def compact(*args)
|
85
|
-
List.new(*args.reject{|a| !a.to_bool})
|
86
|
-
end
|
87
|
-
|
88
|
-
# Returns a list object from a value that was passed.
|
89
|
-
# This can be used to unpack a space separated list that got turned
|
90
|
-
# into a string by sass before it was passed to a mixin.
|
91
|
-
def _compass_list(arg)
|
92
|
-
return arg if arg.is_a?(List)
|
93
|
-
values = case arg
|
94
|
-
when Sass::Script::String
|
95
|
-
expr = Sass::Script::Parser.parse(arg.value, 0, 0)
|
96
|
-
if expr.is_a?(Sass::Script::Operation)
|
97
|
-
extract_list_values(expr)
|
98
|
-
elsif expr.is_a?(Sass::Script::Funcall)
|
99
|
-
expr.perform(Sass::Environment.new) #we already evaluated the args in context so no harm in using a fake env
|
100
|
-
else
|
101
|
-
[arg]
|
102
|
-
end
|
103
|
-
else
|
104
|
-
[arg]
|
105
|
-
end
|
106
|
-
|
107
|
-
SpaceList.new(*values)
|
108
|
-
end
|
109
|
-
|
110
|
-
def _compass_space_list(list)
|
111
|
-
if list.is_a?(List) && !list.is_a?(SpaceList)
|
112
|
-
SpaceList.new(*list.values)
|
113
|
-
elsif list.is_a?(SpaceList)
|
114
|
-
list
|
115
|
-
else
|
116
|
-
SpaceList.new(list)
|
117
|
-
end
|
118
|
-
end
|
119
|
-
|
120
|
-
def _compass_list_size(list)
|
121
|
-
Sass::Script::Number.new(list.size)
|
122
|
-
end
|
123
|
-
|
124
|
-
# slice a sublist from a list
|
125
|
-
def _compass_slice(list, start_index, end_index = nil)
|
126
|
-
end_index ||= Sass::Script::Number.new(-1)
|
127
|
-
start_index = start_index.value
|
128
|
-
end_index = end_index.value
|
129
|
-
start_index -= 1 unless start_index < 0
|
130
|
-
end_index -= 1 unless end_index < 0
|
131
|
-
list.class.new *list.values[start_index..end_index]
|
132
|
-
end
|
133
|
-
|
134
|
-
# Check if any of the arguments passed have a tendency towards vendor prefixing.
|
135
|
-
def prefixed(prefix, *args)
|
136
|
-
method = prefix.value.sub(/^-/,"to_").to_sym
|
137
|
-
args.map!{|a| a.is_a?(List) ? a.values : a}.flatten!
|
138
|
-
Sass::Script::Bool.new(args.any?{|a| a.respond_to?(method)})
|
139
|
-
end
|
140
|
-
|
141
|
-
%w(webkit moz o ms svg pie css2).each do |prefix|
|
142
|
-
class_eval <<-RUBY, __FILE__, __LINE__ + 1
|
143
|
-
def _#{prefix}(*args)
|
144
|
-
List.new(*args.map! {|a| add_prefix(:to_#{prefix}, a)})
|
145
|
-
end
|
146
|
-
RUBY
|
147
|
-
end
|
148
|
-
|
149
|
-
protected
|
150
|
-
|
151
|
-
def add_prefix(prefix_method, object)
|
152
|
-
if object.is_a?(List)
|
153
|
-
object.class.new(object.value.map{|e|
|
154
|
-
add_prefix(prefix_method, e)
|
155
|
-
})
|
156
|
-
elsif object.respond_to?(prefix_method)
|
157
|
-
object.options = options
|
158
|
-
object.send(prefix_method)
|
159
|
-
else
|
160
|
-
object
|
161
|
-
end
|
162
|
-
end
|
163
|
-
|
164
|
-
def color_stop?(arg)
|
165
|
-
parse_color_stop(arg)
|
166
|
-
rescue
|
167
|
-
nil
|
168
|
-
end
|
169
|
-
|
170
|
-
def assert_list(value)
|
171
|
-
unless value.is_a?(List)
|
172
|
-
raise ArgumentError.new("#{value.inspect} is not a list")
|
173
|
-
end
|
174
|
-
end
|
175
|
-
|
176
|
-
end
|
177
|
-
|
178
|
-
module ListBasedSassSupport
|
179
|
-
# given a position list, return a corresponding position in percents
|
180
|
-
def grad_point(position)
|
181
|
-
position = unless position.is_a?(Sass::Script::List)
|
182
|
-
Sass::Script::List.new([position], :space)
|
183
|
-
else
|
184
|
-
Sass::Script::List.new(position.value.dup, position.separator)
|
185
|
-
end
|
186
|
-
position.value.reject!{|p| p.is_a?(Sass::Script::Number) && p.numerator_units.include?("deg")}
|
187
|
-
if (position.value.first.value =~ /top|bottom/) or (position.value.last.value =~ /left|right/)
|
188
|
-
# browsers are pretty forgiving of reversed positions so we are too.
|
189
|
-
position.value.reverse!
|
190
|
-
end
|
191
|
-
if position.value.size == 1
|
192
|
-
if position.value.first.value =~ /top|bottom/
|
193
|
-
position.value.unshift Sass::Script::String.new("center")
|
194
|
-
elsif position.value.first.value =~ /left|right/
|
195
|
-
position.value.push Sass::Script::String.new("center")
|
196
|
-
end
|
197
|
-
end
|
198
|
-
position.value.map! do |p|
|
199
|
-
case p.value
|
200
|
-
when /top|left/
|
201
|
-
Sass::Script::Number.new(0, ["%"])
|
202
|
-
when /bottom|right/
|
203
|
-
Sass::Script::Number.new(100, ["%"])
|
204
|
-
when /center/
|
205
|
-
Sass::Script::Number.new(50, ["%"])
|
206
|
-
else
|
207
|
-
p
|
208
|
-
end
|
209
|
-
end
|
210
|
-
position
|
211
|
-
end
|
212
|
-
|
213
|
-
def color_stops(*args)
|
214
|
-
Sass::Script::List.new(args.map do |arg|
|
215
|
-
case arg
|
216
|
-
when ColorStop
|
217
|
-
arg
|
218
|
-
when Sass::Script::Color
|
219
|
-
ColorStop.new(arg)
|
220
|
-
when Sass::Script::List
|
221
|
-
ColorStop.new(*arg.value)
|
222
|
-
else
|
223
|
-
raise Sass::SyntaxError, "Not a valid color stop: #{arg.class.name}: #{arg}"
|
224
|
-
end
|
225
|
-
end, :comma)
|
226
|
-
end
|
227
|
-
|
228
|
-
# Returns a comma-delimited list after removing any non-true values
|
229
|
-
def compact(*args)
|
230
|
-
sep = :comma
|
231
|
-
if args.size == 1 && args.first.is_a?(Sass::Script::List)
|
232
|
-
args = args.first.value
|
233
|
-
sep = args.first.separator
|
234
|
-
end
|
235
|
-
Sass::Script::List.new(args.reject{|a| !a.to_bool}, sep)
|
236
|
-
end
|
237
|
-
|
238
|
-
# Returns a list object from a value that was passed.
|
239
|
-
# This can be used to unpack a space separated list that got turned
|
240
|
-
# into a string by sass before it was passed to a mixin.
|
241
|
-
def _compass_list(arg)
|
242
|
-
if arg.is_a?(Sass::Script::List)
|
243
|
-
Sass::Script::List.new(arg.value.dup, arg.separator)
|
244
|
-
else
|
245
|
-
Sass::Script::List.new([arg], :space)
|
246
|
-
end
|
247
|
-
end
|
248
|
-
|
249
|
-
def _compass_space_list(list)
|
250
|
-
if list.is_a?(Sass::Script::List)
|
251
|
-
Sass::Script::List.new(list.value.dup, :space)
|
252
|
-
else
|
253
|
-
Sass::Script::List.new([list], :space)
|
254
|
-
end
|
255
|
-
end
|
256
|
-
|
257
|
-
def _compass_list_size(list)
|
258
|
-
assert_list list
|
259
|
-
Sass::Script::Number.new(list.value.size)
|
260
|
-
end
|
261
|
-
|
262
|
-
# slice a sublist from a list
|
263
|
-
def _compass_slice(list, start_index, end_index = nil)
|
264
|
-
end_index ||= Sass::Script::Number.new(-1)
|
265
|
-
start_index = start_index.value
|
266
|
-
end_index = end_index.value
|
267
|
-
start_index -= 1 unless start_index < 0
|
268
|
-
end_index -= 1 unless end_index < 0
|
269
|
-
Sass::Script::List.new list.values[start_index..end_index], list.separator
|
270
|
-
end
|
271
|
-
|
272
|
-
# Check if any of the arguments passed have a tendency towards vendor prefixing.
|
273
|
-
def prefixed(prefix, *args)
|
274
|
-
method = prefix.value.sub(/^-/,"to_").to_sym
|
275
|
-
2.times do
|
276
|
-
args.map!{|a| a.is_a?(Sass::Script::List) ? a.value : a}.flatten!
|
277
|
-
end
|
278
|
-
Sass::Script::Bool.new(args.any?{|a| a.respond_to?(method)})
|
279
|
-
end
|
280
|
-
|
281
|
-
%w(webkit moz o ms svg pie css2).each do |prefix|
|
282
|
-
class_eval <<-RUBY, __FILE__, __LINE__ + 1
|
283
|
-
def _#{prefix}(*args)
|
284
|
-
Sass::Script::List.new(args.map! {|a| add_prefix(:to_#{prefix}, a)}, :comma)
|
285
|
-
end
|
286
|
-
RUBY
|
287
|
-
end
|
288
|
-
|
289
|
-
protected
|
290
|
-
|
291
|
-
def add_prefix(prefix_method, object)
|
292
|
-
if object.is_a?(Sass::Script::List)
|
293
|
-
Sass::Script::List.new(object.value.map{|e|
|
294
|
-
add_prefix(prefix_method, e)
|
295
|
-
}, object.separator)
|
296
|
-
elsif object.respond_to?(prefix_method)
|
297
|
-
object.options = options
|
298
|
-
object.send(prefix_method)
|
299
|
-
else
|
300
|
-
object
|
301
|
-
end
|
302
|
-
end
|
303
|
-
|
304
|
-
def color_stop?(arg)
|
305
|
-
arg.is_a?(ColorStop) ||
|
306
|
-
(arg.is_a?(Sass::Script::List) && ColorStop.new(*arg.value)) ||
|
307
|
-
ColorStop.new(arg)
|
308
|
-
rescue
|
309
|
-
nil
|
310
|
-
end
|
311
|
-
|
312
|
-
def assert_list(value)
|
313
|
-
unless value.is_a?(Sass::Script::List)
|
314
|
-
raise ArgumentError.new("#{value.inspect} is not a list")
|
315
|
-
end
|
316
|
-
end
|
317
|
-
|
318
|
-
end
|
319
|
-
|
3
|
+
GRADIENT_ASPECTS = %w(webkit moz svg pie css2).freeze
|
320
4
|
|
321
5
|
class ColorStop < Sass::Script::Literal
|
322
6
|
attr_accessor :color, :stop
|
@@ -372,6 +56,12 @@ module Compass::SassExtensions::Functions::GradientSupport
|
|
372
56
|
s << color_stops.to_s(options)
|
373
57
|
s << ")"
|
374
58
|
end
|
59
|
+
def supports?(aspect)
|
60
|
+
GRADIENT_ASPECTS.include?(aspect)
|
61
|
+
end
|
62
|
+
def has_aspect?
|
63
|
+
true
|
64
|
+
end
|
375
65
|
def to_webkit(options = self.options)
|
376
66
|
args = [
|
377
67
|
grad_point(position_and_angle || _center_position),
|
@@ -421,6 +111,12 @@ module Compass::SassExtensions::Functions::GradientSupport
|
|
421
111
|
s << color_stops.to_s(options)
|
422
112
|
s << ")"
|
423
113
|
end
|
114
|
+
def supports?(aspect)
|
115
|
+
GRADIENT_ASPECTS.include?(aspect)
|
116
|
+
end
|
117
|
+
def has_aspect?
|
118
|
+
true
|
119
|
+
end
|
424
120
|
def to_webkit(options = self.options)
|
425
121
|
args = []
|
426
122
|
args << grad_point(position_and_angle || Sass::Script::String.new("top"))
|
@@ -447,11 +143,53 @@ module Compass::SassExtensions::Functions::GradientSupport
|
|
447
143
|
|
448
144
|
module Functions
|
449
145
|
|
450
|
-
#
|
451
|
-
|
452
|
-
|
453
|
-
|
454
|
-
|
146
|
+
# given a position list, return a corresponding position in percents
|
147
|
+
def grad_point(position)
|
148
|
+
position = unless position.is_a?(Sass::Script::List)
|
149
|
+
Sass::Script::List.new([position], :space)
|
150
|
+
else
|
151
|
+
Sass::Script::List.new(position.value.dup, position.separator)
|
152
|
+
end
|
153
|
+
position.value.reject!{|p| p.is_a?(Sass::Script::Number) && p.numerator_units.include?("deg")}
|
154
|
+
if (position.value.first.value =~ /top|bottom/) or (position.value.last.value =~ /left|right/)
|
155
|
+
# browsers are pretty forgiving of reversed positions so we are too.
|
156
|
+
position.value.reverse!
|
157
|
+
end
|
158
|
+
if position.value.size == 1
|
159
|
+
if position.value.first.value =~ /top|bottom/
|
160
|
+
position.value.unshift Sass::Script::String.new("center")
|
161
|
+
elsif position.value.first.value =~ /left|right/
|
162
|
+
position.value.push Sass::Script::String.new("center")
|
163
|
+
end
|
164
|
+
end
|
165
|
+
position.value.map! do |p|
|
166
|
+
case p.value
|
167
|
+
when /top|left/
|
168
|
+
Sass::Script::Number.new(0, ["%"])
|
169
|
+
when /bottom|right/
|
170
|
+
Sass::Script::Number.new(100, ["%"])
|
171
|
+
when /center/
|
172
|
+
Sass::Script::Number.new(50, ["%"])
|
173
|
+
else
|
174
|
+
p
|
175
|
+
end
|
176
|
+
end
|
177
|
+
position
|
178
|
+
end
|
179
|
+
|
180
|
+
def color_stops(*args)
|
181
|
+
Sass::Script::List.new(args.map do |arg|
|
182
|
+
case arg
|
183
|
+
when ColorStop
|
184
|
+
arg
|
185
|
+
when Sass::Script::Color
|
186
|
+
ColorStop.new(arg)
|
187
|
+
when Sass::Script::List
|
188
|
+
ColorStop.new(*arg.value)
|
189
|
+
else
|
190
|
+
raise Sass::SyntaxError, "Not a valid color stop: #{arg.class.name}: #{arg}"
|
191
|
+
end
|
192
|
+
end, :comma)
|
455
193
|
end
|
456
194
|
|
457
195
|
def radial_gradient(position_and_angle, shape_and_size, *color_stops)
|
@@ -508,7 +246,7 @@ module Compass::SassExtensions::Functions::GradientSupport
|
|
508
246
|
end
|
509
247
|
|
510
248
|
def color_stops_in_percentages(color_list)
|
511
|
-
|
249
|
+
assert_type color_list, :List
|
512
250
|
color_list = normalize_stops(color_list)
|
513
251
|
max = color_list.value.last.stop
|
514
252
|
last_value = nil
|
@@ -527,13 +265,13 @@ module Compass::SassExtensions::Functions::GradientSupport
|
|
527
265
|
|
528
266
|
# returns the end position of the gradient from the color stop
|
529
267
|
def grad_end_position(color_list, radial = Sass::Script::Bool.new(false))
|
530
|
-
|
268
|
+
assert_type color_list, :List
|
531
269
|
default = Sass::Script::Number.new(100)
|
532
270
|
grad_position(color_list, Sass::Script::Number.new(color_list.value.size), default, radial)
|
533
271
|
end
|
534
272
|
|
535
273
|
def grad_position(color_list, index, default, radial = Sass::Script::Bool.new(false))
|
536
|
-
|
274
|
+
assert_type color_list, :List
|
537
275
|
stop = color_list.value[index.value - 1].stop
|
538
276
|
if stop && radial.to_bool
|
539
277
|
orig_stop = stop
|
@@ -576,55 +314,16 @@ module Compass::SassExtensions::Functions::GradientSupport
|
|
576
314
|
inline_image_string(svg.gsub(/\s+/, ' '), 'image/svg+xml')
|
577
315
|
end
|
578
316
|
|
579
|
-
# Get the nth value from a list
|
580
|
-
def _compass_nth(list, place)
|
581
|
-
assert_list list
|
582
|
-
if place.value == "first"
|
583
|
-
list.value.first
|
584
|
-
elsif place.value == "last"
|
585
|
-
list.value.last
|
586
|
-
else
|
587
|
-
list.value[place.value - 1]
|
588
|
-
end
|
589
|
-
end
|
590
|
-
|
591
|
-
def blank(obj)
|
592
|
-
case obj
|
593
|
-
when Sass::Script::Bool
|
594
|
-
Sass::Script::Bool.new !obj.to_bool
|
595
|
-
when Sass::Script::String
|
596
|
-
Sass::Script::Bool.new obj.value.strip.size == 0
|
597
|
-
when Sass::Script::List
|
598
|
-
Sass::Script::Bool.new obj.value.size == 0 || obj.value.all?{|el| blank(el).to_bool}
|
599
|
-
else
|
600
|
-
Sass::Script::Bool.new false
|
601
|
-
end
|
602
|
-
end
|
603
|
-
|
604
317
|
private
|
605
318
|
|
606
|
-
|
607
|
-
|
608
|
-
|
609
|
-
|
610
|
-
|
611
|
-
|
612
|
-
right = extract_list_values(right) if right.is_a?(Sass::Script::Operation)
|
613
|
-
left = literalize(left) unless left.is_a?(Array)
|
614
|
-
right = literalize(right) unless right.is_a?(Array)
|
615
|
-
Array(left) + Array(right)
|
616
|
-
end
|
617
|
-
# Makes a literal from other various script nodes.
|
618
|
-
def literalize(node)
|
619
|
-
case node
|
620
|
-
when Sass::Script::Literal
|
621
|
-
node
|
622
|
-
when Sass::Script::Funcall
|
623
|
-
node.perform(Sass::Environment.new)
|
624
|
-
else
|
625
|
-
Sass::Script::String.new(node.to_s)
|
626
|
-
end
|
319
|
+
def color_stop?(arg)
|
320
|
+
arg.is_a?(ColorStop) ||
|
321
|
+
(arg.is_a?(Sass::Script::List) && ColorStop.new(*arg.value)) ||
|
322
|
+
ColorStop.new(arg)
|
323
|
+
rescue
|
324
|
+
nil
|
627
325
|
end
|
326
|
+
|
628
327
|
def normalize_stops(color_list)
|
629
328
|
positions = color_list.value.map{|obj| obj.dup}
|
630
329
|
# fill in the start and end positions, if unspecified
|
@@ -715,23 +414,32 @@ EOS
|
|
715
414
|
end
|
716
415
|
|
717
416
|
def _center_position
|
718
|
-
|
719
|
-
Sass::Script::
|
720
|
-
|
721
|
-
|
722
|
-
],:space)
|
723
|
-
else
|
724
|
-
Sass::Script::String.new("center center")
|
725
|
-
end
|
417
|
+
Sass::Script::List.new([
|
418
|
+
Sass::Script::String.new("center"),
|
419
|
+
Sass::Script::String.new("center")
|
420
|
+
],:space)
|
726
421
|
end
|
727
422
|
|
728
423
|
end
|
424
|
+
|
425
|
+
module Assertions
|
426
|
+
def assert_type(value, type, name = nil)
|
427
|
+
return if value.is_a?(Sass::Script.const_get(type))
|
428
|
+
err = "#{value.inspect} is not a #{type.to_s.downcase}"
|
429
|
+
err = "$#{name}: " + err if name
|
430
|
+
raise ArgumentError.new(err)
|
431
|
+
end
|
432
|
+
end
|
433
|
+
|
729
434
|
class LinearGradient < Sass::Script::Literal
|
435
|
+
include Assertions
|
730
436
|
include Functions
|
731
437
|
include Compass::SassExtensions::Functions::Constants
|
732
438
|
include Compass::SassExtensions::Functions::InlineImage
|
733
439
|
end
|
440
|
+
|
734
441
|
class RadialGradient < Sass::Script::Literal
|
442
|
+
include Assertions
|
735
443
|
include Functions
|
736
444
|
include Compass::SassExtensions::Functions::Constants
|
737
445
|
include Compass::SassExtensions::Functions::InlineImage
|